Как добавить несколько строк geom_smooth в легенду (ggplot)? - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь создать график, который включает в себя несколько линий тренда geom_smooth на одном графике. Мой текущий код выглядит следующим образом:

png(filename="D:/Users/...", width = 10, height = 8, units = 'in', res = 300)
ggplot(Data) + 
  geom_smooth(aes(BA,BAgp1),colour="red",fill="red") + 
  geom_smooth(aes(BA,BAgp2),colour="turquoise",fill="turquoise") + 
  geom_smooth(aes(BA,BAgp3),colour="orange",fill="orange") + 
  xlab(bquote('Tree Basal Area ('~cm^2~')')) + 
  ylab(bquote('Predicted Basal Area Growth ('~cm^2~')')) + 
  labs(title = expression(paste("Other Softwoods")), subtitle = "Tree Level Basal Area Growth") +
  theme_bw()
dev.off()

Что приводит к следующему графику: image of current plot

Проблема в том, что я не могу на всю жизнь включить простую легенду, где я могуобозначить, что представляет каждая линия тренда. Набор данных довольно большой - если это будет полезно для определения решения, которое я опубликую внешне в Stackoverflow.

1 Ответ

1 голос
/ 05 ноября 2019

Ваши данные в широком формате или в виде матрицы. Нет простого способа добавить пользовательскую легенду в ggplot, поэтому вам нужно преобразовать текущие данные в длинный формат. Я смоделировал 3 кривые, как у вас, и вы можете увидеть, если вы вызываете geom_line или geom_smooth с переменной («name» в примере ниже), которая разделяет ваши разные значения, она будет работать и красиво создавать легенду.

library(dplyr)
library(tidyr)
library(ggplot2)
X = 1:50
#simulate data
Data = data.frame(
       BA=X,
       BAgp1 = log(X)+rnorm(length(X),0,0.3),
       BAgp2 = log(X)+rnorm(length(X),0,0.3) + 0.5,
       BAgp3 = log(X)+rnorm(length(X),0,0.3) + 1)

# convert this to long format, use BA as id
Data <- Data %>% pivot_longer(-BA)
#define colors
COLS = c("red","turquoise","orange")
names(COLS) = c("BAgp1","BAgp2","BAgp3")
###
ggplot(Data) + 
  geom_smooth(aes(BA,value,colour=name,fill=name)) +
  # change name of legend here 
  scale_fill_manual(name="group",values=COLS)+
  scale_color_manual(name="group",values=COLS)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...