无法根据最小值和最大值缩放 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_continuousexpand 参数。您想在秤的每一端添加 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 轴[重复]的主要内容,如果未能解决你的问题,请参考以下文章

【r<-ggplot2】修改x和y轴刻度

如何从商店 sencha touch 为图表提供动态轴的最小值和最大值

ggplot辅助轴缩放

r 缩放轴ggplot

在ggplot的图例中设置最小/最大尺寸

在不删除数据的情况下限制 ggplot2 轴(超出限制):缩放