带有颜色和图例的简单 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 情况的主要内容,如果未能解决你的问题,请参考以下文章

使用 ggplot2 创建带有形状的图例

11.ggplot2——色阶与图例(二)

ggplot2中散点图的图例(无颜色)

ggplot2 中用于扩展图例标签的默认颜色

ggplot2:图例混合颜色和隐藏线用于预测图

更改 ggplot2 中条形图和图例的默认颜色