在ggplot2中强制密度图的颜色

我有两个重叠密度函数,我创建如下:

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”变红.
如何为每个颜色选择颜色?

最佳答案 所有团体的一种颜色

听起来你想要两个密度图都是红色的.在这种情况下,您可以使用组而不是在aes中填充来指示分组变量,然后设置整个图形的填充颜色,如下所示:

m< -m geom_density(aes(group = factor(type)),fill =“#ff0000”,size = 2,alpha = .4) 每组的特定颜色 但是,如果您实际上尝试为每个组设置特定颜色,则可以使用scale_fill_manual.有两种方法可以做到这一点:使用命名的颜色矢量,或者使用两个矢量 – 一个使用颜色,一个使用组名称.这是从docs

values a set of aesthetic values to map data values to. If this is a named vector, then the values will be matched based on the names. If
unnamed, values will be matched in order (usually alphabetical) with
the limits of the scale. Any data values that don’t match will be
given 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将控制不同组在图例中出现的顺序(在这种情况下,还会强制显示所有三个组).

点赞