将星星放在 ggplot 条形图和箱形图上 - 表示显着性水平(p 值) [英] Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value)

查看:61
本文介绍了将星星放在 ggplot 条形图和箱形图上 - 表示显着性水平(p 值)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在条形图或箱形图上放置星号以显示一组或两组之间的显着性水平(p 值)是很常见的,以下是几个示例:

It's common to put stars on barplots or boxplots to show the level of significance (p-value) of one or between two groups, below are several examples:

星数由p-value定义,例如p-value

The number of stars are defined by p-value, for example one can put 3 stars for p-value < 0.001, two stars for p-value < 0.01, and so on (although this changes from one article to the other).

还有我的问题:如何生成类似的图表?基于显着性水平自动放置星星的方法非常受欢迎.

And my questions: How to generate similar charts? The methods that automatically put stars based on significance level are more than welcome.

推荐答案

请在下面找到我的尝试.

Please find my attempt below.

首先,我创建了一些虚拟数据和一个可以根据需要修改的条形图.

First, I created some dummy data and a barplot which can be modified as we wish.

windows(4,4)

dat <- data.frame(Group = c("S1", "S1", "S2", "S2"),
                  Sub   = c("A", "B", "A", "B"),
                  Value = c(3,5,7,8))  

## Define base plot
p <-
ggplot(dat, aes(Group, Value)) +
    theme_bw() + theme(panel.grid = element_blank()) +
    coord_cartesian(ylim = c(0, 15)) +
    scale_fill_manual(values = c("grey80", "grey20")) +
    geom_bar(aes(fill = Sub), stat="identity", position="dodge", width=.5)

在列上方添加星号很容易,正如 baptiste 已经提到的那样.只需使用坐标创建一个 data.frame.

Adding asterisks above a column is easy, as baptiste already mentioned. Just create a data.frame with the coordinates.

label.df <- data.frame(Group = c("S1", "S2"),
                       Value = c(6, 9))

p + geom_text(data = label.df, label = "***")

为了添加表示子组比较的弧线,我计算了半圆的参数坐标并将它们与 geom_line 连接起来.星号也需要新坐标.

To add the arcs that indicate a subgroup comparison, I computed parametric coordinates of a half circle and added them connected with geom_line. Asterisks need new coordinates, too.

label.df <- data.frame(Group = c(1,1,1, 2,2,2),
                       Value = c(6.5,6.8,7.1, 9.5,9.8,10.1))

# Define arc coordinates
r <- 0.15
t <- seq(0, 180, by = 1) * pi / 180
x <- r * cos(t)
y <- r*5 * sin(t)

arc.df <- data.frame(Group = x, Value = y)

p2 <-
p + geom_text(data = label.df, label = "*") +
    geom_line(data = arc.df, aes(Group+1, Value+5.5), lty = 2) +
    geom_line(data = arc.df, aes(Group+2, Value+8.5), lty = 2)

最后,为了表示各组之间的比较,我画了一个更大的圆圈并将其在顶部展平.

Lastly, to indicate comparison between groups, I built a larger circle and flattened it at the top.

r <- .5
x <- r * cos(t)
y <- r*4 * sin(t)
y[20:162] <- y[20] # Flattens the arc

arc.df <- data.frame(Group = x, Value = y)

p2 + geom_line(data = arc.df, aes(Group+1.5, Value+11), lty = 2) +
     geom_text(x = 1.5, y = 12, label = "***")

这篇关于将星星放在 ggplot 条形图和箱形图上 - 表示显着性水平(p 值)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆