在ggplot2中强制密度图的颜色

Posted

技术标签:

【中文标题】在ggplot2中强制密度图的颜色【英文标题】:Forcing the color of density plots in ggplot2 【发布时间】:2014-03-26 19:35:51 【问题描述】:

我创建了两个重叠的密度函数,如下所示:

require(ggplot2)
set.seed(2)
a =rnorm(100)
b = rnorm(100,.5,1.2)
c = rnorm(100,.3,1.2)
data <- rbind( data.frame(type="a", lr=a), data.frame(type="b", lr=b))
data2 <- rbind( data.frame(type="b", lr=b), data.frame(type="c", lr=c))
m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4) 
m2 <- ggplot(data2, aes(x=lr))
m2 <- m2 + geom_density(aes(fill=factor(type)), size=2, alpha=.4)

这产生了这两个漂亮的情节:

m

m2

我的问题是 ggplot 按字母顺序决定红色和蓝色,正如您在第一个中看到的“b”是蓝色但在第二个中“b”是红色。 我不知道如何强制“b”为红色。 如何为每个颜色选择颜色?

【问题讨论】:

非常感谢 Henrik,我不知道如何为您的编辑投票。 【参考方案1】:

一种颜色适用于所有组

听起来您希望两个密度图都是红色的。在这种情况下,您可以在aes中使用group而不是fill来表示分组变量,然后为整个图形设置fill颜色,如下所示:

m &lt;- m + geom_density(aes(group=factor(type)), fill="#ff0000", size=2, alpha=.4)

每组的特定颜色

但如果您实际上是想为每个组设置特定的颜色,那么您可以使用scale_fill_manual。有两种方法可以做到这一点:或者使用一个 named 颜色向量,或者使用两个向量——一个带有颜色,一个带有组名。这是来自docs:

values 一组美学值,用于将数据值映射到。如果这是一个命名向量,则将根据名称匹配值。如果 未命名,值将按顺序(通常按字母顺序)匹配 规模的界限。任何不匹配的数据值都将 给定na.value

1。使用命名向量

groupColors <- c(a="#00ff00", b="#ff0000", c="#0000ff")

m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4) + 
  scale_fill_manual(values=groupColors)
m2 <- ggplot(data2, aes(x=lr))
m2 <- m2 + geom_density(aes(fill=factor(type)), size=2, alpha=.4) +
  scale_fill_manual(values=groupColors)

2。使用两个向量

groupLimits <- c("a", "b", "c")
groupColors <- c("#00ff00", "#ff0000", "#0000ff")

m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4) + 
  scale_fill_manual(values=groupColors, limits=groupLimits)
m2 <- ggplot(data2, aes(x=lr))
m2 <- m2 + geom_density(aes(fill=factor(type)), size=2, alpha=.4) +
  scale_fill_manual(values=groupColors, limits=groupLimits)

这种方法的一个关键区别是groupLimits 将控制不同组在图例中出现的顺序(在这种情况下,还会强制所有三个组出现)。

【讨论】:

我正在寻找特定的颜色,而您的第二种方法是完美的答案。不幸的是,我必须有 15 分才能投票。 你现在应该可以投票了@shahram,别忘了也接受答案。

以上是关于在ggplot2中强制密度图的颜色的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2密度图图例显示错误的组名和错误的颜色

如何在ggplot2中更改散点图的颜色

如何更改ggplot2中散点图的颜色

R语言使用ggplot2包使用geom_density()函数绘制密度图(自定义颜色填充线条色彩分组均值线)实战(density plot)

ggplot2中散点图的图例(无颜色)

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(添加直方图分组颜色配置)实战(density plot)