r - 当计数不是数据集中的列时,在 ggplot 中使用 expand_limits (R)
问题描述
我有一个数据集,我需要绘制一个条形图来记录某一列的不同结果的计数。对于这个例子,我使用的是 mtcars 数据集。
当我第一次尝试这个时,我发现条上的标签在顶部被切断了,所以我使用 expand_limits 参数给它们更多的空间。由于我希望能够将此代码用于刷新数据,因此限制可能会发生变化,这就是我使用 max() 函数的原因。
mtcars_cyl_counts <- as.data.frame(table(mtcars$cyl))
colnames(mtcars_cyl_counts)[1:2] <- c("cyl", "counts")
mtcars_cyl_counts %>%
arrange(desc(counts)) %>%
ggplot(aes(x = reorder(cyl, -counts), y = counts)) +
geom_bar(stat = "identity") +
geom_text(aes(label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((mtcars_cyl_counts$counts) * 1.05))
这工作正常,但创建一个单独的计数表似乎不必要的麻烦,并且使一些未来的代码更加复杂,所以我重新做了这个:
mtcars %>%
group_by(cyl) %>%
summarize(counts = n()) %>%
arrange(-counts) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot() +
geom_bar(aes(x = cyl, y = counts), stat = "identity") +
geom_text(aes(x = cyl, y = counts, label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((counts) * 1.05))
但是,这会返回以下错误:
data.frame 中的错误(...,stringsAsFactors = FALSE):找不到对象“计数”
我知道“计数”在技术上不在 mtcars 数据集中(这就是为什么如果我使用 mtcars$counts 它也不起作用),但这是我在代码中其他地方用于 y 定义的原因。
那么,有没有办法编写它以使其工作,或者以适应不同数据集的方式扩展垂直限制的替代方法?
(注意:在这些示例中,条形标签不会被截断,因为它们不是很大,但为此我只需要扩展限制,以便细节对工作来说不是至关重要的......)
解决方案
如果这对梅根有帮助,
mtcars %>%
count(cyl) %>%
arrange(-n) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot(aes(cyl, n)) +
geom_text(vjust = -0.5, aes(label = n)) +
geom_bar(stat = "identity") +
expand_limits(y = max(table(mtcars$cyl) * 1.05))
推荐阅读
- shell - 从 json 响应中删除 shell 中的特殊字符
- javascript - Select value in select by text when select have a value?
- angularjs - 用于选择框的 ng-model 未反映在指令中的链接功能中
- javascript - 如何不在特定页面上执行 javascript 代码
- android - 为什么应用从不调用我创建的替代布局?
- delphi - 如何访问嵌套样式控件
- java - Jackson - 在不使用 JsonSerializer 和 BeanSerializerModifier 的情况下定义空字段
- python - 以相等的增量向零扩展数组
- jenkins - 组合多个jenkins共享库
- php - Laravel 5 - 尽管设置了通用会话域,但无法从子域获取经过身份验证的用户