首页 文章

如何在限制R ggplot2中的x轴后自动重新计算y轴刻度

提问于
浏览
0

我正在使用ggplot2绘制来自大量数据帧的一些光谱数据 . 我想将图形限制在400到900 nm之间的波长 . 我知道如何使用scale_x_continuous()或xlim()设置x轴限制 . 问题是,在完成此操作后,y轴不会自动重新调整到显示的最小/最大值 . 我不想手动设置它,因为我的循环处理的每个数据帧都有不同的范围 .

summary 是我的数据框列表,那么这段代码给出了一个图表列表,没有调整轴:

plotlist <- list()
for(i in 1:length(summary)){
  plotlist[[length(plotlist)+1]] <- ggplot(summary[[i]], aes(Wavelength, average)) +
    geom_line(aes(color=Sample)) +
    geom_linerange(aes(ymin=average-sem, ymax=average+sem, color=Sample), alpha=0.5) +
    ylab("Absorbance (AU)") + ggtitle(names(summary)[i]) +
    theme_classic()
}
plotlist[[33]]

这给了我:Plot without axis adjustment

如果我像这样调整x轴到400 - 900:

plotlist <- list()
for(i in 1:length(summary)){
  plotlist[[length(plotlist)+1]] <- ggplot(summary[[i]], aes(Wavelength, average)) +
    scale_x_continuous(name="Wavelength (nm)", limits=c(400, 900), expand=c(0,0)) +
    geom_line(aes(color=Sample), na.rm=TRUE) +
    geom_linerange(aes(ymin=average-sem, ymax=average+sem, color=Sample), alpha=0.5, na.rm=TRUE) +
    ylab("Absorbance (AU)") + ggtitle(names(summary)[i]) +
    theme_classic()
}
plotlist[[33]]

然后我得到这个图,x轴正确,但是y轴的比例现在对于显示的数据来说太大了:Plot with correct x-axis, but wrong y-axis

如何自动将y轴调整到适当的最小值/最大值,但仅限于x轴的400-900 nm范围内?

1 回答

  • 1

    这是一个可能的解决方案 . 但是,由于我无法访问您的数据,因此我无法测试它是否真的有效 .

    您可以在构建绘图之前定义波长范围的最大平均值,然后在ylim函数中调用该值 .

    我添加的两行是:

    y_scale <- max(summary[[i]]$average[summary[[i]]$Wavelength >= 400 & summary[[i]]$Wavelength <= 900])
    

    和,

    ylim(0, (y_scale + 0.5))+
    

    最终的代码如下所示:

    plotlist <- list()
    for(i in 1:length(summary)){
      y_scale <- max(summary[[i]]$average[summary[[i]]$Wavelength >= 400 &   summary[[i]]$Wavelength <= 900])
      plotlist[[length(plotlist)+1]] <- ggplot(summary[[i]], aes(Wavelength, average)) +
        scale_x_continuous(name="Wavelength (nm)", limits=c(400, 900), expand=c(0,0)) +
        ylim(0, (y_scale + 0.5))+
        geom_line(aes(color=Sample), na.rm=TRUE) +
        geom_linerange(aes(ymin=average-sem, ymax=average+sem, color=Sample), alpha=0.5, na.rm=TRUE) +
        ylab("Absorbance (AU)") + ggtitle(names(summary)[i]) +
        theme_classic()
    }
    plotlist[[33]]
    

    希望这可以帮助!

相关问题