如何将 p 值注释到 R 上的多面条形图上?
How do I annotate p-values onto a faceted bar plots on R?
我想知道是否可以在图表顶部和 2 个条形图之间注释 p 值。在我的例子中,使用 ggplot2,我有一个具有 2 个条件(通道和隔离)的多面图,并且在每个条件下,有 3 个 levels/3 条形图(GA、CH、KO)。如果可能的话,我有一些来自成对比较(GA 与 CH、CH 与 KO、GA 与 KO)的 p 值,我想在图表上显示。
我的 ggplot 脚本如下:
#plot
dev.new()
accentrating_comb <- ggplot(ch_ko_am_comb, aes(x=speaker_type, y=Mean, fill=speaker_type)) +
geom_bar(position=position_dodge(width=1), stat="identity", colour="black", size=.5) +
geom_errorbar(aes(ymin=cllo, ymax=clup), colour="black", size=.3, width=.2, position=position_dodge(width=1)) +
geom_text(aes(label=lable), colour="black", vjust=-0.5, size=10, hjust=-2) +
coord_cartesian(ylim=c(0,10)) +
ylab("Mean Accent Rating") +
scale_fill_brewer(type = "div", palette = "Greys") +
guides(fill=guide_legend("Accent")) +
theme_bw() +
theme(plot.title = element_text(size = 22), axis.title.x = element_blank(), axis.title.y = element_text(size = 14), axis.line = element_line(colour = "black"), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), strip.text.x = element_text(size = 14), axis.text.x = element_text(size=14), legend.title=element_text(size=14), legend.text=element_text(size=14), panel.margin.x=unit(20,"pt")) +
facet_wrap( ~ condition ) #this creates multiple panels
print(accentrating_comb)
#dev.off()
为了生成类似于您的图(两个方面,每个方面 3 个变量),我使用 iris
和 ToothGrowth
数据集创建了一个虚拟数据集。
此解决方案使用 ggsignif
程序包用 p 值注释绘图方面,并显示如何在需要时向注释添加前缀 p=
。
library(ggplot2)
library(ggsignif)
data("ToothGrowth")
data('iris')
iris2<-iris[c(1:10,50:60,100:110,61:70,11:20,111:118),]
big_data<-cbind(iris2,ToothGrowth) #dummy data
plot<-ggplot(big_data, aes(Species, len)) +
geom_boxplot() +
geom_signif(comparisons =list(c("setosa", "virginica"),c('setosa','versicolor'),c('virginica','versicolor')),
step_increase = 0.1)+
facet_wrap(~supp) #create initial plot
pg<-ggplot_build(plot) #disassemble plot and obtain information
pv<-pg$data[[2]]$annotation #seek out p values
new<-as.factor(paste('p=',pv)) #add the desired prefix
pg$data[[2]]$annotation<-new #swap out the original annotation
q<-ggplot_gtable(pg) #reassemble the plot
plot(q) #generate new plot
我想知道是否可以在图表顶部和 2 个条形图之间注释 p 值。在我的例子中,使用 ggplot2,我有一个具有 2 个条件(通道和隔离)的多面图,并且在每个条件下,有 3 个 levels/3 条形图(GA、CH、KO)。如果可能的话,我有一些来自成对比较(GA 与 CH、CH 与 KO、GA 与 KO)的 p 值,我想在图表上显示。
我的 ggplot 脚本如下:
#plot
dev.new()
accentrating_comb <- ggplot(ch_ko_am_comb, aes(x=speaker_type, y=Mean, fill=speaker_type)) +
geom_bar(position=position_dodge(width=1), stat="identity", colour="black", size=.5) +
geom_errorbar(aes(ymin=cllo, ymax=clup), colour="black", size=.3, width=.2, position=position_dodge(width=1)) +
geom_text(aes(label=lable), colour="black", vjust=-0.5, size=10, hjust=-2) +
coord_cartesian(ylim=c(0,10)) +
ylab("Mean Accent Rating") +
scale_fill_brewer(type = "div", palette = "Greys") +
guides(fill=guide_legend("Accent")) +
theme_bw() +
theme(plot.title = element_text(size = 22), axis.title.x = element_blank(), axis.title.y = element_text(size = 14), axis.line = element_line(colour = "black"), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), strip.text.x = element_text(size = 14), axis.text.x = element_text(size=14), legend.title=element_text(size=14), legend.text=element_text(size=14), panel.margin.x=unit(20,"pt")) +
facet_wrap( ~ condition ) #this creates multiple panels
print(accentrating_comb)
#dev.off()
为了生成类似于您的图(两个方面,每个方面 3 个变量),我使用 iris
和 ToothGrowth
数据集创建了一个虚拟数据集。
此解决方案使用 ggsignif
程序包用 p 值注释绘图方面,并显示如何在需要时向注释添加前缀 p=
。
library(ggplot2)
library(ggsignif)
data("ToothGrowth")
data('iris')
iris2<-iris[c(1:10,50:60,100:110,61:70,11:20,111:118),]
big_data<-cbind(iris2,ToothGrowth) #dummy data
plot<-ggplot(big_data, aes(Species, len)) +
geom_boxplot() +
geom_signif(comparisons =list(c("setosa", "virginica"),c('setosa','versicolor'),c('virginica','versicolor')),
step_increase = 0.1)+
facet_wrap(~supp) #create initial plot
pg<-ggplot_build(plot) #disassemble plot and obtain information
pv<-pg$data[[2]]$annotation #seek out p values
new<-as.factor(paste('p=',pv)) #add the desired prefix
pg$data[[2]]$annotation<-new #swap out the original annotation
q<-ggplot_gtable(pg) #reassemble the plot
plot(q) #generate new plot