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

Tar*_*rek 11 r ggplot2

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

学习者提供的解决方案是添加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()
  )
Run Code Online (Sandbox Code Playgroud)

lea*_*rnr 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))
Run Code Online (Sandbox Code Playgroud)

  • 这里只是另一个快速说明 - 这个答案解决了我所说的问题,但绝对不是理想的解决方案,因为我们将x标签绘制到绘图区域,而不是边缘.这对y范围和断裂具有连锁效应,因此优选与数据区域分离的解决方案.哈德利,我不知道你是否正在读这篇文章,但是某种方式只是关闭水平或垂直网格线会很棒...... (2认同)