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