【问题标题】:How can I suppress the vertical gridlines in a ggplot2 plot while retaining the x-axis labels?如何在保留 x 轴标签的同时抑制 ggplot2 图中的垂直网格线?
【发布时间】:2023-03-29 16:35:02
【问题描述】:

这是this question, in which I was trying to suppress the vertical gridlines 的后续。

learnr 提供的解决方案是添加 scale_x_continuous(breaks = NA),但这也有抑制 x 轴标签的副作用。我很高兴能用手把标签写回去,但我不清楚如何弄清楚标签应该放在哪里。

另一个选项是抑制所有网格线(使用 opts(panel.grid.major = theme_blank()) 或类似的方法),然后只画回主要的水平网格线。同样,这里的问题是如何找出图中的中断点以提供给 geom_hline()。

所以,基本上,我的选择是:

  1. 抑制垂直网格线和 x 轴标签(使用 scale_x_continuous(breaks = NA) )并重新添加 x 轴标签。
  2. 抑制所有网格线(使用 opts(panel.grid.major = theme_blank()))并使用 geom_hline() 添加主要的水平网格线。

这里有两个选项:

library(ggplot2)

data <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4))

# suppressing vertical gridlines and x-axis labels
# need to re-draw x-axis labels
ggplot(data, aes(x, y)) +
  geom_bar(stat = 'identity') +
  scale_x_continuous(breaks = NA) +
  opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
    panel.grid.minor = theme_blank(),
    panel.background = theme_blank(),
    axis.ticks = theme_blank()
  )

# suppressing all gridlines
# need to re-draw horizontal gridlines, probably with geom_hbar() 
ggplot(data, aes(x, y)) +
  geom_bar(stat = 'identity') +
  scale_x_continuous(breaks = NA) +
  opts(
    panel.grid.major = theme_blank(),
    panel.grid.minor = theme_blank(),
    panel.background = theme_blank(),
    axis.ticks = theme_blank()
  )

【问题讨论】:

  • 您可以使用 geom_text() 手动添加回 x 轴刻度标签。

标签: r ggplot2


【解决方案1】:

由于 cmets 中的代码不能很好地显示,所以我将其发布为答案。您可以这样做并使用geom_text() 手动添加标签:

ggplot(data, aes(x, y)) +
        geom_bar(stat = 'identity') +
        scale_x_continuous(breaks = NA) +
        opts(
                panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
                panel.grid.minor = theme_blank(),
                panel.background = theme_blank(),
                axis.ticks = theme_blank()
        )+
        geom_text(aes(label = x, y = -.3))

【讨论】:

  • 哦,呃-我很困惑,因为为了重新绘制水平网格线,我需要知道中断/刻度线的位置,但我已经知道条的 x 位置,所以这不是问题。非常感谢您的帮助,LearnR!
  • 这里只是另一个快速说明 - 这个答案解决了我所说的问题,但绝对不是理想的解决方案,因为我们将 x-labels 绘制到绘图区域,而不是边缘。这会对 y 范围和中断产生连锁反应,因此与数据区域分离的解决方案将是更可取的。哈德利,我不知道你是否在读这篇文章,但是关闭水平或垂直网格线的某种方式会很棒......
【解决方案2】:

上述答案不适用于 ggplot2 0.9.2.1 及更高版本。幸运的是,现在有一种更简单的方法可以做到这一点,正如在回答另一个问题时所述:https://stackoverflow.com/a/8992102/800044。

【讨论】:

    【解决方案3】:

    你可以直接编辑grob,试试:

    grid.remove(gPath("panel.grid.minor.x.polyline"),grep=T)
    grid.remove(gPath("panel.grid.major.x.polyline"),grep=T) 
    

    它会去掉你的垂直线。我只是在函数中使用它时遇到问题,因为我猜它只在打印 ggplot 时才有效。

    但是,如果这不是您的情况,而您只需要图形,那么它会起作用。

    【讨论】:

      【解决方案4】:

      嗯,我在谷歌搜索这个问题时找到了这个解决方案。我还没试过。

      http://wiki.stdout.org/rcookbook/Graphs/Axes%20(ggplot2)/

      你必须向下滚动一点。

      最好的,

      菲利克斯

      【讨论】:

        【解决方案5】:

        对于 2020 年查找此问题的人,我在此处的 ggExtra 库中以 removeGrid 函数的形式找到了解决方案 rdrr.io > removeGrid

        我已经测试它可以与 ggplot2 3.3.0 版和 ggExtra 0.9 版一起使用,给我没有网格线的轴刻度。

        【讨论】:

          猜你喜欢
          • 2011-02-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-22
          • 1970-01-01
          • 1970-01-01
          • 2012-08-25
          • 1970-01-01
          相关资源
          最近更新 更多