ggplot:如何为每个箱形图添加特定数字

时间:2016-11-23 14:49:29

标签: r ggplot2

代码:

  p <- ggplot(data, aes(factor(version),p_opens_visits))
  p + geom_boxplot() + 
    xlab(xlab) +ggtitle(title)+ theme(axis.text.x = element_text(angle = 90, hjust = 1))

在数据中我有data$counts显示每个版本的计数(意味着如果相同的版本出现1000次,我将有counts 1000个记录)。我想在每个箱子图中添加这个数字。我该怎么办?

如果我添加+ geom_text(aes(label = count))

enter image description here

1 个答案:

答案 0 :(得分:0)

我想我会创建一个名为version_count的新列,用于捕获有关versioncount的信息。然后我们使用coord_flip翻转x和y轴以使图更容易阅读:

生成数据

set.seed(123)
rep_each <- sample(5:15, 20, replace = T)
df1 <- data.frame(version = rep(letters[1:20], rep_each),
                  count = rep(rep_each, rep_each),
                  y = rnorm(sum(rep_each)),
                  stringsAsFactors = FALSE)

添加version_count

df1$version_count <- paste0(df1$version, ' (N = ', scales::comma(df1$count), ')')

制作情节

library(ggplot2)

ggplot(df1, aes(x = version_count, y = y))+
    geom_boxplot()+
    coord_flip()

first plot method

另一种选择是创建一个新的data.frame,它只包含versioncount的唯一值:

创建唯一的data.frame

df2 <- cbind.data.frame(version = df1$version, count = df1$count)
df2 <- unique(df2)

制作情节

ggplot(df1, aes(x = version, y = y))+
    geom_boxplot()+
    geom_text(data = df2, aes(x = version, y = -3, label = count))+
    coord_flip()

second method

此方法要求您知道count标签的放置位置。