【问题标题】:Can't scale a ggplot axis based on min and max values [duplicate]无法根据最小值和最大值缩放 ggplot 轴[重复]
【发布时间】: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 很抱歉在 StackOverflow 中输入错误,现已修复,但同样的问题仍然存在,知道我做错了什么
  • 看看那个答案
  • 被骗的问题是一样的,但答案很糟糕。正确的答案应该是使用scale_x_continuousexpand 参数。您想在秤的每一端添加 1 个单位吗? scale_x_continuous(expand = expand_scale(add = 1)).
  • 是的,开始吧

标签: r ggplot2


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 2015-10-11
      相关资源
      最近更新 更多