使用 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)
预先植入随机性以获得此随机数据。)
我无法为情节添加图例。我希望情节有点和线,这就是我同时使用 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)
预先植入随机性以获得此随机数据。)