【发布时间】:2017-10-11 22:47:32
【问题描述】:
我有来自统计测试的数据(基因集富集分析,但这并不重要),因此我获得了正态分布的统计数据的 p 值,即正值和负值:
测试在几个类别上运行:
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_tileggplot 中显示这些数据,以便我将df$category 的颜色编码为df$p.value 乘以df$stat.sign(即统计的符号)
为此,我首先使用df$p.value 的log10:
df$sig <- df$stat.sign*(-1*log10(df$p.value))
然后我order df by 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 的值由它们的绝对值表示,但其他一切都保持不变?这样我仍然可以获得红色和蓝色阴影并保持我想要的顺序。
【问题讨论】: