ggplot2着色时如何保留没有用到的因子

2022-09-21 11:50:48 浏览数 (2)

我们有时候会遇到这样的情况,你的数据分为多个类别,画图的时候是根据这个类别来着色的。后面做了一些处理之后,可能有些类别的数据被过滤掉了,再去画图的时候,颜色就跟前面不对应了。怎么才能解决这个问题呢?下面小编结合一个具体的例子来展示一下。

代码语言:javascript复制
#创建一个数据框,x,y,z三列,x和y分别对应三个点的横纵坐标,z为三个点的level,用来着色
data=data.frame(x=c(1,2,3),y=c(1,2,3),z=factor(c("low","mid","high"),levels=c("low","mid","high")))
#加载ggplot2
library(ggplot2)
#用散点图划出这三个点,根据z来用三种不同的颜色,点大小为5
ggplot(data,aes(x,y,colour=z)) geom_point(size=5)

这里得到的low,mid和high的颜色分别为红,绿和蓝

如果我们删掉low这个点,我们再来画图看看

代码语言:javascript复制
#如果这套数据删掉low这个点
#画出来的图颜色会跟前面一张图不对应
ggplot(subset(data,z!="low"),aes(x,y,colour=z)) geom_point(size=5)

你会发现现在mid的颜色不再是绿色,而是红色,虽然high的颜色还是蓝色,但是整体已经乱掉了,legend里面是显示了用到的两个levels

那么怎么才能,让这两个点的颜色保持跟第一张图里面一致呢

代码语言:javascript复制
#如果想让这两个点的颜色跟前面三个点的颜色对应,可以用scale_colour_hue(drop = FALSE)
ggplot(subset(data,z!="low"),aes(x,y,colour=z)) geom_point(size=5) 
scale_colour_hue(drop = FALSE)

这个时候你会发现,用了scale_colour_hue(drop = FALSE)之后颜色就对上了,legend里面显示了三个levels, 虽然low这个点对应的数据已经不存在了,但是对应的level这里保留了,从而确保了颜色跟第一幅图是对应的。

这种方法在单细胞数据分析的时候很实用,能够保证使用不同的feature分群聚类得到的细胞亚群展示的时候,颜色是一致的,方便对比观察。

0 人点赞