在ggplot2中使用多个scale_fill_manual

时间:2016-06-13 01:48:29

标签: r

假设我有一个数据框:

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百分位数之间的值>绿色。

我可以使用融合函数在ggplot geom_tiles上创建一个热图,并使用fill = value创建x = Date和y = variable。但是,他们会将所有变量的值作为一个向量,并根据所有组合值给出第25个百分位数。有没有办法根据单个变量A,B,C的百分位单独调整scale_fill_manual。在这种情况下,我可能需要应用多个scale_fill_manual函数。

或者有任何方法可以将ggplot叠加在一起,因为我已经能够为每个变量创建单独的热图。我一直在努力解决这个问题,感谢所有的帮助,非常感谢。

1 个答案:

答案 0 :(得分: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))))

有关基于百分位数的颜色编码的详细信息,请参阅此帖子:

Color code points based on percentile in ggplot

这个基于多个变量的颜色编码:

R ggplot barplot; Fill based on two separate variables