首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ggplot2中将文本添加到多柱形图(分面)

在ggplot2中将文本添加到多柱形图(分面)
EN

Stack Overflow用户
提问于 2019-05-16 21:19:41
回答 2查看 435关注 0票数 0

我正在尝试将p值添加到下图中的每个箱线图对中。我希望p值被放置在每个土层标签下('O','A‘和'B')。

我的数据如下所示:

代码语言:javascript
复制
> head(kiwi_l)
# A tibble: 6 x 6
type         horizon    root_name  length diameter n_child
<chr>        <chr>      <chr>       <dbl>    <dbl>   <int>
1 Elevated CO2 A      R1_A_L_S4G 0.0752   0.0342       0
2 Elevated CO2 A      R1_A_L_S4F 0.0987   0.0319       0
3 Elevated CO2 A      R1_A_L_S4E 0.105    0.0209       0
4 Elevated CO2 A      R1_A_L_S4D 0.0476   0.0127       0
5 Elevated CO2 A      R1_A_L_S4C 0.110    0.0282       0
6 Elevated CO2 A      R1_A_L_S4B 0.244    0.0168       0

而我用来生成图形的代码是:

代码语言:javascript
复制
l_horizon<-ggplot(kiwi, aes(x=type, y=length, fill=type, palette='jco')) 
+ 
geom_boxplot() +
facet_grid(. ~ factor(horizon, level=level_order)) +
theme_pubr() +
scale_y_continuous(name='Primary root length (cm)') +
scale_x_discrete(name='Treatment') +
ggtitle('Soil horizon') + theme(plot.title = element_text(hjust = 0.5)) +
theme(legend.position="none") +
theme(plot.title = element_text(size = 10, face = "bold"),
    text = element_text(size = 10),
    axis.title = element_text(face="bold"),
    axis.text.x=element_text(size = 10),
    axis.text.y=element_text(size=10),
    axis.title.x = element_blank(),
    axis.title.y=element_text(size=10))

    l_horizon<-l_horizon+scale_fill_locuszoom()
    l_horizon

请帮帮我!

EN

回答 2

Stack Overflow用户

发布于 2019-05-16 22:06:29

由于没有数据可用,我将编造一些数据:

代码语言:javascript
复制
set.seed(0)
df <- data.frame(f1 = rep(c("O","A","B"), each = 30),
                 f2 = rep(c("M","N"), 45),
                 y = rnorm(90))

接下来,我们对该数据进行测试并对其输出进行格式化:

代码语言:javascript
复制
tests <- split(df, df$f1) %>% sapply(function(x){
  pval <- t.test(x[x$f2 == "M", "y"], x[x$f2 == "N", "y"])$p.value
  paste0("p-value = ", format(pval, digits = 2, nsmall = 2))
})

现在,如果您希望它成为刻面条带的一部分,您可以调整df$f1的级别以包括p值:

代码语言:javascript
复制
levels(df$f1) <- paste0(levels(df$f1), "\n", tests)

ggplot(df, aes(x = f2, y = y)) +
  geom_boxplot() +
  facet_grid(~ f1)

如果您希望p值位于面板中而不是条形图中,可以使用annotate()函数将它们放置在面板中。y = Inf确保它们被放在最上面。

代码语言:javascript
复制
ggplot(df, aes(x = f2, y = y)) +
  geom_boxplot() +
  facet_grid(~ f1) +
  annotate("text", x = 1.5, y = Inf, label = tests, vjust = 1)

票数 1
EN

Stack Overflow用户

发布于 2019-05-16 21:57:30

如果你知道在y轴上放置文本的位置,也许可以这样注释?

代码语言:javascript
复制
p_values <- c(1.1,2.2,3.3)

ggplot(data = d2,mapping = aes(x=range,y=p_area)) +
geom_boxplot() +
annotate("text", x=c(1,2,3), y=0.5, label= p_values)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56169595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档