ggplot2 - объединение легенды geom_bar и geom_line - PullRequest
0 голосов
/ 04 мая 2020

Я не могу объединить мои легенды geom_bar и geom_line. Я знаю, что есть несколько дискуссий на эту тему, и я думаю, что попробовал большинство предложений без успеха, но я не думаю, что понимаю проблему. Поскольку я потратил несколько часов на это и не добился никакого прогресса, я подумал, что пришло время спросить экспертов. Спасибо за любую помощь!

Мои данные:

A <-data.frame("X"= 1:6, "New" = c(5,25,10,43,2,3), "Recaptured" = c(0,2,20,20,29,14), "Cumulative" = c(5,30,40,83,85,88))

Мой код:

A$X<-factor(A$X, levels=A$X)
A[A==0]<-NA
p1<-A %>%
  gather(key,value,New,Recaptured) %>%
  ggplot(aes(x=X, y=value, fill=key,  color="Cumulative"))+
  geom_line(aes(y=Cumulative,group=1), size=1.25)+
  geom_bar(stat="identity", width = 0.4, position = position_dodge(), color="black")+
  scale_fill_grey(start = 0, end = 0.9)+
  xlab(NULL)+
  ylab(NULL)+
  ggtitle("none")+
  theme_minimal()+
  theme(axis.title.x = element_text(size = 12, hjust = 0.35))+
  theme(plot.title = element_text(hjust = 0.5)) +
  #theme(plot.margin = margin(t=4,1,1,1, "lines"))+
  theme(legend.direction="horizontal") +
  theme(legend.position = c(.25, 0.9))+
  theme(legend.background = element_rect(fill = "white", linetype = "solid", color="black"))+
  theme(legend.title = element_blank())
p1

Текущий участок: введите описание изображения здесь

enter image description here

1 Ответ

2 голосов
/ 04 мая 2020

Как насчет этого? Я просто удалил вертикальное пространство между легендами с помощью legend.spacing.y = unit(0.0, 'cm') и изменил параметр legend.background на element_blank(), так как этот параметр создаст рамку вокруг каждой отдельной легенды, а это не то, что вам нужно, и добавил legend.box.background параметр для рисования рамки вокруг обеих легенд одновременно.

enter image description here

A %>% 
    ggplot(aes(x=X, y=value, fill=key,  color="Cumulative"))+
    geom_line(aes(y=Cumulative,group=1), size=1.25)+
    geom_col(width = 0.4, position = position_dodge(), color="black")+
    scale_fill_grey(start = 0, end = 0.9)+
    xlab(NULL) +
    ylab(NULL) +
    ggtitle("My title") +
    theme_minimal() +
    theme(
        axis.title.x = element_text(size = 12, hjust = 0.35),
        plot.title = element_text(hjust = 0.5),
        legend.direction="horizontal",
        legend.position = c(0.5, 1.2),
        legend.background = element_blank(),
        legend.box.background = element_rect(size = 1),
        legend.title = element_blank(),
        plot.margin = margin(4, 1, 1, 1, "lines"),
        legend.box = "horizontal",
        legend.spacing.y = unit(0.0, 'cm')
    )
...