簡體   English   中英

如何在R ggplot2中限制x軸后自動重新計算y軸比例

[英]How to automatically re-calculate the y axis scale after limiting the x axis in R ggplot2

我正在使用 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]]

這給了我:沒有軸調整的情節

如果我像這樣將 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 軸的比例現在對於顯示的數據來說太大了:用正確的 x 軸繪圖,但錯誤的 y 軸

如何自動將 y 軸調整到適當的最小值/最大值,但僅在 x 軸的 400-900 nm 范圍內?

這是一個可能的解決方案。 但是,由於我無權訪問您的數據,因此無法測試它是否確實有效。

您可以在構建繪圖之前定義波長范圍的最大平均值,然后在 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]]

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM