在ggplot2中强制密度图的颜色

时间:2014-02-24 21:42:18

标签: r ggplot2 density-plot

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

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

enter image description here

m2

enter image description here

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

1 个答案:

答案 0 :(得分:2)

所有组的一种颜色

听起来你希望两个密度图都是红色的。在这种情况下,您可以在group中使用fill代替aes来指示分组变量,然后为整个图设置fill颜色,如下所示:< / p>

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

每组的特定颜色

但是如果你真的想为每个组设置特定的颜色,那么你可以使用scale_fill_manual。有两种方法可以做到这一点:使用命名的颜色向量,或者使用两个向量 - 一个用颜色,一个用组名。这是来自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将控制不同组在图例中出现的顺序(在这种情况下,还会强制显示所有三个组)。