通常将星标放在条形图或箱形图上以显示一组或两组之间的显着性水平(p值),以下是几个示例:
星级数由p值定义,例如p值
我的问题是:如何生成相似的图表?一种基于显着性水平自动放置星星的方法非常受欢迎。
最佳答案
请在下面找到我的尝试。
首先,我创建了一些虚拟数据和条形图,可以根据需要进行修改。
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
。label.df <- data.frame(Group = c("S1", "S2"),
Value = c(6, 9))
p + geom_text(data = label.df, label = "***")
为了添加表示子组比较的弧,我计算了一个半圆的参数坐标,并添加了它们与
geom_line
的连接。星号也需要新的坐标。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)
最后,为了说明各组之间的比较,我建立了一个较大的圆圈并将其扁平化。
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 = "***")
关于r - 在ggplot条形图和框形图上放上星号-表示显着性水平(p值),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17084566/