ggplot已堆叠geom_bar - 将列值显示为条形

时间:2018-03-23 02:24:27

标签: r ggplot2

使用如下所示的数据框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)

我想创建一个堆积条形图并为每个条形添加标签,如果&gt;将value列的值四舍五入为0小数。 100.所以我做了以下几点。

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以供参考。如何为每个条形图显示标签,位于条形图顶端的下方并居中。

Stacked Bar Plot

1 个答案:

答案 0 :(得分: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))

enter image description here