小编典典

如何为ggplot2中具有稳定映射的分类变量分配颜色?

all

上个月我一直在学习 R。

这是我的问题:

将颜色分配给 ggplot2 中具有稳定映射的分类变量的好方法是什么?我需要在一组具有不同子集和不同数量的分类变量的图表中使用一致的颜色。

例如,

plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()

其中categoricalData有5个级别。

接着

plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset, 
                                 color=categoricaldData.subset)) + geom_line()

其中categoricalData.subset有 3 个级别。

但是,两组中的特定级别最终会以不同的颜色结束,这使得一起阅读图表变得更加困难。

我是否需要在数据框中创建颜色矢量?还是有另一种方法可以将特定颜色分配给类别?


阅读 66

收藏
2022-06-25

共1个答案

小编典典

对于像OP中的确切示例这样的简单情况,我同意蒂埃里的答案是最好的。但是,我认为指出另一种方法会很有用,当您尝试在多个数据帧之间保持一致的配色方案时,这些方案
并非
全部通过子集单个大数据帧获得。如果从单独的文件中提取多个数据框中的因子水平并且并非所有因子水平都出现在每个文件中,那么管理多个数据框中的因子水平可能会变得乏味。

解决此问题的一种方法是创建自定义手动色标,如下所示:

#Some test data
dat <- data.frame(x=runif(10),y=runif(10),
        grp = rep(LETTERS[1:5],each = 2),stringsAsFactors = TRUE)

#Create a custom color scale
library(RColorBrewer)
myColors <- brewer.pal(5,"Set1")
names(myColors) <- levels(dat$grp)
colScale <- scale_colour_manual(name = "grp",values = myColors)

然后根据需要将色阶添加到绘图上:

#One plot with all the data
p <- ggplot(dat,aes(x,y,colour = grp)) + geom_point()
p1 <- p + colScale

#A second plot with only four of the levels
p2 <- p %+% droplevels(subset(dat[4:10,])) + colScale

第一个情节如下所示:

在此处输入图像描述

第二个情节如下所示:

在此处输入图像描述

这样您就不需要记住或检查每个数据框以查看它们是否具有适当的级别。

2022-06-25