【问题标题】:Stacked bar plot, label bars with percentage values [duplicate]堆积条形图,带有百分比值的标签条[重复]
【发布时间】:2017-03-28 09:13:55
【问题描述】:

我想将表格绘制为堆积条形图并用百分比标记条形。这是一个例子:

data <- matrix(c(34, 66, 22, 78), ncol = 2)
data <- as.table(data)
colnames(data) <- c("shop1", "shop2")
rownames(data) <- c("prod1", "prod2")

library(reshape2)
data_m <- melt(data, varnames = c("Product", "Shop"), id.vars = "Product")

library(scales)
library(ggplot2)
ggplot(data_m, aes(x = Shop, y = value, fill = Product)) + 
geom_bar(position = "fill", stat = "identity") + 
scale_y_continuous(labels = percent_format()) +
labs(x = "", y = "")

我尝试添加标签

geom_text(data = data_m, aes(x = Shop, y = value, 
                         label = paste0((value/100) * 100,"%")), size=4)

但这会导致

编辑:我得到 JanLauGe 的回答

现在,百分比分配错误。

另一个说明:如果表格的列总和不一样,例如 91 和 107 而不是我上面示例中假设的 100,该怎么办?

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    试试这个

    geom_text(data = data_m, 
              aes(x = Shop, 
                  y = value / max(value), 
                  label = paste0(value/100,"%")), 
              size = 4)
    

    问题:标签位置是相对于绘图区域的(0 到 1,1 = max(value))。

    解决方案:相应地重新调整值。


    编辑this 帖子的重复。

    你要找的是这个:

    ggplot(data = data_m, 
           aes(x = Shop, 
               y = value, 
               fill = Product,
               cumulative = TRUE)) +
      geom_col() +
      geom_text(aes(label = paste0(value/100,"%")), 
                position = position_stack(vjust = 0.5)) + 
      theme_minimal()
    

    【讨论】:

    • 其实也可以试试value / 100。但归根结底,这取决于您想要标签的确切位置。在每个块的底部、中间或顶部。
    • 理想情况下,标签位于每个块的中间,如t-redactyl.io/blog/2016/01/…
    • 复制,查看我的编辑
    • 列和不同的情况下如何修改你的sn-p?
    • 第二个 sn-p 应该仍然以完全相同的方式工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2021-06-02
    • 2021-05-31
    • 2018-03-09
    相关资源
    最近更新 更多