无法根据最小值和最大值缩放 ggplot 轴[重复]
Posted
技术标签:
【中文标题】无法根据最小值和最大值缩放 ggplot 轴[重复]【英文标题】:Can't scale a ggplot axis based on min and max values [duplicate] 【发布时间】:2019-02-19 14:04:42 【问题描述】:我想根据cyl
的最小值和最大值来缩放 ggplot2 轴,如下所示。但是我的代码有错误。所以我来了。
library(tidyverse)
mtcars %>%
count(cyl) %>%
arrange(desc(n)) %>%
ggplot(aes(cyl, n)) +
geom_col() +
scale_x_continuous(
breaks = seq(min(cyl) - 1, max(cyl) + 1, 1)
)
我希望我的 x 轴从 2 延伸到 10。为什么我的代码会抛出错误:
"Error in seq(min(cyl) - 1, max(cyl) + 1, 1) : object 'cyl' not found"
【问题讨论】:
@divibisan 很抱歉在 *** 中输入错误,现已修复,但同样的问题仍然存在,知道我做错了什么 看看那个答案 被骗的问题是一样的,但答案很糟糕。正确的答案应该是使用scale_x_continuous
的expand
参数。您想在秤的每一端添加 1 个单位吗? scale_x_continuous(expand = expand_scale(add = 1))
.
是的,开始吧
【参考方案1】:
由于某种原因,scale_x_continuous
内部的seq
不会从管道函数中获取对数据的引用,如果您将其更改为以下内容,它可以正常工作。
library(tidyverse)
library(dplyr)
library(ggplot2)
datas <- mtcars %>%
count(cyl) %>%
arrange(desc(n))
ggplot(datas, aes(x=cyl, y=n)) + geom_col() +
scale_x_continuous(
breaks = seq(min(datas$cyl) - 1, max(datas$cyl) + 1, 1)
)
【讨论】:
【参考方案2】:您不能在ggplot
对象中引用列名,除非在aes()
内部和facet*
函数的公式中。但是辅助函数 expand_scale
可以帮助您以更可控的方式扩展音阶。
您想在每个方向上将 x-scale 扩展 1 个单位,因此您应该这样做:
scale_x_continuous(expand = expand_scale(add = 1))
详情请参阅?scale_x_continuous
,尤其是?expand_scale
。
【讨论】:
以上是关于无法根据最小值和最大值缩放 ggplot 轴[重复]的主要内容,如果未能解决你的问题,请参考以下文章