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

我正在构建一个条形图,其中的条形图足以作为水平(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 ())

有任何想法都可以!

90604 次浏览

Try using

scale_x_continuous(breaks = NULL)

This would remove all the vertical gridlines as well as x-axis tickmark labels.

This leaves you only with the data points:

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

As of ggplot2 0.9.2, this has become much easier to do using "themes." You can now assign themes separately to panel.grid.major.x and panel.grid.major.y, as demonstrated below.

#   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" )
)

The result of this example is quite ugly looking, but it demonstrates how to remove the vertical lines while preserving the horizontal lines and x-axis tick-marks.

Copying my answer from a related thread,

For people looking this up in 2020, I have found a solution in the form of the removeGrid function from the ggExtra library here rdrr.io > removeGrid

I have tested it to be working with ggplot2 version 3.3.0 and ggExtra version 0.9, giving me axis ticks without the gridlines.

Option 1:

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


ggplot(data_df, aes(x, y)) +
geom_bar(stat = 'identity') +
theme(panel.background = element_rect(fill = "white"))

Option 2:

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

ggplot(data_df, aes(x, y)) +
geom_bar(stat = 'identity') +
theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)