R ggplot2在主网格线周围添加小记号

R ggplot2在主网格线周围添加小记号,r,ggplot2,axes,R,Ggplot2,Axes,我一直在寻找这个问题的答案已经有相当一段时间了,但没有找到一个好的解决方案。我知道ggplot2没有在轴上添加小记号的选项,但我发现了一种使用另一个标记的方法。它提供了记号,但有两个问题 目前,这是我的代码: every_nth <- function(x, nth, empty = TRUE, inverse = FALSE) { if (!inverse) { if(empty) { x[1:nth == 1] <- "" x } else { x[1:nth != 1] } }

我一直在寻找这个问题的答案已经有相当一段时间了,但没有找到一个好的解决方案。我知道ggplot2没有在轴上添加小记号的选项,但我发现了一种使用另一个标记的方法。它提供了记号,但有两个问题

目前,这是我的代码:

every_nth <- function(x, nth, empty = TRUE, inverse = FALSE)
{
if (!inverse) {
if(empty) {
x[1:nth == 1] <- ""
x
} else {
x[1:nth != 1]
}
} else {
if(empty) {
x[1:nth != 1] <- ""
x
} else {
x[1:nth == 1]
}
}
}

custom_breaks <- seq(1965, 2015, 1)

    ggplot(PercCanksPerYear_Site, aes(x=Cank_Year)) +
      geom_bar(aes(fill=Site_ID, y=PercTotalCanks), stat="identity", 
               position="dodge", width=0.5) + 
        scale_x_continuous(breaks=custom_breaks, labels=every_nth(custom_breaks,5, inverse=TRUE)) +
      ylab("Percent of Cankers per Year") +
      xlab("Year") + labs(fill="Site")+ 
      ggtitle("Percent of Total Cankers per Site that Occur each Year") +
      theme_bw() + 
      theme(plot.title=element_text(hjust = 0.5, face="bold", size=12), 
            axis.title=element_text(size=12), axis.text.x=element_text(size=10, angle=90, hjust=1), 
            legend.position = "None", panel.grid.minor.x = element_blank(), panel.grid.major.x = element_blank()) +  
      facet_wrap(~Site_ID)

every\n对于次要网格线,一种解决方法是使用
geom\u vline
(您应该首先绘制它,以便作为条形图的背景显示,您还可以将颜色调整为浅灰色)

对于标签位置,我们可以使用
vjust

custom_breaks <- seq(1965, 2015, 1)
vline_breaks <-  seq(1965, 2015, 5)
ggplot(PercCanksPerYear_Site) +
  geom_vline(xintercept = vline_breaks, color ="grey")+
  geom_bar(aes(x=Cank_Year, y=PercTotalCanks,fill=Site_ID), stat="identity", 
           position="dodge", width=0.5)+
  scale_x_continuous(breaks=custom_breaks, labels=every_nth(custom_breaks,5, inverse=TRUE)) +
  ylab("Percent of Cankers per Year") +
  xlab("Year") + labs(fill="Site")+ 
  ggtitle("Percent of Total Cankers per Site that Occur each Year") +
  theme_bw() + 
  theme(plot.title=element_text(hjust = 0.5, face="bold", size=12), 
        axis.title=element_text(size=12), axis.text.x=element_text(size=10, angle=90, hjust=1, vjust= 2), 
        legend.position = "None", panel.grid.minor.x = element_blank(), panel.grid.major.x = element_blank()) +  
  facet_wrap(~Site_ID)

custom_break不确定是否可以指定“次要”的break来代替主要的break,然后为主要的break指定网格。@Masoud感谢您的第一个建议。我试着在我的代码中添加一些小的分隔符,但它只添加了一些小的网格线,而不是我特别想要的记号。我正在考虑每5年添加一次带有标签的主要刻度,并添加次要网格线。只是个主意。
custom_breaks <- seq(1965, 2015, 1)
vline_breaks <-  seq(1965, 2015, 5)
ggplot(PercCanksPerYear_Site) +
  geom_vline(xintercept = vline_breaks, color ="grey")+
  geom_bar(aes(x=Cank_Year, y=PercTotalCanks,fill=Site_ID), stat="identity", 
           position="dodge", width=0.5)+
  scale_x_continuous(breaks=custom_breaks, labels=every_nth(custom_breaks,5, inverse=TRUE)) +
  ylab("Percent of Cankers per Year") +
  xlab("Year") + labs(fill="Site")+ 
  ggtitle("Percent of Total Cankers per Site that Occur each Year") +
  theme_bw() + 
  theme(plot.title=element_text(hjust = 0.5, face="bold", size=12), 
        axis.title=element_text(size=12), axis.text.x=element_text(size=10, angle=90, hjust=1, vjust= 2), 
        legend.position = "None", panel.grid.minor.x = element_blank(), panel.grid.major.x = element_blank()) +  
  facet_wrap(~Site_ID)