使用 ggplot2 添加图例

Add Legend with ggplot2

我无法为情节添加图例。我希望情节有点和线,这就是我同时使用 geom_line() 和 geom(points) 的原因。这是我的代码,其中包含一些编造的数字。当我将“颜色”移动到“aes”时,不知何故我得到一个错误,我无法绘制它。

meanted=rnorm(13)
meantotal=rnorm(13)
meantedneg=rnorm(13)
meantedpos=rnorm(13)
totaldf=data.frame(x=c(0:12),meanted,meantotal,meantedneg,meantedpos)


pic=ggplot()+
  geom_point(data=totaldf,aes(x=-x,y=meantedneg), color = "red")+
  geom_point(data=totaldf,aes(x=-x,y=meantedpos), color = "blue")+
  geom_point(data=totaldf,aes(x=-x,y=meanted), color = "green")+
  geom_point(data=totaldf,aes(x=-x,y=meantotal),color = "black")+
  geom_line(data=totaldf,aes(x=-x,y=meantedneg), color = "red")+
  geom_line(data=totaldf,aes(x=-x,y=meantedpos), color = "blue")+
  geom_line(data=totaldf,aes(x=-x,y=meanted), color = "green")+
  geom_line(data=totaldf,aes(x=-x,y=meantotal),color = "black")

print(pic)

正如 markus 所说,如果您 pivot/reshape 数据以便每个所需的图例对象都在一个列中定义,ggplot2 会为您执行此操作。

Pivoting/reshaping 表示从“宽”格式变为“长”格式。我将使用 tidyr::pivot_longer,尽管可以使用 reshape(不是我的偏好)或 data.table::melt:

来完成
tidyr::pivot_longer(totaldf, -x)
# # A tibble: 52 x 3
#        x name         value
#    <int> <chr>        <dbl>
#  1     0 meanted     1.37  
#  2     0 meantotal  -0.279 
#  3     0 meantedneg -0.257 
#  4     0 meantedpos  0.0361
#  5     1 meanted    -0.565 
#  6     1 meantotal  -0.133 
#  7     1 meantedneg -1.76  
#  8     1 meantedpos  0.206 
#  9     2 meanted     0.363 
# 10     2 meantotal   0.636 
# # ... with 42 more rows

从这里开始,

library(ggplot2)
ggplot(tidyr::pivot_longer(totaldf, -x), aes(x, value, color = name, group = name)) +
  geom_path() +
  geom_point() +
  scale_color_manual(values = c(meantedneg="red", meantedpos="blue", meanted="green", meantotal="black"))

(仅供参考,我使用 set.seed(42) 预先植入随机性以获得此随机数据。)