我在上个月一直在加快速度 .
这是我的问题:
将颜色分配给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个级别 .
但是,两组中的特定级别将以不同的颜色结束,这使得更难以一起阅读图形 .
我是否需要在数据框中创建颜色矢量?或者是否有另一种方法可以为类别指定特定颜色?
5 回答
这是一篇很老的帖子,但我一直在寻找这个问题的答案,
为什么不尝试类似的东西:
如果你有分类值,我看不出为什么这不起作用的原因 .
对于像OP中的确切示例这样的简单情况,我同意Thierry _2566772有用指出另一种方法,当您尝试在多个数据帧之间保持一致的颜色方案时,这种方法变得更加容易数据框 . 如果从单独的文件中提取多个数据框中的因子级别并且并非所有因子级别都出现在每个文件中,则可能会变得单调乏味 .
解决此问题的一种方法是创建自定义手动色标,如下所示:
然后根据需要将颜色比例添加到绘图中:
第一个情节看起来像这样:
第二个情节看起来像这样:
这样,您无需记住或检查每个数据框,以确定它们具有适当的级别 .
malcook在his comment指出的情况相同:不幸的是answer由Thierry与ggplot2版本0.9.3.1不兼容 .
这是第一个数字:
和第二个数字:
我们可以看到颜色不会保持固定,例如E从品红色切换到蓝色 .
正如his comment中的malcook和his comment中的hadley所建议的那样,使用
limits
的代码可以正常工作:给出下图,这是正确的:
这是
sessionInfo()
的输出:最简单的解决方案是将分类变量转换为子集之前的因子 . 底线是您需要一个因子变量,在所有子集中具有完全相同的级别 .
带有字符变量
使用因子变量
根据joran非常有用的答案,我能够为布尔因子(
TRUE
,FALSE
)提供稳定色标的解决方案 .由于ColorBrewer对二进制色标没有多大帮助,因此手动定义了所需的两种颜色 .
这里
myboolean
是myDataFrame
中保持TRUE / FALSE因子的列的名称 .date
和duration
是在此示例中要映射到绘图的x和y轴的列名 .