如何在保留x轴标签的同时抑制ggplot2图中的垂直网格线?

时间:2010-04-21 17:02:58

标签: r ggplot2

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

学习者提供的解决方案是添加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()添加主要水平网格线。
  3. 以下是两个选项:

    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()
      )
    

5 个答案:

答案 0 :(得分: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))

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

我在google搜索此问题时发现了这个解决方案。我还没有尝试过。

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

你必须向下滚动一下。

最佳,

菲利克斯

答案 4 :(得分:0)

对于在2020年进行查询的人们,我在这里的rdrr.io > removeGrid

处从ggExtra库中找到了removeGrid函数形式的解决方案。

我已经测试过它可以与ggplot2版本3.3.0和ggExtra版本0.9一起使用,从而为我提供了没有网格线的轴刻度。