R语言 ggplot2fun.data在统计摘要中对齐www.example.com

bihw5rsg  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(126)

df <- data.frame("Method" = rep(c("Method1", "Method2", "Method3", "Method4", "Method5"), each = 3, times = 1),
                 "Type" = rep(c("A", "B", "C"), 5),
                 "Value" = c(runif(5, 0, 1), runif(5, 0.2, 1.2), runif(5, 0.4, 1.4)))

我画了一个箱线图

get_box_stats <- function(y, upper_limit = max(df$Value) * 1.42) {
  return(data.frame(
    y = upper_limit,
    label = paste(
      length(y), "\n",
      round(quantile(y, 0.25), 2), "\n",
      round(median(y), 2), "\n",
      round(quantile(y, 0.75), 2), "\n"
    )
  ))
}

ggplot(df, aes(factor(Type), Value)) +
  labs(fill = "Method") +
  stat_summary(size = 4.6, fun.data = get_box_stats, geom = "text", position = position_dodge(.9),
               hjust = 0.5, vjust = 1, aes(group = factor(Type)))+
  geom_boxplot(coef = 0, aes(fill = factor(Type))) + theme_classic()+ 
  theme(legend.position = "top", axis.text.x = element_text(size = 15),
        axis.text.y = element_text(size = 15),  
        axis.title.x = element_text(size = 15),
        axis.title.y = element_text(size = 15),
        legend.title=element_text(size = 15), 
        legend.text=element_text(size = 15)) +
  geom_dotplot(aes(fill = factor(Type)), dotsize = 0.8, binaxis = 'y', stackdir = 'center',
               position = position_dodge(0.75))+
  xlab("Method")

这将生成箱形图x1c 0d1x

**问题:**如您所见,for统计数据没有完全居中,例如,for Method B--值为15。有办法解决这个问题吗?

sqyvllje

sqyvllje1#

问题在于您在summary函数中使用paste。默认情况下,paste会在要粘贴到一起的每个元素之间添加一个空格字符。因此,summary字符串在每个换行符之前和之后都有一个空格,但在第一行之前没有。由于空格占用了一些空间,对齐功能被关闭。与其添加所有这些换行符,使用sep参数指定只使用换行符作为分隔符:

get_box_stats <- function(y, upper_limit = max(df$Value) * 1.42) {
  return(data.frame(
    y = upper_limit,
    label = paste(
      length(y), 
      round(quantile(y, 0.25), 2), 
      round(median(y), 2), 
      round(quantile(y, 0.75), 2), sep = "\n"
    )
  ))
}

ggplot(df, aes(factor(Type), Value)) +
  labs(fill = "Method") +
  stat_summary(size = 4.6, fun.data = get_box_stats, geom = "text",
               hjust = 0.5, vjust = 1, aes(group = factor(Type)))+
  geom_boxplot(coef = 0, aes(fill = factor(Type))) + theme_classic()+ 
  theme(legend.position = "top", axis.text.x = element_text(size = 15),
        axis.text.y = element_text(size = 15),  
        axis.title.x = element_text(size = 15),
        axis.title.y = element_text(size = 15),
        legend.title=element_text(size = 15), 
        legend.text=element_text(size = 15)) +
  geom_dotplot(aes(fill = factor(Type)), dotsize = 0.8, binaxis = 'y',
               stackdir = 'center',
               position = position_dodge(0.75))+
  xlab("Method")

相关问题