如何抑制ggplot2图中的垂直网格线?


81

我正在构建一个条形图,其条形足以表示水平(x)的位置,因此我要避免绘制多余的垂直网格线。

我知道如何在opts()中设置次要网格线和主要网格线的样式,但是我一辈子都无法弄清楚如何仅抑制垂直网格线。

library(ggplot2)

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

ggplot(data, aes(x, y)) +
  geom_bar(stat = 'identity') +
  opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
    panel.grid.minor = theme_line(colour = NA),
    panel.background = theme_rect(colour = NA),
    axis.ticks = theme_segment(colour = NA)
  )

在这一点上,看起来我将不得不压制所有网格线,然后使用geom_hline()将它们绘制回去,这似乎有点痛苦(而且,还不清楚如何找到刻度线/主要网格线位置以馈送给geom_hline()。)

任何想法将不胜感激!

Answers:


24

尝试使用

scale_x_continuous(breaks = NULL)

这将删除所有垂直网格线以及x轴刻度线标签。


7
做到了,但是正如您所指出的,现在我没有我需要的x轴标签-关于如何写回它们的任何想法?
Tarek 2010年

18
新版本说,Please use breaks = NULL to remove breaks in the scale. (Deprecated; last used in version 0.8.9)
Stat-R

scale_x_discrete(breaks = NULL)是x变量为离散变量时使用的变量。
luchonacho

2
当我想要标签但没有间断时,此方法不起作用。
杂货商

@groceryheist不确定您是否仍在寻找解决方案,但是我在ggExtra库中遇到了removeGrid:rdrr.io removeGrid,它在保留轴标签的同时删除了网格线。
SHKT

175

从ggplot2 0.9.2开始,使用“主题”变得更加容易。现在,您可以分别将主题分配给panel.grid.major.x和panel.grid.major.y,如下所示。

#   simulate data for the bar graph
data <- data.frame( X = c("A","B","C"), Y = c(1:3) )    

#   make the bar graph
ggplot( data  ) +
    geom_bar( aes( X, Y ) ) +
    theme( # remove the vertical grid lines
           panel.grid.major.x = element_blank() ,
           # explicitly set the horizontal lines (or they will disappear too)
           panel.grid.major.y = element_line( size=.1, color="black" ) 
    )

该示例的结果看起来很丑陋,但它演示了如何在保留水平线和x轴刻度线的同时删除垂直线。


2
也许这需要更新:它给了我Error: stat_count() must not be used with a y aesthetic.
gaspar

截至2020年6月19日,错误仍然存​​在。该解决方案目前不起作用。
梅格

1
@Meg不确定您是否仍在寻找解决方案,但是我在ggExtra库中遇到了removeGrid:rdrr.io removeGrid,它在保留轴标签的同时删除了网格线。
SHKT

4

这只剩下数据点:

ggplot(out, aes(X1, X2)) + 
    geom_point() + 
    scale_x_continuous(breaks = NULL) + 
    scale_y_continuous(breaks = NULL) + 
    opts(panel.background = theme_blank()) + 
    opts(axis.title.x = theme_blank(), axis.title.y = theme_blank())

也许这需要更新。当我运行它时,出现以下错误:opts(panel.background = theme_blank())中的错误:找不到函数“ opts”注意此答案也未遵循OP的可重复答案,该答案使用“ data”(不是“ out”),“ x”和“ y”,而不是“ X1”和“ X2”。
梅格

0

从相关主题复制我的答案,

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

我已经测试过它可以与ggplot2版本3.3.0和ggExtra版本0.9一起使用,这使我在没有网格线的情况下获得了轴刻度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.