簡體   English   中英

在ggplot2中強制密度圖的顏色

[英]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而不是在aesfill來指示分組變量,然后設置整個圖形的fill顏色,如下所示:

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

每組的特定顏色

但是,如果您實際上嘗試為每個組設置特定顏色,則可以使用scale_fill_manual 有兩種方法可以做到這一點:使用命名的顏色矢量,或者使用兩個矢量 - 一個使用顏色,一個使用組名稱。 這是來自文檔

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將控制不同組在圖例中出現的順序(在這種情況下,還會強制顯示所有三個組)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM