ggplot - как настроить расстояние между элементами легенды и редактировать символы легенды - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь добавить панели ошибок и медиану к графику с легендами.Я добавил панели ошибок и медианы, но не смог добавить легенды под одной и той же легендой (например, цветом или формой), чтобы они были вместе.Я попробовал legend.spacing.y и другие методы в этой ссылке , но с ограниченным успехом.Также хотелось бы, чтобы в легенде были вертикальные полосы ошибок с их усами.Это мой код:

library(tidyverse)

date <- sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 500,replace=TRUE)
flow <- rnorm(500)
df <- data.frame(date,flow)
monthOrder <- c('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
df$Month <- factor(format(df$date, "%b"), levels = monthOrder)

df.bar <- df %>% count(Month)

med_IQR <- function(x) {
  # Change x below to return the instructed values
  data.frame(y = median(x), # Median
             ymin = quantile(x,0.05), # 1st quartile
             ymax = quantile(x,0.95))  # 3rd quartile
}
p <- ggplot()+
  geom_bar(data=df.bar,aes(Month,n/sum(n)),stat="identity",alpha=0.7,width=0.75)+
  geom_point(data=df,aes(x=Month,y=flow/10),stat="identity",
             position=position_jitter(width=0.25),alpha=0.7,col="orangered3")+
  stat_summary(data=df,aes(x=Month,y=flow/10,shape="Median"),geom="point",fun.y = median,
               size = 2,color="blue3")+
  stat_summary(data=df,aes(x=Month,y=flow/10,color = "CI"),geom="errorbar",fun.data = med_IQR,
               width = 0.2)+
  scale_shape_manual(values=c("Median"=16))+
  scale_color_manual(values=c("CI"="blue3"))+
  guides(shape=guide_legend(title="",override.aes = list(color=c("blue3"))),
         color=guide_legend(title=""))
p

1 Ответ

0 голосов
/ 26 декабря 2018

Чтобы уменьшить расстояние между клавишами легенды, я думаю, вы уже указали правильное направление.Вы пробовали также отрицательные значения, как это?

p <- p + theme(legend.spacing.y = unit(-1,"cm"))

enter image description here

Если я правильно понимаю, вам нужно перевернуть строку, изображающую полосы ошибок.Это можно сделать хакерским способом с помощью функциональности пакета grid:

library(grid)

# Transform to a grob tree
g <- ggplotGrob(p)

# Helpful to check the structure of the grob Tree
View(g$grobs)

# Edit the specific line from the legend key
g$grobs[[15]][["grobs"]][[1]][["grobs"]][[4]][["x0"]] <- unit(0.5, "npc")
g$grobs[[15]][["grobs"]][[1]][["grobs"]][[4]][["y0"]] <- unit(0.1, "npc")
g$grobs[[15]][["grobs"]][[1]][["grobs"]][[4]][["x1"]] <- unit(0.5, "npc")
g$grobs[[15]][["grobs"]][[1]][["grobs"]][[4]][["y1"]] <- unit(0.9, "npc")

# Draw the edited grob tree
grid.newpage(); grid.draw(g)

enter image description here

Если вы хотите узнать больше о grid упакуйте и внесите дополнительные изменения, проверьте browseVignettes(package="grid") и / или проверьте страницу автора с документацией здесь . Отладка сетки Графика Пола Меррелла (автор grid) и Velvet Ly также полезны и хороши в качестве вступления.

Сохранение отредактированного дерева гробов работает с обычным ggsave: ggsave(plot = g, filename = "edited-plot.png")

...