为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2019-07-11 15:32:59
如何为具有稳定映射的ggplot 2中的分类变量分配颜色?在过去的一个月里我一直在跟上R的步伐。以下是我的问题:在具有稳定映射的ggplot 2中,为分类变量分配颜色的好方法是什么?我需要一组具有不同子集和不同数量的分类变量的图形的一致颜色。例如,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 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

对于简单的情况,如操作中的确切例子,我同意蒂埃里的答案是最好的。但是,我认为指出另一种方法是有用的,当您试图在多个数据帧之间维护一致的颜色方案时,这种方法变得更容易所有这些都是通过减去单个大数据帧获得的。如果从单独的文件中提取因素级别,而不是每个文件中出现所有的因素级别,那么管理多个数据帧中的因素级别就会变得单调乏味。

解决这一问题的一种方法是创建一个自定义的手动颜色刻度,如下所示:

#Some test datadat <- data.frame(x=runif(10),y=runif(10),
        grp = rep(LETTERS[1:5],each = 2),stringsAsFactors = TRUE)#Create a custom color scalelibrary(RColorBrewer)myColors
         <- brewer.pal(5,"Set1")names(myColors) <- levels(dat$grp)colScale <- scale_colour_manual(name = "grp",values = myColors)

然后根据需要将颜色刻度添加到情节中:

#One plot with all the datap <- ggplot(dat,aes(x,y,colour = grp)) + geom_point()p1 <- p + colScale#A second plot with only four of
 the levelsp2 <- p %+% droplevels(subset(dat[4:10,])) + colScale


这样,您就不需要记住或检查每个数据帧,以确保它们具有适当的级别。


查看完整回答
反对 回复 2019-07-11
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

最简单的解决方案是在设置子集之前将分类变量转换为一个因子。底线是,您需要一个因子变量,在您的所有子集中具有完全相同的水平。

library(ggplot2)dataset <- data.frame(category = rep(LETTERS[1:5], 100), 
    x = rnorm(500, mean = rep(1:5, 100)), y = rnorm(500, mean = rep(1:5, 100)))dataset$fCategory <
    - factor(dataset$category)subdata <- subset(dataset, category %in% c("A", "D", "E"))

带有字符变量

ggplot(dataset, aes(x = x, y = y, colour = category)) + geom_point()ggplot(subdata, aes(x = x, y = y, colour = category)) + geom_point()

带因子变量

ggplot(dataset, aes(x = x, y = y, colour = fCategory)) + geom_point()ggplot(subdata, aes(x = x, y = y, colour = fCategory)) + geom_point()


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 2078 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信