【问题标题】:Setting x-axis limits with scale_x_date in ggplot, missing boundaries在 ggplot 中使用 scale_x_date 设置 x 轴限制,缺少边界
【发布时间】:2021-10-20 17:51:33
【问题描述】:

我试图通过使用 scale_x_date 设置 x 轴限制来绘制特定范围数据点的条形图,但我发现这不包括限制向量的边界。

以下示例

df = data.frame(
  date = as.Date(c("2021-10-10","2021-10-11","2021-10-12","2021-10-13",
           "2021-10-14","2021-10-15","2021-10-16",
           "2021-10-17","2021-10-18","2021-10-19")),
  count = c(1,2,3,4,1,2,2,1,2,3)
)

a = ggplot(df, aes(x=date, y=count)) +
  geom_bar(stat="identity", colour="black", fill="steelblue") +
  scale_x_date(limits = c(df$date[5], df$date[10]))

a

我正在尝试显示从日期 5 到日期 10 的数据,但这会切断日期 5 和日期 10 的数据。

我应该如何设置限制以包括边界?

【问题讨论】:

  • scale_x_date(limits = c(df$date[4], df$date[11])) 会起作用吗?还是在绘图前过滤数据?

标签: r ggplot2


【解决方案1】:

在比例尺中越界值会发生什么由oob 参数确定。因为您有内部由 xmin/xmax/ymin/ymax 值参数化的条形图,所以第一个 xmin 和最后一个 xmax 超出了您的限制(因此这些被视为超出范围)。您可以使用scales::oob_keep() 保持越界值。

library(ggplot2)

df = data.frame(
  date = as.Date(c("2021-10-10","2021-10-11","2021-10-12","2021-10-13",
                   "2021-10-14","2021-10-15","2021-10-16",
                   "2021-10-17","2021-10-18","2021-10-19")),
  count = c(1,2,3,4,1,2,2,1,2,3)
)

p <- ggplot(df, aes(x=date, y=count)) +
  geom_col(colour="black", fill="steelblue")

p +
  scale_x_date(limits = c(df$date[5], df$date[10]),
               oob = scales::oob_keep)

但是,您很可能希望通过扩展限制以包含它们的 xmin/xmax 值来容纳第一个和最后一个柱。

p +
  scale_x_date(limits = c(df$date[5] - 0.5, df$date[10] + 0.5))
#> Warning: Removed 4 rows containing missing values (position_stack).

reprex package (v2.0.1) 于 2021 年 10 月 20 日创建

【讨论】:

    【解决方案2】:

    快速修复:

    a = ggplot(df, aes(x=date, y=count)) +
         geom_bar(stat="identity", colour="black", fill="steelblue") +
         scale_x_date(limits = c(df$date[5]-1, df$date[10]+1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2023-03-30
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多