позиционирование горизонтальных коробчатых диаграмм в ggplot2

Я пытаюсь создать график с горизонтальными коробками в ggplot2, что вы можете сделать только с помощью corre_flip (). Я также пытаюсь расположить коробки по вертикали, чтобы сгруппировать определенные наборы вместе. Я читал, что для такого рода вещей рекомендуется фасетирование, но это несовместимо с corre_flip (), как мы видим здесь: ggplot2: прямоугольная диаграмма с facet_grid и произвольным масштабированием. Поэтому мне интересно, можно ли использовать пустые уровни для создания пустых пространств. Вот что мне удалось сделать до сих пор:

d <- diamonds
library("ggplot2")
levels(d$cut) <- list(A="Fair", B="Good", "-", C="Very Good", D="Ideal", E="Premium")
p = ggplot(d, aes(x=cut, y=depth))
p + 
    geom_boxplot(color="black", size=0.2) + 
    theme_bw() + 
    scale_x_discrete(breaks = c("A", "B", "-", "C", "D", "E"), drop=FALSE) +
    coord_flip()

ph = 2.75
pw = 4
ggsave("plot.png", height=ph, width=pw)

Как видите, если я создаю пустой уровень со знаком «-» и включаю его в scale_x_discrete (), то каким-то образом я получаю пустую строку. Проблема в том, что я могу добавить только один пробел. Есть ли у кого-нибудь идеи о том, как добавить пробелы между этими горизонтальными ящичками?


person user1704042    schedule 27.09.2012    source источник


Ответы (1)


Вот один из способов, который позволит вам добавить больше пустых уровней:

d <- diamonds
levels(d$cut) <- list(A="Fair", B="Good", " "="space1", C="Very Good", D="Ideal", "  "="space2", E="Premium")
ggplot(d, aes(x=cut, y=depth)) +
  geom_boxplot(color="black", size=0.2) + 
  theme_bw() + 
  scale_x_discrete(breaks = c("A", "B", " ", "C", "D", "  ", "E"), drop=FALSE) +
  coord_flip()

Тем не менее, это оставит отметки на прокладках:

участок с отметками

Удалить все галочки просто, добавив:

+ theme(axis.ticks.y = element_line(linetype=0))

сюжет без галочки

Но если вы хотите удалить отметки только для разделителей, по крайней мере, один способ (я уверен, что есть другие) - сделать это с помощью специальной функции:

f <- function(x) {
  x[!x %in% c("A", "B", "C", "D", "E")] <- NA
  x
}

ggplot(d, aes(x=cut, y=depth)) +
  geom_boxplot(color="black", size=0.2) + 
  theme_bw() + 
  scale_x_discrete(breaks=f, drop=FALSE) +
  coord_flip()

сюжет с отметками

person Ilari Scheinin    schedule 11.01.2016
comment
Если кому-то сложно увидеть разницу, это отметки и линии сетки на оси Y. - person not2qubit; 11.09.2018