R将图例添加到ggplot2

R将图例添加到ggplot2,r,ggplot2,R,Ggplot2,我想画几个密度,图例应该显示每个密度函数的参数。不幸的是,ggplot2没有包含图例(这很奇怪,在教程中它包含了…) 生成数据: x <- seq(from=-5, to=5, by=0.1) y1 = dlaplace(x,0,0.5) y2 = dlaplace(x,0,1) y3 = dlaplace(x,0,2) df = data.frame(x,y1,y2,y3) 我不熟悉ggplot,下面的线程似乎相关,但不幸的是没有帮助我解决它(而且)正如Markus所建议的,您需要将数

我想画几个密度,图例应该显示每个密度函数的参数。不幸的是,
ggplot2
没有包含图例(这很奇怪,在教程中它包含了…)

生成数据:

x <- seq(from=-5, to=5, by=0.1)
y1 = dlaplace(x,0,0.5)
y2 = dlaplace(x,0,1)
y3 = dlaplace(x,0,2)
df = data.frame(x,y1,y2,y3)

我不熟悉
ggplot
,下面的线程似乎相关,但不幸的是没有帮助我解决它(而且)

正如Markus所建议的,您需要将数据转换为长格式。使用
重塑2
中的
melt
功能。它应该是这样的:

plotdf <- as.data.frame(t(df))
plotdf$var <- rownames(plotdf)
plotdf <- melt(plotdf[-c(1),], id.vars = "var")
print(ggplot(plotdf, aes(value, variable, colour = var)) + geom_point()+ scale_y_discrete(breaks=seq(0, 2, by = 0.5)) +
      ggtitle("Gamma distribution density function") +ylab("density")+ xlab("x")+
        theme(legend.position = "bottom")+
        guides(fill = guide_legend(reverse=TRUE)))

plotdf不应在绘图中添加三个线图层,而应将数据从宽改为长,添加一条
geom_线()
,然后将生成的“key”变量映射到
color
美学-这是在
aes()内部完成的。您可以在这里找到更多信息:好的,但是
ggplot
处理数据帧的目的不是吗?我的意思是它应该能够处理宽的,不是吗?这一点可能的重复是处理长格式的数据帧。是的,这一点是处理数据帧,但将
ggplot2
区分开来的是其名称中的“图形语法”。一般的
ggplot
范式是将变量映射到美学,例如映射到颜色的观察组。如果您遵循过教程,它们可能都是这样做的。在融化数据之前,将标签从y1更改为“\alpha=1”的最佳方法是什么,请根据需要更改变量名称。在这里,它将是新列“var”。装箱后,更换“y1”,然后熔化并打印。应该这样做。
plotdf <- as.data.frame(t(df))
plotdf$var <- rownames(plotdf)
plotdf <- melt(plotdf[-c(1),], id.vars = "var")
print(ggplot(plotdf, aes(value, variable, colour = var)) + geom_point()+ scale_y_discrete(breaks=seq(0, 2, by = 0.5)) +
      ggtitle("Gamma distribution density function") +ylab("density")+ xlab("x")+
        theme(legend.position = "bottom")+
        guides(fill = guide_legend(reverse=TRUE)))