【问题标题】:ggplot - adding labels to a box plot created from pre-computed valuesggplot - 将标签添加到从预先计算的值创建的箱形图中
【发布时间】:2018-02-10 14:01:24
【问题描述】:

给定一个数据框df,如下所示。

df <- data.frame(x=c("A","B"), min=c(1,2), low=c(2,3), mid=c(3,4), top=c(4,5), max=c(5,6))

使用 ggplot,可以创建如下所示的箱线图

library(ggplot2)

ggplot(df, aes(x=x, ymin = min, lower = low, middle = mid, upper = top, ymax = max)) +
  geom_boxplot(stat = "identity")

我需要为箱线图中的五个点添加标签(就在每个框右侧的框外) - 我该怎么做?

注意 - 这是关于从与问题 here 不同的预先计算的箱线图点数据中获取标签

更新:

www 提供的答案适用于原始数据集。但是,当我尝试使用不同但相似的数据集时,它会出错。

text <- "
test,group,varType,X25th,X50th,X5th,X75th,X95th
Test1,A,varC,20,25,2.0,35,65
Test1,A,varD,2,3,0.2,5,9
Test1,B,varC,30,35,3.0,45,75
Test1,B,varD,8,9,0.8,11,15
"
plotDat <- read.table(textConnection(text), sep=",", header = T, stringsAsFactors = F)

# for labels
plotLabels <- plotDat %>% gather(Col, Val, -c(test, group, varType))

ggplot(plotDat, 
       aes(x = group, ymin = X5th, lower = X25th,
           middle = X50th, upper = X75th, ymax = X95th,
           fill=group)) +
  geom_boxplot(stat = "identity") +
  geom_errorbar() +
  facet_wrap( ~ varType, scale = "free_y")  + 
  geom_text(data = plotLabels, aes(x = group, y = Val, label = Val),
            nudge_x = 0.1, nudge_y = 0.3) 

我得到的错误是Error in eval(expr, envir, enclos) : object 'X5th' not found

【问题讨论】:

  • 你指的是哪 5 点?
  • @erocoar,我认为它是df中的“min”、“low”、“mid”、“top”和“max”
  • @EricFail - 该问题使用基础数据中的stat_summary - 这里的值是预先计算的。
  • 链接问题的second answer 应该可以解决您的问题。在那里明确计算汇总统计数据,然后将其添加到图中。所以你简单地省略了第一步。

标签: r ggplot2 boxplot


【解决方案1】:

我们可以将df转换成长格式,然后用geom_text来绘制。

library(tidyr)

df2 <- df %>% gather(Col, Val, -x)

ggplot(df) +
  geom_boxplot(stat = "identity", 
               aes(x=x, ymin = min, lower = low, middle = mid, upper = top, ymax = max)) + 
  geom_text(data = df2, aes(x = x, y = Val, label = Col), nudge_x = 0.1, nudge_y = 0.3)

我们也可以使用geom_label

ggplot(df) +
  geom_boxplot(stat = "identity", 
               aes(x=x, ymin = min, lower = low, middle = mid, upper = top, ymax = max)) + 
  geom_label(data = df2, aes(x = x, y = Val, label = Col), nudge_x = 0.1, nudge_y = 0.3)

不确定是要添加统计文本(minlow ...)还是实际数字(23、...),但对于后一种情况,简单地说label = Val会工作

【讨论】:

  • 这适用于 OP 中的测试数据。但是,在类似但不同的数据集中,添加geom_text 如您所提到的会给出错误Error in eval(expr, envir, enclos) : object 'X5th' not found。我正在使用该数据更新 OP。
  • @user3206440 感谢您的评论。我现在没有时间进一步调查。如果你愿意,也许你可以用更新的数据集提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多