簡體   English   中英

如何使用 R 中的 for 循環創建多個圖,每個圖都有不同的 y 軸標簽和標題?

[英]How can I create multiple plots, each with different y axis labels and titles using a for loop in R?

一些背景:我試圖分析的數據是流式細胞術數據(對於那些不熟悉這是什么的人,為了這個 Q 的目的,它基本上是使用激光來表征不同的細胞類型)。 我在這里的變量是要在 y 軸上繪制的單元格的不同特征,並且每個變量都是從“父組”中讀取的。 也就是說,如果感興趣的變量是 Live Cells,則父組可以是腎細胞或肺細胞等。

我有一個包含 13 個變量的大型數據表,需要針對相同的 x 軸繪制,即治療后的時間(以周為單位)。 我需要 plot 對時間的每個變量,需要不同的 y 軸 label 和一個標題,該標題應該包括y 軸 label 以及相應的“父組”變量的名稱。 我采取的步驟是:

  1. 將主數據表導入R
  2. 導入帶有關鍵字的數據表,即每個變量名稱(即主數據表中的列名)以及其各自的Y軸label和“父組”名稱。 舉個例子,這張桌子是這樣的,

在此處輸入圖像描述

如您所知,“父組”名稱或 y 軸標簽不一定對每個變量名稱都是唯一的

  1. 將關鍵字數據表的每一列分配給一個新的向量,即變量、y軸和父級。
  2. 創建一個 FOR 循環以自動從原始主表中子集數據,一次包含一個變量的信息,然后按時間 plot 它。
    r 
   for(i in variables){
    table<-as.data.frame(test[,c("WEEK",i)])`
    for(j in yaxis){
    for (k in parent){
    plot<-ggplot(table,aes(x=WEEK,y=table[,3]))+geom_line()+geom_point(size=2)+scale_shape_manual(values=1:25)+xlab("Weeks")+ylab(j)+theme_minimal()+ggtitle(paste0(k,"-",j))
ggsave(plot,file=paste0(paste(j,k,sep="_"),"plot.jpg"),width=14,height=10,units="cm")
     }
      }
      rm(table)
      rm(plot)
    }

我在這里嘗試做的是自動化 for 循環以添加相應的 y 軸 label 和每個變量的標題,但我當然陷入了一個循環,它繼續運行並生成每個變量 13 個 y 軸的組合標簽 * 13 plot 標題組合。 我需要 13 個圖,每個圖都有自己的 y 軸標簽和 plot 標題,而無需為每個圖手動輸入,因為我希望將圖直接從 for 循環導出為 jpeg 文件。 我考慮過使用 if 或 if else 函數,但我不確定如何在此處應用這些函數。 對此的任何幫助將不勝感激!

這是一種解釋您的問題的方法:使用構面繪圖和 map Parent級和Yaxis進入構面 label。 這將產生一系列方面 plot 其中 label 反映ParentYaxis

要進行分面,我們需要重塑數據框。 首先,調用庫並創建一些有用的數據:

library(dplyr)
library(tidyr)
library(tibble)
library(ggplot2)

# make fake data
data <- tibble(
  Week = seq(from = 1, length.out = 91),
  cells_live = runif(min = 1, max = 10, n = 91),
  cells_live_dividing = runif(min = 1, max = 10, n = 91),
  cells_live_aging = runif(min = 1, max = 10, n = 91)
)

mapping <- tibble(
  variables = c("cells_live", "cells_live_dividing", "cells_live_aging"),
  Parent = c("COUNT", "live", "live"),
  Yaxis = c("live cells", "divinding cells", "aging")
)

然后我們使用來自pivot_longertidyr將數據重新整形為長格式:

data <- data %>%
  pivot_longer(cols = -Week,
               names_to = "vars",
               values_to = "values")

然后,我們使用Yaxis從映射表中引入數據,並使用基於Parentleft_join的構面標簽創建一個新列:

data <- data %>%
  left_join(mapping, by= c("vars" = "variables")) %>%
  mutate(facet_labels = paste0(Parent, ": ", Yaxis))

最后,我們調用ggplot ,使用facet_labels作為 facetting 變量:

ggplot(data = data, aes(x = Week, y = values)) +
  geom_point() +
  facet_wrap(.~ facet_labels, scales = "free") +
  theme_minimal()

有了這個 output:

在此處輸入圖像描述

這並不完全是您所要求的,但希望它對您有用。

暫無
暫無

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

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