首页 > 解决方案 > 带有闪避的条形图的 geom_text 并填充缺失的类别

问题描述

使用mtcars,我正在创建一个条形图cyl并填充gear。没有cyl==8 & gear==4的汽车。绘制时,我曾经position_dodge(preserve = "single")保留条形的宽度。然后,使用geom_text我向条形图添加标签。

library(ggplot)
library(dplyr)

df <- count(mtcars, cyl, gear)

ggplot(df, aes(x = factor(cyl), y = n, fill = factor(gear))) +
  geom_col(position = position_dodge(preserve = "single")) +
  geom_text(aes(label = n, y = n + .07), size = 5, vjust = 0, 
                position = position_dodge(width=.9))

两个问题出来了:

  1. 最后一组的文本标签关闭,即cyl==8
  2. 在最后一组中,绿色条的红色和蓝色条之间应该有间隙。相反,您会看到红色和蓝色条并排。

在此处输入图像描述

标签: rggplot2bar-chart

解决方案


这就是completefromtidyr可以通过填充那些缺失值来提供帮助的地方。如果您愿意,您也可以vjust完全使用而不是添加到您的 y 值。

library(ggplot2)
library(dplyr)
library(tidyr)

df <- count(mtcars, cyl, gear) %>% 
  complete(cyl, gear, fill = list(n = 0))

ggplot(df, aes(x = factor(cyl), y = n, fill = factor(gear))) +
  geom_col(position = position_dodge()) +
  geom_text(aes(label = n, y = n), size = 5, vjust = -0.5, 
            position = position_dodge(width=.9))

reprex 包(v0.2.1)于 2019 年 1 月 17 日创建


推荐阅读