假设我有一个数据框:
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叠加在一起,因为我已经能够为每个变量创建单独的热图。我一直在努力解决这个问题,感谢所有的帮助,非常感谢。
答案 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
这个基于多个变量的颜色编码: