Как сделать некоторые изменения в geom_boxplot? - PullRequest
1 голос
/ 12 декабря 2011

Я хочу сделать некоторые модификации geom_boxplot:

  1. в обратном порядке оси Y (A1 сверху и A4 снизу).
  2. Можно ли нарисовать мою легенду на графике, а не рядом с графиком.

Вот пример:

aa <- c(rep("A1",5), rep("A2",3), rep("A3",4), rep("A4",9))
aa <- as.factor(aa)
per <- runif(length(aa), min=0, max=100)
per <- trunc(per)
z <- data.frame(x=aa,y=per) 
z$ch <- NA
z[z$x %in% c("A1","A2"), "ch"] <- "string1"
z[z$x %in% c("A3"), "ch"] <- "string2"
z[z$x %in% c("A4"), "ch"] <- "string3"

z$ch <- as.factor(z$ch)

p <- ggplot(z, aes(x, y, fill = ch)) + 
geom_boxplot(size = 0.2, position = "dodge", outlier.colour = "red", outlier.shape = 16,     outlier.size = 2) + 
geom_jitter(size=1) + opts(legend.position = "right") + 
scale_colour_hue("variable") +
coord_flip()
print(p)

1 Ответ

2 голосов
/ 12 декабря 2011

Поменять порядок меток на оси Y можно, переупорядочив уровни коэффициента (z $ x):

z$x = with(z, factor(x, rev(levels(x))))

Чтобы получить легенду внутри графика, вы можете использоватьlegend.position вариант.Хитрость в том, что когда вы устанавливаете его, например, «верх» или «низ», легенда размещается за пределами графика.Когда используется вектор из двух чисел, он размещает легенду в этой позиции внутри графика.В коде:

p + opts(legend.position = c(0.85,0.85), 
         legend.background = theme_rect("white"))

Что приводит к следующему сюжету, который, я думаю, является тем, что вы хотели:

enter image description here

Обратите внимание на добавление legend.background кнарисуйте заполненный прямоугольник, окружающий легенду.Кроме того, мне самому не очень нравится иметь легенду внутри сюжета, так как она может скрыть данные.Но это, конечно, решать вам :).

...