gpt4 book ai didi

r - Ggplot 小网格线与(禁用的)主要网格线重合时不显示

转载 作者:行者123 更新时间:2023-12-01 19:40:51 24 4
gpt4 key购买 nike

我创建了一个图表,用 x 轴绘制一年中的每一天的数据,其中刻度线表示每个月的开始,小网格线表示每周的开始。

我故意不在 x 轴上显示主要网格线,这会使图表变得过于繁忙。然而,这会产生意想不到的效果:当次网格线与(禁用的)主网格线重合时,次网格线不会显示。 (也就是说,只要该月的第一天是星期一,这里是 2018 年 1 月 1 日和 10 月 1 日。)

这可能是一个错误,有办法解决这个问题吗?

library(tidyverse)
library(lubridate)

dat = tibble(
date = as_date(c("2018-01-01", "2019-01-01")),
proportion = c(.2, .8)
)

dat %>%
ggplot(aes(x = date, y = proportion)) +
geom_point() +
scale_x_date(breaks = "1 month", minor_breaks = "1 week", date_labels = "%b") +
scale_y_continuous(limits = c(0, 1)) +
theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.y = element_blank()
)

graph

最佳答案

事实上,这是有意的行为。请参阅此下的讨论(非常旧)issue在 GitHub 上,结果是 ggplot2:::guide_grid (一个未导出的函数,在打印 ggplot 对象之前操作网格线)仅保留不与主要网格线重叠的次要网格线:

> ggplot2:::guide_grid
function (theme, x.minor, x.major, y.minor, y.major) {
x.minor <- setdiff(x.minor, x.major)
y.minor <- setdiff(y.minor, y.major)
...
}

解决方法

解决这个问题的一种快速而肮脏的方法是运行 trace(ggplot2:::guide_grid, edit=TRUE)事先手动删除 x.minor <- setdiff(x.minor, x.major)弹出窗口中的代码行。

此后您的代码应该按预期工作:

plot

(此效果将在您关闭 R session 时结束,或者如果您运行 untrace(ggplot2:::guide_grid) 则更早)。

关于r - Ggplot 小网格线与(禁用的)主要网格线重合时不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com