我有来自统计测试(基因集丰富分析,但这不重要)的数据,所以我获得了正态分布和正态分布的统计量的p值:操纵scale_fill_gradient2的图例
该试验在几个类别运行:
set.seed(1)
df <- data.frame(col = rep(1,7),
category = LETTERS[1:7],
stat.sign = sign(rnorm(7)),
p.value = runif(7, 0, 1),
stringsAsFactors = TRUE)
我想在geom_tile
ggplot
使得我颜色代码来呈现这些数据df$category
通过df$p.value
乘以它们df$stat.sign
(即,的符号统计)
对于我第一次拿log10
df$p.value
的:
df$sig <- df$stat.sign*(-1*log10(df$p.value))
然后我order
的df
通过df$sig
为df$sig:
library(dplyr)
df <- rbind(dplyr::filter(df, sig < 0)[order(dplyr::filter(df, sig < 0)$sig), ],
dplyr::filter(df, sig > 0)[order(dplyr::filter(df, sig > 0)$sig), ])
,然后将每个符号我ggplot
它:
library(ggplot2)
df$category <- factor(df$category, levels=df$category)
ggplot(data = df,
aes(x = col, y = category)) +
geom_tile(aes(fill=sig)) +
scale_fill_gradient2(low='darkblue', mid='white', high='darkred') +
theme_minimal() +
xlab("") + ylab("") + labs(fill="-log10(P-Value)") +
theme(axis.text.y = element_text(size=12, face="bold"),
axis.text.x = element_blank())
这给了我:
有没有一种方法来操纵legend
使得df$sig
值由它们的绝对值来表示,但一切保持不变?这样我仍然可以获得红色和蓝色色调并保持我想要的顺序。