Как сделать 2 гистограммы строки из таблицы, используя половину n столбцов на график (R)? - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужна помощь с гистограммами. Я очень плохо знаком с R, поэтому я немного растерялся, хотя, возможно, есть очень простой способ решить эту проблему. Мне нужно написать функцию, которая возвращает две гистограммы, созданные с данными из одной строки фрейма данных. Гистограммы должны отображаться на одном графике, один над другим. Первая гистограмма должна состоять из столбцов 5:39 из строки 1, вторая из столбцов 40:74. Тем не менее, я продолжаю получать черную графику, или ошибка "x должно быть числовым".

Вот часть фрейма данных, первые столбцы 74

          gene_id            gene_symbol                      Chr                  Biotype        L001P        L003P        L004P
1     ENSG00000000003                 TSPAN6                        X           protein_coding  3.18003e+01  6.73098e+01  6.30330e+01
2     ENSG00000000005                   TNMD                        X           protein_coding  3.72353e-02  2.28841e+00  3.29320e-02
3     ENSG00000000419                   DPM1                       20           protein_coding  1.75575e+01  4.37474e+01  2.10119e+01
4     ENSG00000000457                  SCYL3                        1           protein_coding  2.68196e+00  3.70790e+00  3.14505e+00
5     ENSG00000000460               C1orf112                        1           protein_coding  5.32179e-01  2.46598e+00  1.11985e+00

Это то, что я сделал до сих пор:

> data <- read.table("file", header=TRUE, stringsAsFactors = FALSE)
 data1 = data[1, 5:39]

Это дало мне вектор с колонками с 5 по 39, включая заголовки. Однако, когда я пытаюсь построить первую гистограмму, делая это, я получаю полностью черный график

 hist(table(data1), 
     main="Expression levels for TSPAN6 in non-tumor tissue",
     xlab="Patient",
     ylab="Expression level value",
     border = "black",
     col = "black")

enter image description here Что я делаю неправильно? (

Кроме того, как мне объединить две гистограммы, когда я пойму, как их построить? Это можно сделать с помощью

par(mfcol=c(1,2)) 

после> возврата внутрь функции?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

я думаю, потому что каждый элемент уникален, например, в вашем крошечном примере

`

table( as.numeric( data1))

31.8003       63.033      67.3098 
      1            1             1

`

это похоже на равномерное распределение, это дляпо этой причине график вашей проблемы (существует только одна частота)

я создаю данные и ставлю свой собственный пример

data=cbind(matrix(NA,5,4),rbind(
abs(rnorm(70,54,19)),
abs(rnorm(70,0.78,1.3)),
abs(rnorm(70,27,14)),
abs(rnorm(70,3.1,0.51)),
abs(rnorm(70,1.3,0.99))
))
for (i in seq(nrow(data))) {

    win.graph()

    par(mfcol=c(1,2)) 

    data1 = data[i, 5:39]

    hist(as.numeric(data1), 
        main="Expression levels for TSPAN6 in non-tumor tissue",
        xlab="Patient",
        ylab="Expression level value",
        border = "black",
        col = "black")

    data2 = data[i, 40:74]

    hist(as.numeric(data2), 
        main="Expression levels for TSPAN6 in non-tumor tissue",
        xlab="Patient",
        ylab="Expression level value",
        border = "black",
        col = "black")

}

, если вы хотите сделать один или один, вы можете сделать это

win.graph ()

    par(mfcol=c(1,2)) 

    data1 = data[1, 5:39]

    hist(as.numeric(data1), 
        main="Expression levels for TSPAN6 in non-tumor tissue",
        xlab="Patient",
        ylab="Expression level value",
        border = "black",
        col = "black")

    data2 = data[1, 40:74]

    hist(as.numeric(data2), 
        main="Expression levels for TSPAN6 in non-tumor tissue",
        xlab="Patient",
        ylab="Expression level value",
        border = "black",
        col = "black")

enter image description here

и если вы хотите сделать все строки в вашем случае, я думаю, что этот код должен функционировать,

`

for (i in seq(nrow(data))) {

    win.graph()

    par(mfcol=c(1,2)) 

    data1 = data[i, 5:39]

    hist(as.numeric(data1), 
        main="Expression levels for TSPAN6 in non-tumor tissue",
        xlab="Patient",
        ylab="Expression level value",
        border = "black",
        col = "black")

    data2 = data[i, 40:74]

    hist( as.numeric( data2),        
        main="Expression levels for TSPAN6 in non-tumor tissue",
        xlab="Patient",
        ylab="Expression level value",
        border = "black",
        col = "black") 

}

`

0 голосов
/ 18 апреля 2019

Поскольку ваши данные широкоформатные, просто преобразуйте одну строку числовых значений в числовой вектор, а затем передайте в гистограмму. Не нужно запускать table, который создает очень глубокий, вложенный и плотный массив с уровнями, равными количеству столбцов!

Настройте ниже для запуска внутри нужной функции с входными параметрами для gene_id и индексами столбцов для столбцов опухоли / неопухоли.

gene_param = "ENSG00000000003"

hist(as.numeric(data[data$gene_id==gene_param, 5:39]), 
     main=paste("Espression levels for TSPAN6\nin non-tumor tissue for gene,", gene_param),
     xlab="Patient", breaks=50,
     ylab="Espression level value",
     border = "black",
     col = "black")

hist(as.numeric(data[data$gene_id==gene_param, 40:74]), 
     main=paste("Espression levels for TSPAN6\nin tumor tissue for gene,", gene_param),
     xlab="Patient",
     ylab="Espression level value",
     border = "black",
     col = "black")

С данными ниже, дополняемыми случайными данными для столбцов до 74:

txt <- '          gene_id            gene_symbol                      Chr                  Biotype        L001P        L002P        L003P
1     ENSG00000000003                 TSPAN6                        X           protein_coding  3.18003e+01  6.73098e+01  6.30330e+01
2     ENSG00000000005                   TNMD                        X           protein_coding  3.72353e-02  2.28841e+00  3.29320e-02
3     ENSG00000000419                   DPM1                       20           protein_coding  1.75575e+01  4.37474e+01  2.10119e+01
4     ENSG00000000457                  SCYL3                        1           protein_coding  2.68196e+00  3.70790e+00  3.14505e+00
5     ENSG00000000460               C1orf112                        1           protein_coding  5.32179e-01  2.46598e+00  1.11985e+00'

data <- read.table(text=txt, header=TRUE)

# ADDING COLUMNS OF RANDOM DATA
set.seed(41719)
data[paste0("LOO", 4:74, "P")] <- replicate(71, abs(rnorm(5))+10)

Выполнение выше histogram вызовов, нижние графики генерируются с gene_id в заголовке:

Plot Output

...