2017-05-12 57 views
3

我试图制作如下ggplot中的图表。我希望y标签显示从1到50的整组值,但我只想每10个数字就产生一个水平网格线。我想加入minor_breaks,然后控制主题将工作。但是,将主要网格线设置为element_blank似乎也覆盖了较小的网格线。我在这里发现了一些问题,人们询问添加更多的网格线比标签要多,但我想要相反。仅将网格线添加到次要中断(ggplot)

如何设置网格线数量小于断点数?谢谢!

enter image description here

下面是阴谋代码:

library(nsRFA) 
library(ggplot2) 
library(dplyr) 

data(hydroSIMN) 
annualflows %>% ggplot(aes(x = anno, y = cod)) + 
    geom_point(
     shape = 45, 
     size = 5, 
     col = "blue" 
    ) + 
    scale_y_reverse(
     breaks = 1:50, 
     labels = 1:50, 
     minor_breaks = seq(10, 50, by = 10) 
    ) + 
    scale_x_continuous(breaks = seq(1920, 1980, by = 10)) + 
    labs(
     x = "Year", 
     y = "Code" 
    ) + 
    theme(
     panel.background = element_blank(), 
     panel.border = element_rect(fill = NA), 
     text = element_text(size = 10), 
     panel.grid.major.x = element_line(color = "grey80"), 
     panel.grid.major.y = element_blank(), 
     panel.grid.minor.y = element_line(color = "grey80") # This doesn't work 

    ) 

回答

2

从阅读本https://github.com/tidyverse/ggplot2/issues/403,似乎有一些问题,围绕minor_breaks。但是,使用geom_hline()应该可以得到你想要的。

library(nsRFA) 
library(ggplot2) 
library(dplyr) 


data(hydroSIMN) 

minors<-seq(10,50,by=10) 

annualflows %>% ggplot(aes(x = anno, y = cod)) + 
    geom_point(
    shape = 45, 
    size = 5, 
    col = "blue" 
) + 
    scale_y_reverse(
    breaks = 1:50, 
    labels = 1:50, 
    minor_breaks = seq(10, 50, by = 10) 
) + 
    scale_x_continuous(breaks = seq(1920, 1980, by = 10)) + 
    labs(
    x = "Year", 
    y = "Code" 
) + 
    theme(
    panel.background = element_blank(), 
    panel.border = element_rect(fill = NA), 
    text = element_text(size = 10), 
    panel.grid.major.x = element_line(color = "grey80"), 
    #panel.grid.major.y = element_blank(), 
    #panel.grid.minor.y = element_line(color = "grey80") # This doesn't work 
)+ 
    geom_hline(mapping=NULL, yintercept=minors,colour='grey80') 

enter image description here