如何向图例(ggplot)添加多条geom_smooth线?

Uns*_*ine 0 plot r ggplot2

我正在尝试创建一个图,其中在一个图中包含多个 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()
Run Code Online (Sandbox Code Playgroud)

产生以下图:当前绘图的图像

问题是我一生都无法包含一个简单的图例来标记每条趋势线代表的内容。该数据集非常大 - 如果它对于确定解决方案有价值,我将在外部发布到 Stackoverflow。

Stu*_*olf 5

您的数据采用宽格式,或者像矩阵一样。在 ggplot 中添加自定义图例没有简单的方法,因此您需要将当前数据转换为长格式。我模拟了 3 条曲线,就像你所拥有的那样,你可以看到,如果你用一个变量(下例中的“名称”)来调用 geom_line 或 geom_smooth 来分隔你的不同值,它会很好地工作并生成图例。

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述