【问题标题】:ggplot stacked geom_bar - showing column values as label for barggplot 堆叠 geom_bar - 将列值显示为栏的标签
【发布时间】:2018-09-01 15:28:57
【问题描述】:

使用如下数据框df

text <- "
MAKE,TIER,ENGINE_VENDOR,var,value
Maruti,HIGH,Fiat,miles,10424.5
Maruti,HIGH,Renault,miles,9784
Nissan,HIGH,Renault,miles,9616
Nissan,HIGH,Fiat,miles,9229
Tata,HIGH,Fiat,miles,9190
"
df <- read.table(textConnection(text), sep=",", header = T)

我想创建一个堆积条形图,并为每个条形添加标签作为value 列的值,如果 > 100,则四舍五入为 0 位小数。所以我执行以下操作。

ggplot() +
    geom_bar(data=df, stat = "identity", position='dodge',
             aes(x=MAKE, y=value, fill=ENGINE_VENDOR, 
                 label = ifelse( value > 100, round(value,0), value)
             )
    ) + 
    geom_text(position = position_dodge(width = 1) )

这无法在图中给出标签。生成的图如下所示,并给出Warning: Ignoring unknown aesthetics: label。我查看了 SO 答案here 以供参考。如何让每个条的标签显示在条的顶端下方并居中。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以使用tidyr::complete 来完成缺少的factor 关卡(在您的情况下是MAKE == "Tata" 中缺少的关卡)。

    我还建议在绘图之前执行任何数据操作,例如生成labels。这样您就可以将数据操作和绘图分开。

    require(tidyverse);
    df %>%
        mutate(
            label = ifelse(value > 100, round(value, 0), value),
            ENGINE_VENDOR = factor(ENGINE_VENDOR)) %>%
        complete(MAKE, ENGINE_VENDOR) %>%
        ggplot(aes(MAKE, value, fill = ENGINE_VENDOR, label = label)) +
            geom_bar(stat = "identity", position = "dodge") +
            geom_text(position = position_dodge(width = 1))
    

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2021-09-24
      • 2017-07-28
      • 2019-03-14
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2016-03-13
      相关资源
      最近更新 更多