簡體   English   中英

在 R 的 matplot 中換行

[英]Break the line in a matplot in R

我有一些通過復制拆分的數據(例如,在我創建的這個示例中,我復制了“a”和“b”)。 我想 plot 這些線通過打破復制之間的線。

我可以通過復制使用ggplot和 facet,或者將 plot 分成兩個單獨的圖,但更願意將數據保存在一個 plot 中。

玩具示例:

set.seed(1)
data <- matrix(rnorm(10*4), ncol = 10)
colnames(data) <- c(paste0("a_", 1:5), paste0("b_", 1:5))
plot(0, ylim = range(data), xlim = c(1, ncol(data)), ylab = "tmp",
     type = "n", xaxt = "n", xlab = "")
axis(1, at = seq(ncol(data)), labels = colnames(data), las = 2)
matlines(t(data))

在此處輸入圖像描述

我想要的是這樣的:

在此處輸入圖像描述

> sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS High Sierra 10.13.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats4    parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] patchwork_1.0.1      gridExtra_2.3        plotly_4.9.2.1       pRolocdata_1.26.0   
 [5] tidyr_1.1.0          reshape2_1.4.4       pRoloc_1.29.0        BiocParallel_1.22.0 
 [9] MLInterfaces_1.68.0  cluster_2.1.0        annotate_1.66.0      XML_3.99-0.3        
[13] AnnotationDbi_1.50.0 IRanges_2.22.2       MSnbase_2.14.2       ProtGenerics_1.20.0 
[17] S4Vectors_0.26.1     mzR_2.22.0           Rcpp_1.0.4.6         Biobase_2.48.0      
[21] BiocGenerics_0.34.0  ggplot2_3.3.1        shinyhelper_0.3.2    colorspace_1.4-1    
[25] colourpicker_1.0     shinythemes_1.1.2    DT_0.13              shiny_1.4.0.2       
[29] dplyr_1.0.0  

最簡單的方法是使用矩陣列索引手動剪切它們:

matlines(t(data[,1:5]))
matlines(6:10, t(data[,6:10]))

分裂圖

但是,如果您有可變數量的組,那么您可以通過編程方式進行操作。 這里我將使用gsub("_.*", "", colnames(data)) (下划線之前的所有內容)作為數據的唯一特征; 如果您的真實列名的結構不同,您將需要使用不同的確定。

inds <- split(seq_len(ncol(data)), gsub("_.*", "", colnames(data)))
inds
# $a
# [1] 1 2 3 4 5
# $b
# [1]  6  7  8  9 10
invisible(lapply(inds, function(i) matlines(i, t(data[,i]))))
### or
for (i in inds) matlines(i, t(data[,i]))

(相同的情節)

暫無
暫無

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

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