ggplot2 中多个数据帧的动态 Y 轴限制

问题描述 投票:0回答:1

我有轴限制问题。我的问题是我有不同的数据框要绘制(即代码示例中提供的大数据和小数据)。我希望 y 轴限制始终大于最大值。

对于小数据,限制为 50 就足够了,对于大数据,限制为 150000。

有没有办法自动执行此操作?我知道我可以手动设置 limit = c(min, max) 。

library(ggplot2)
library(scales)

bigdata <- data.frame("variable" = c("A","B","C"), "value" = c(100000, 40000, 140000))
smalldata <- data.frame("variable" = c("A","B","C"), "value" = c(7, 1, 41))

ggplot(bigdata, aes(x = variable, y = value))+
  geom_col() +
  scale_y_continuous(labels = label_number()) 
r ggplot2 limit
1个回答
0
投票

这是一种可能的选项,它使用自定义函数来设置

limits=
。对于此函数,我使用
only.loose = TRUE
中的选项
?labeling::extended
(请参阅
scales::breaks_extended
)来获取扩展中断向量,其中选择极值位于数据范围之外:

library(ggplot2)
library(scales)

bigdata <- data.frame("variable" = c("A", "B", "C"), "value" = c(100000, 40000, 140000))
smalldata <- data.frame("variable" = c("A", "B", "C"), "value" = c(7, 1, 41))

ggplot(bigdata, aes(x = variable, y = value)) +
  geom_col() +
  scale_y_continuous(
    labels = scales::label_number(),
    limits = \(x) range((scales::breaks_extended(only.loose = TRUE))(x))
  )


ggplot(smalldata, aes(x = variable, y = value)) +
  geom_col() +
  scale_y_continuous(
    labels = scales::label_number(),
    limits = \(x) range((scales::breaks_extended(only.loose = TRUE))(x))
  )

© www.soinside.com 2019 - 2024. All rights reserved.