Разорвать линию на графике в R - PullRequest
0 голосов
/ 09 июля 2020

У меня есть некоторые данные, которые разделяются репликацией (например, в этом примере, который я создал, я реплицирую «a» и «b»). Я хочу построить их в виде линий, разорвав линию между репликами.

Я мог бы использовать ggplot и фасет за репликацию или разделить график на два отдельных графика, но предпочел бы хранить данные на одном графике.

Пример игрушки:

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))

enter image description here

What I would like is this:

enter image description here

> 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  

1 Ответ

1 голос
/ 09 июля 2020

Самый простой способ - просто вырезать их вручную, используя индексирование столбцов матрицы:

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

split plot

But if you have a variable number of groups, then you can do it programmatically. Here I'll use gsub("_.*", "", colnames(data)) (everything before the underscore) as the unique characteristic of the data; if your real column names are structured differently, you will need to use a different determination.

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]))

(тот же график)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...