Как заменить указанные значения c текстом в ggplot2? - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь визуализировать языковые навыки наших студентов по программам и с течением времени. Это выглядело бы примерно так:

enter image description here

Это, однако, не совсем интуитивно понятно, поэтому я хотел бы заменить значения оси 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.

enter image description here

Можно ли как-нибудь сохранить исходная цифра, но заменить мои цифры текстовыми значениями, как описано выше?

Небольшая выборка данных:

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"))

1 Ответ

1 голос
/ 13 марта 2020

Вы можете сохранить вещи dymani c, передав функцию аргументу меток scale_y_continous(), в этом случае обратные БУКВЫ длины разрывов:

df %>% 
  filter(program == "Ekonom") %>%
  ggplot(aes(x = ADMISSIONROUND_ID, y = SVENSKA)) +
  geom_boxplot() +
  scale_y_continuous(labels = function(x) rev(LETTERS[seq_along(x)]))

enter image description here

...