跟进这个问题,我想制作一个水平图热图,并根据p.value
我的数据框中的变量为每个单元格着色。
我想让单元格以只有 3 种颜色的方式着色(连续变量的离散调色板):
p.values > 0.05 为白色
p.values <0.05 和 >0.01 为红色
p.values <0.01 为深红色
到目前为止,这是我的 MWE。
set.seed(150)
pv.df <- data.frame(compound=rep(LETTERS[1:8], each=3), comparison=rep(c("a/b","b/c","a/c"), 8), p.value=runif(24, 0, 0.2))
pv.df
myPanel <- function(x, y, z, ...) {
panel.levelplot(x, y, z, ...)
panel.text(x, y, round(z, 2))
}
#install.packages("latticeExtra")
library(latticeExtra)
library(RColorBrewer)
cols <- rev(colorRampPalette(brewer.pal(6, "Reds"))(10))
png(filename="test.png", height=1000, width=600)
print(
levelplot(p.value ~ comparison*compound,
pv.df,
panel = myPanel,
col.regions = cols,
colorkey = list(col = cols,
at = do.breaks(range(pv.df$p.value), 10)),
xlab = "", ylab = "", # remove axis titles
scales = list(x = list(rot = 45), # change rotation for x-axis text
cex = 0.8), # change font size for x- & y-axis text
main = list(label = "Total FAME abundance - TREATMENT",
cex = 1.5)) # change font size for plot title
)
dev.off()
产生:
我p.value
在 levelplot 中显示实际值。上面的代码似乎有问题,因为“0.14”的颜色比它旁边的“0.08”要深。