12

这是这个问题的后续,我试图抑制垂直网格线

学习者提供的解决方案是添加 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()
  )
4

5 回答 5

6

由于注释中的代码不能很好地显示,所以我将其发布为答案。您可以执行以下操作并手动添加标签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))
于 2010-04-21T19:28:07.347 回答
2

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

于 2012-10-22T03:12:17.757 回答
1

您可以grob直接编辑,尝试:

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

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

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

于 2012-03-15T14:47:43.577 回答
0

好吧,我在搜索这个问题时找到了这个解决方案。我还没有尝试过。

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

你必须向下滚动一点。

最好的,

菲利克斯

于 2012-05-13T21:17:07.263 回答
0

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

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

于 2020-07-17T14:46:42.923 回答