[英]Forcing the color of density plots in 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”變紅。 如何為每個顏色選擇顏色?
聽起來你想要兩個密度圖都是紅色的。 在這種情況下,您可以使用group
而不是在aes
中fill
來指示分組變量,然后設置整個圖形的fill
顏色,如下所示:
m <- m + geom_density(aes(
group=factor(type)), fill="#ff0000"
, size=2, alpha=.4)
但是,如果您實際上嘗試為每個組設置特定顏色,則可以使用scale_fill_manual
。 有兩種方法可以做到這一點:使用命名的顏色矢量,或者使用兩個矢量 - 一個使用顏色,一個使用組名稱。 這是來自文檔 :
values
一組美學值以將數據值映射到。 如果這是一個命名向量,則將根據名稱匹配值。 如果未命名,則值將按比例(通常按字母順序)與比例限制匹配。 任何不匹配的數據值都將被賦予na.value
。
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)
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
將控制不同組在圖例中出現的順序(在這種情況下,還會強制顯示所有三個組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.