【问题标题】:ggbiplot: how to maintain group colors after changing point size?ggbiplot:更改点大小后如何保持组颜色?
【发布时间】:2015-06-21 19:38:14
【问题描述】:

我正在对 2 种栖息地类型的地块进行 PCA,我在其中收集了多个环境变量的数据。我能够从 ggbiplot 默认值更改点的颜色。我希望每个点的大小取决于该地块中的树冠覆盖,我可以通过以下方式做到这一点:

point.size = df$canopy.cover * 0.1  

其中df$canopy.cover 的值范围为 0-100 和 0.1,因为 100% 的树冠覆盖率 = 点大小 10。

问题:更改点的大小后,我无法保持与两组关联的颜色。使用以下伪数据:

env.vars<-data.frame(replicate(5,sample(0:10,20,rep=TRUE)))

cover<-c(89, 92, 72, 53, 88, 89, 71, 83, 71, 66, 23, 30,  5, 15, 57, 54,0, 23, 9, 16)

habitat<-c("habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2")

point.size<-cover*0.1

nest.env.pca <- prcomp(env.vars, center = TRUE, scale. = TRUE) 

g <- ggbiplot(nest.env.pca, obs.scale = 1, var.scale = 1, 
     group = habitat, ellipse = TRUE, 
     circle = TRUE, varname.size=3)+
     scale_colour_manual(values=c("blue", "red")) +
     geom_point(size=point.size)

print(g)

我得到类似的东西:

当我替换时:

geom_point(size=point.size)

与:

geom_point(aes(colour=habitat), size=point.size)

根据ggbiplot - change the point size,我收到以下错误:

Error: Incompatible lengths for set aesthetics: size

有什么建议吗?谢谢。

编辑:一些 PseudoData 尝试一下:

【问题讨论】:

  • 您能否在问题中包含(部分)数据的dput?请参阅how to give a minimal reproducible example 上的常见问题解答。
  • 当然,我认为这只是一个明显的语法错误,但我继续添加了一些伪数据以按照您的要求进行尝试。谢谢。

标签: r ggplot2 ggbiplot


【解决方案1】:

我认为这是一个一般的 ggplot2 语法问题,因为它出现在更简单的示例中(例如,ggplot(mtcars) + geom_point(aes(disp, hp, color=cyl), size =mtcars$model)

但是,我认为这对你有用:

geom_point(aes(X1, X2, color=habitat, size = point.size)) + scale_size_identity()

所以问题中代码的完整答案是(来自 Emilio 下面的评论):

env.vars<-data.frame(replicate(5,sample(0:10,20,rep=TRUE)))

cover<-c(89, 92, 72, 53, 88, 89, 71, 83, 71, 66, 23, 30,  5, 15, 57, 54,0, 23, 9, 16)

habitat<-c("habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2", "habitat1", "habitat2")

point.size<-cover*0.1

nest.env.pca <- prcomp(env.vars, center = TRUE, scale. = TRUE) 

g <- ggbiplot(nest.env.pca, obs.scale = 1, var.scale = 1, 
     group = habitat, ellipse = TRUE, 
     circle = TRUE, varname.size=3)+
     scale_colour_manual(values=c("blue", "red")) +
     geom_point(aes(color=habitat, size = point.size)) + scale_size_identity() 

print(g)

【讨论】:

  • 谢谢 Jamie - 效果很好。对于那些发现问题并希望在问题中使用上述代码的解决方案的人,请将 geom_point(size=point.size) 替换为 geom_point(aes(color=habitat, size = point.size)) + scale_size_identity()
猜你喜欢
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多