操纵scale_fill_gradient2的图例
问题描述:
我有来自统计测试(基因集丰富分析,但这不重要)的数据,所以我获得了正态分布和正态分布的统计量的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
值由它们的绝对值来表示,但一切保持不变?这样我仍然可以获得红色和蓝色色调并保持我想要的顺序。
答
如果您检查ggplot的文档,scale_fill_gradient2
,像其他的连续尺度,接受其labels
参数执行下列操作之一:
-
NULL
对没有标签 -
waiver()
对于计算为transofrmation对象的默认标签 - 给出标签的字符向量(必须与
breaks
相同长度) - 一个函数需要br eaks作为输入并返回标签作为输出
由于您只想传说值是绝对的,我假设你满意的传奇色彩条(-0.1默认的休息,以0.4与0.1的增量),所以你真正需要的是添加一个操纵标签的函数。
I.e.而不是这样的:
scale_fill_gradient2(low = 'darkblue', mid = 'white', high = 'darkred') +
使用此:
scale_fill_gradient2(low = 'darkblue', mid = 'white', high = 'darkred',
labels = abs) +
答
我不确定我是否明白你在找什么。你的意思是说你不想在传说中改变标签?如果您想要更改由scale_fill_gradient2()
给出的操作breaks
和labels
的标签,则应执行此操作。
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
参数一些尝试。