我有来自统计检验的数据(基因集富集分析,但这并不重要),因此我获得了正态分布的统计数据的p值,即正值和负值:< / 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_tile
ggplot
中展示这些数据,以便df$category
按df$p.value
乘以df$stat.sign
(即,统计的标志)
为此我首先采用log10
的{{1}}:
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
的值由其绝对值表示,但其他一切保持不变?这样我仍然可以获得红色和蓝色阴影并保持我想要的顺序。
答案 0 :(得分:1)
我不确定我是否明白了你在寻找什么。你的意思是你不想改变传说中的标签吗?如果您想更改操纵breaks
和labels
scale_fill_gradient2()
的标签,请执行此操作。
ggplot(data=df,aes(x=col,y=category)) +
geom_tile(aes(fill=sig)) +
scale_fill_gradient2(low='darkblue',mid='white',high='darkred',
breaks = order(unique(df$sig)),
labels = abs(order(unique(df$sig)))) +
theme_minimal()+xlab("")+ylab("")+labs(fill="-log10(P-Value)") +
theme(axis.text.y=element_text(size=12,face="bold"),axis.text.x=element_blank())
对于您正在寻找的内容,也许您可以在图中显示文本以显示值,请尝试堆叠stat_bin_2d()
,如下所示:
ggplot(data=df,aes(x=col,y=category)) +
geom_tile(aes(fill=sig)) +
scale_fill_gradient2(low='darkblue',mid='white',high='darkred',
breaks = order(unique(df$sig)),
labels = abs(order(unique(df$sig)))) +
theme_minimal()+xlab("")+ylab("")+labs(fill="-log10(P-Value)") +
stat_bin_2d(geom = 'text', aes(label = sig), colour = 'black', size = 16) +
theme(axis.text.y=element_text(size=12,face="bold"),axis.text.x=element_blank())
您可能需要尝试size
和colour
个参数。
答案 1 :(得分:1)
如果您查看ggplot的文档,scale_fill_gradient2
与其他连续比例一样,请为其labels
参数接受以下其中一项:
NULL
没有标签waiver()
表示为转型对象计算的默认标签breaks
的长度相同)由于您只希望图例值是绝对的,我假设您对图例颜色栏中的默认中断(-0.1到0.4,增量为0.1)感到满意,所以您真正需要的是添加一个操纵标签的功能。
即。而不是这个:
scale_fill_gradient2(low = 'darkblue', mid = 'white', high = 'darkred') +
使用此:
scale_fill_gradient2(low = 'darkblue', mid = 'white', high = 'darkred',
labels = abs) +