如何用 ggplot2 中的文本替换特定值?
How to I replace specific values with text in ggplot2?
我正在尝试可视化每个项目和一段时间内学生的语言技能。那看起来像这样:
但这并不完全直观,所以我想替换 y 轴值,以便:
> 20.0 codes for A,
> 17.5 codes for B
> 15.0 codes for C
> 12.5 codes for D
> 10.0 codes for E.
我尝试扩充我的原始代码并编写了以下内容:
totdata%>%filter(program=="Ekonom")%>%
ggplot(aes(x=ADMISSIONROUND_ID,y=SVENSKA))+
geom_boxplot()**+
scale_y_continuous(labels=c("20.0" = "A","17.5" = "B", "15.0" = "C", "12.5"="D", "10"="E"))**
这会产生下图,这与我想要的相反。值已按相反顺序替换,因此最高值为 E 而不是 A。
有什么方法可以让我保留原始数字,但用文本值替换我的数字,如上所述?
小数据样本:
structure(list(start_date = structure(c(15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585), class = "Date"), SVENSKA = c(15, 15, 15, 10, 15,
15, 15, 10, 15, 20, 20, 15, 15, 20, 20, 20, 15, 20, 15, 10, 15,
20, 10, 20, 15, 15, 10, 15, 10, 20, 10, 15, 15, NA, 15, 10, NA,
20, 20, 20, 20, 20, 15, 15, 20, 15, 15, 15, 15, 20), ADMISSIONROUND_ID = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("HT2012", "HT2013", "HT2014", "HT2015", "HT2016",
"HT2017", "HT2018", "HT2019"), class = c("ordered", "factor")),
program = c("Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom")), row.names = c(NA, -50L), groups = structure(list(
start_date = structure(15585, class = "Date"), .rows = list(
1:50)), row.names = c(NA, -1L), class = c("tbl_df", "tbl",
"data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df",
"tbl", "data.frame"))
您可以通过将函数传递给 scale_y_continous()
的 labels 参数来保持动态,在这种情况下反转中断长度的字母:
df %>%
filter(program == "Ekonom") %>%
ggplot(aes(x = ADMISSIONROUND_ID, y = SVENSKA)) +
geom_boxplot() +
scale_y_continuous(labels = function(x) rev(LETTERS[seq_along(x)]))
我正在尝试可视化每个项目和一段时间内学生的语言技能。那看起来像这样:
但这并不完全直观,所以我想替换 y 轴值,以便:
> 20.0 codes for A,
> 17.5 codes for B
> 15.0 codes for C
> 12.5 codes for D
> 10.0 codes for E.
我尝试扩充我的原始代码并编写了以下内容:
totdata%>%filter(program=="Ekonom")%>%
ggplot(aes(x=ADMISSIONROUND_ID,y=SVENSKA))+
geom_boxplot()**+
scale_y_continuous(labels=c("20.0" = "A","17.5" = "B", "15.0" = "C", "12.5"="D", "10"="E"))**
这会产生下图,这与我想要的相反。值已按相反顺序替换,因此最高值为 E 而不是 A。
有什么方法可以让我保留原始数字,但用文本值替换我的数字,如上所述?
小数据样本:
structure(list(start_date = structure(c(15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585,
15585, 15585), class = "Date"), SVENSKA = c(15, 15, 15, 10, 15,
15, 15, 10, 15, 20, 20, 15, 15, 20, 20, 20, 15, 20, 15, 10, 15,
20, 10, 20, 15, 15, 10, 15, 10, 20, 10, 15, 15, NA, 15, 10, NA,
20, 20, 20, 20, 20, 15, 15, 20, 15, 15, 15, 15, 20), ADMISSIONROUND_ID = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = c("HT2012", "HT2013", "HT2014", "HT2015", "HT2016",
"HT2017", "HT2018", "HT2019"), class = c("ordered", "factor")),
program = c("Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom", "Ekonom",
"Ekonom", "Ekonom", "Ekonom")), row.names = c(NA, -50L), groups = structure(list(
start_date = structure(15585, class = "Date"), .rows = list(
1:50)), row.names = c(NA, -1L), class = c("tbl_df", "tbl",
"data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df",
"tbl", "data.frame"))
您可以通过将函数传递给 scale_y_continous()
的 labels 参数来保持动态,在这种情况下反转中断长度的字母:
df %>%
filter(program == "Ekonom") %>%
ggplot(aes(x = ADMISSIONROUND_ID, y = SVENSKA)) +
geom_boxplot() +
scale_y_continuous(labels = function(x) rev(LETTERS[seq_along(x)]))