如何用 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)]))