2014-06-07 121 views
1

之間的網格線在使用GGPLOT2處的值GGPLOT2:離散值

library(reshape2) 

ggplot(data=tips, aes(x=time, y=total_bill, fill=sex)) + 
    geom_bar(stat="identity", position=position_dodge()) 

enter image description here

如何設置網格線從所述x的中心提供在刻度值的網格線的離散值軸之間出現離散值(即'晚餐'和'午餐'之間)

然而,我試圖設置panel.grid.minor.x然而(我認爲),因爲它是離散的這不起作用...這不是一個小值因爲它在上面繪製了邊線。

ggplot(data=tips, aes(x=time, y=total_bill, fill=sex)) + 
    geom_bar(stat="identity", position=position_dodge()) + 
    theme(panel.grid.minor.x = element_line()) 

回答

4

您可以添加一條垂直線,將如下充當網格線:可以,當然,改變線寬,顏色,樣式等,根據需要

geom_vline(xintercept=1.5, colour='white') 

你,和如果您有幾組需要由網格線分隔的小節,則在適當的位置添加多行。例如,使用一些假的數據:

set.seed(1) 
dat = data.frame(total_bill=rnorm(100,80,10), 
       sex=rep(c("Male","Female"),50), 
       time=sample(c("Breakfast","Brunch","Lunch","Afternoon Tea","Dinner"), 
          100, replace=TRUE)) 
dat$time = factor(dat$time, 
        levels=c("Breakfast","Brunch","Lunch","Afternoon Tea","Dinner"), 
        ordered=TRUE) 

ggplot(data=dat, aes(x=time, y=total_bill, fill=sex)) + 
    geom_bar(stat="identity", position=position_dodge()) + 
    geom_vline(xintercept=seq(1.5, length(unique(dat$time))-0.5, 1), 
      lwd=1, colour="black") 

enter image description here

+0

謝謝您的回答。我實際上在'scales ='free_x''上使用'facet_grid',所以像這樣使用'length'是有問題的。我已經看了一下,但無法找到如何獲得每個方面的滴答數。 –

+0

如果您的免費比例是數字或有序因子,則可以使用'max(dat $ var_name)'而不是'length(unique(dat $ var_name))'。這有幫助,還是你的情況比這更復雜? – eipi10