在ggplot2中使用多个scale_fill_manual

4
假设我有一个这样的数据框:
Date <- seq(as.Date("1990-03-01"), by = 'quarters', length.out=100)
Date<- as.yearqtr(Date, format="%Y-%m-%d")
A <- runif(100, 500, 2000)
B <- runif(100, 200, 1000)
C <- runif(100, 1000, 5000)
df <- data.frame(Date, A, B, C)

我想使用ggplot2创建一个热度图,但要针对每个变量A和B的值的百分位数应用不同的条件性离散颜色比例尺。例如,值在第25个百分位以下>红色,值在第25个到第50个百分位之间>橙色,值在第50个到第75个百分位之间>黄色,值在第75个到第100个百分位之间>绿色。
我可以通过使用melt函数并将x=Date和y=variable、fill=value来在ggplot geom_tiles上创建一个热度图。然而,它们将取所有变量的值作为一个向量,并根据所有组合值的25个百分位数给出。是否有一种方法可以单独地针对变量A、B、C的百分位数调整scale_fill_manual的颜色比例尺。在这种情况下,我可能需要应用多个scale_fill_manual函数。
或者,是否有任何方法可以将ggplot堆叠在一起,因为我已经能够为每个变量创建单独的热度图。我已经苦恼了一段时间,非常感谢您的帮助。
1个回答

1
这应该有助于颜色编码:

Date <- seq(as.Date("1990-03-01"), by = 'quarters', length.out=100)
Date<- as.yearqtr(Date, format="%Y-%m-%d")
A <- runif(100, 500, 2000)
B <- runif(100, 200, 1000)
C <- runif(100, 1000, 5000)
df <- data.frame(Date, A, B, C)

df

quantA <- quantile(df$A, c(0.25, 0.75))
quantB <- quantile(df$B, c(0.25, 0.75))
quantC <- quantile(df$C, c(0.25, 0.75))

df$quantA  <- with(df, factor(ifelse(A < quantA[1], 0, 
                                      ifelse(A < quantA[2], 1, 2))))
df$quantB  <- with(df, factor(ifelse(B < quantB[1], 0, 
                                     ifelse(B < quantB[2], 1, 2))))
df$quantC  <- with(df, factor(ifelse(C < quantC[1], 0, 
                                     ifelse(C < quantC[2], 1, 2))))

请查看以下帖子以获取有关基于百分位数进行颜色编码的更多详细信息:

在ggplot中根据百分位数对点进行颜色编码

而这篇文章则是关于基于多个变量进行颜色编码的:

R ggplot柱状图;基于两个不同变量来填充


非常感谢!这对我真的很有用,我忘记了我实际上可以将它们分组并与组一起工作。谢谢! - Binggg
@Binggg 很棒,很高兴听到这个消息! - Hack-R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接