将ggplot2 y轴修改为整数,而不限制多个图的y轴

时间:2019-03-31 22:33:16

标签: r ggplot2 axis-labels yaxis

很像这个问题posted here,我希望创建一系列直方图,而不必设置y上限,但是比例只能是整数,并根据需要在轴上增加。一些图形计数将为2,一些图形将为45。因此,在ay max为2的图形上,我不希望看到0.2、0.4。,0.6、0.8、1、1.2、1.4等比例。 ...我想看到1、2。转到45的值可以适当增加,但不能将数字压入轴或降低值。我不知道如何给出简短的示例数据,但是我显示了一些图形结果,希望对您有所帮助。基本上,代码试图在每个GMU(这是一个位置)中每年生成一个直方图,以按骨水泥的性别(这是年龄)计数。因此,在2015年的位置12,有10位女性和7位1岁的男性,以此类推。所有这些都是因为我希望直方图与轴线之间没有间隙。当将x轴或y轴展开为齐平时,它将使所有轴值混乱。我可以设定x轴限制,因为我知道任何年15都是最老的年龄。 Y轴计数会有所不同。我有10年的数据,14个地点,2个性别,最大年龄为15岁。

for (i in 1:length(unique(adultmar$Year))) { 
year = subset(adultmar, adultmar$Year == unique(adultmar$Year)[i])

  for (j in 1:length(unique(year$GMU))) {
    yearGMU = subset(year, year$GMU == unique(year$GMU)[j])

AgeSex <- ggplot(yearGMU, aes(x=Cementum, fill = Sex, colour = Sex))+
  geom_histogram(binwidth = 1, alpha = 1)+
  labs(title = paste0(unique(year$GMU)[j],"_",unique(adultmar$Year)[i]))+
  labs(x = "Age", y = "Count")+
  facet_grid(Sex~.)+
  expand_limits(x=15)+
  scale_x_continuous(breaks=seq(1,15,2),expand = c(0,0))+
  scale_fill_manual(name = "Sex",values = myColors, 1)+
  scale_color_manual(values = c("black", "black"))+
  theme_minimal()+
  theme(legend.position="none",
        panel.border = element_blank(),
        axis.line.y = element_line(colour = "black"),
        panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.spacing = unit(1, "lines"),
        axis.text = element_text(size = 12),
        legend.text = element_text(size = 12),
        axis.title.y = element_text(size = 12),
        axis.title.x = element_text(size = 12),
        strip.text.x = element_text(size = 12))

我试图将以下解决方案添加为行。没有一个产生一致的结果

ylim(digits=1)+

scale_y_continuous(breaks=seq(0,45),expand = expand_scale(mult = c(0, .1)))+

scale_y_continuous(breaks=seq(from=0,to=round(max(yearGMU$Cementum)),1))+

scale_y_continuous(breaks=pretty_breaks())+

scale_y_continuous(breaks = function(x) seq(ceiling(x[1]), floor(x[2])))+

由于生成的一系列图形没有任何y轴命令,因此某些图形似乎可以正常工作:enter image description here 但随后在同一产品中出现了显示小数位的图形,或者甚至没有显示这两个值中的y上限值:decimal places unnecessary decimals[![works, but why drop the upper y limit?

在尝试了用于更改y比例的示例命令的许多变体之后,我最终得到了具有零轴信息的图形,具有重叠数字的图形,具有至10的数字的图形,尽管直方图显然仍在它​​们之上,到30岁以上。overlapping values

1 个答案:

答案 0 :(得分:1)

您应该编写一个自定义中断功能。我认为类似这样的方法应该起作用:

integer_breaks = function(range) {
  bmax = ceiling(range[2])
  bmin = floor(range[1])
  if (bmax - bmin < 7) return(bmin:bmax)
  pretty(range)
}

如果您提供可复制的示例,我们可以进行测试。

... + scale_y_continuous(breaks = integer_breaks)

请注意,这是一个相当脆弱的功能-在负输入下不能很好地工作。但是对于直方图应该可​​以。