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

问题描述 投票:0回答:1

就像这个问题posted here我想要创建一系列直方图,而不必设置上限y值,但要使比例仅为整数并在轴上根据需要增加。一些图形计数将是2,一些将是45.因此,在最大值为2的图形上,我不希望看到0.2,0.4,0.6,0.8,1,1.2,1.4的标度。 ...我想看1,2,那些转到45,可以适当增加,但不要将数字压入轴或降低值。我不知道如何提供简短的示例数据,但我已经展示了一些我希望会有所帮助的图形结果。基本上,代码试图在每个GMU(这是一个位置)中生成每年的直方图,即按性别计算的Cementum(这是年龄)。因此,在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 placesunnecessary decimals[![works, but why drop the upper y limit?

在尝试了用于改变y尺度的示例命令的许多变化之后,我最终得到具有零轴信息的图形,具有重叠数字的图形,具有到10的数字的图形,然后在它们之上没有任何东西,尽管直方图显然继续远高于30.像这样:overlapping values

r ggplot2 axis-labels yaxis
1个回答
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)

请注意,这是一个相当脆弱的功能---不适用于负输入。但是直方图应该可​​以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.