带有颜色和图例的简单 ggplot2 情况
Posted
技术标签:
【中文标题】带有颜色和图例的简单 ggplot2 情况【英文标题】:Simple ggplot2 situation with colors and legend 【发布时间】:2019-12-04 10:02:27 【问题描述】:试图用 ggplot2 绘制一些图,但无法弄清楚颜色是如何按照 aes 中定义的那样工作的。与审美长度的错误作斗争。
我尝试在主要的 ggplot 调用 aes 中定义颜色以给出图例,但也在 geom_line aes 中。
# Define dataset:
number<-rnorm(8,mean=10,sd=3)
species<-rep(c("rose","daisy","sunflower","iris"),2)
year<-c("1995","1995","1995","1995","1996","1996","1996","1996")
d.flowers<-cbind(number,species,year)
d.flowers<-as.data.frame(d.flowers)
#Plot with no colours:
ggplot(data=d.flowers,aes(x=year,y=number))+
geom_line(group=species) # Works fine
#Adding colour:
#Defining aes in main ggplot call:
ggplot(data=d.flowers,aes(x=year,y=number,colour=factor(species)))+
geom_line(group=species)
# Doesn't work with data size 8, asks for data of size 4
ggplot(data=d.flowers,aes(x=year,y=number,colour=unique(species)))+
geom_line(group=species)
# doesn't work with data size 4, now asking for data size 8
第一个情节给出 错误:美学必须是长度1或与数据相同(4):组
第二个给出 错误:美学必须是长度 1 或与数据 (8) 相同:x、y、颜色
所以我很困惑 - 当给定长度为 4 或 8 的 aes 时,它并不高兴!
我怎样才能更清楚地考虑这一点?
【问题讨论】:
你确定第一个情节可以正常工作吗?我认为它分配了错误的组。一般问题是您在aes
之外定义group = species
,因此它采用向量species
而不是d.flowers
的列。尝试例如geom_line(aes(group=species))
或将group=species
添加到您的ggplot
-call
另一个问题是您使用cbind
将您的数据转换为字符矩阵,然后使用as.data.frame
将它们转换为因子。最好使用data.frame(number,species,year)
。
【参考方案1】:
这里有 @kath 的 cmets 作为解决方案。一开始学习很微妙,但是 aes() 内部或外部的内容是关键。更多信息在这里 - When does the aesthetic go inside or outside aes()? 和许多优秀的 googleable 以“ggplot 美学”为中心的页面,其中包含许多示例可供剪切、粘贴和尝试。
library(ggplot2)
number <- rnorm(8,mean=10,sd=3)
species <- rep(c("rose","daisy","sunflower","iris"),2)
year <- c("1995","1995","1995","1995","1996","1996","1996","1996")
d.flowers <- data.frame(number,species,year, param1, param2)
head(d.flowers)
#number species year
#1 8.957372 rose 1995
#2 7.145144 daisy 1995
#3 9.864917 sunflower 1995
#4 7.645287 iris 1995
#5 4.996174 rose 1996
#6 8.859320 daisy 1996
ggplot(data = d.flowers, aes(x = year,y = number,
group = species,
colour = species)) + geom_line()
#note geom_point() doesn't need to be grouped - try:
ggplot(data = d.flowers, aes(x = year,y = number, colour = species)) + geom_point()
【讨论】:
以上是关于带有颜色和图例的简单 ggplot2 情况的主要内容,如果未能解决你的问题,请参考以下文章