2010-04-20 74 views
47

我正在构建一个条形图,其中条形足以作为水平(x)放置的指示,所以我想避免绘制多余的垂直网格线。如何在ggplot2图中抑制垂直网格线?

我明白如何设计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(),这似乎是一种痛苦(也是吸引他们回来,这是不完全清楚我怎么能找到tick /主要网格线位置饲料geom_hline()。)

任何想法将不胜感激!

回答

11

使用try

scale_x_continuous(断裂= NULL)

这将去除所有的垂直网格线,以及x轴对勾标记标签。

+4

这样做了,但现在,如您所述,我没有x轴标签,我需要 - 关于如何将它们写回的任何想法? – Tarek 2010-04-21 16:49:39

+1

geom_text(aes(label = x,y = -.5)) 应该可以工作 – learnr 2010-04-21 19:06:38

+17

新版本说:'请使用breaks = NULL来删除刻度中的断点。 (弃用;最后在版本0.8.9中使用)' – 2013-08-07 21:07:41

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

由于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轴勾号标记。