[英]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.