Построение бокса с использованием R - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь создать блокпост с использованием R-скрипта из файла типа New.txt со следующим символом табуляции , где число строк и столбцов будет переменным

Chr Start   End Name    18NGS31 18MPD168    18NGS21 18NGS29 18NGS33 18NGS38
chr9    1234    1234    ABL1    1431    1   1112    1082    1809    1647
chr9    2345    2345    ASXL1   3885    37  3578    1974    2921    3559
chr9    3456    3456    ETV6    3235    188 2911    1578    2344    2673
chr9    4567    4567    MYD88   3198    187 2860    1547    2289    2621

После пропуска первых четырех столбцов создайте рамочный график в R из 5-го столбца на палатах, используя следующие команды

file <- "new.txt"
x=read.table(file,skip=1)
boxplot(x$V5,x$V6,x$V7,x$V9,x$V10,x$V11,col=rainbow(54),xlab="abc",ylab="Coverage",main="Coverage Metrics")

И я получаю следующий участок

[! [R ploy] [1]] [1]

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

1 Ответ

0 голосов
/ 06 июля 2018

Я рекомендую изменить форму с широкого на длинный.

Вот минимальный пример использования ggplot2

# Sample data
df <- data.frame(id = paste0("id", 1:100), matrix(rnorm(1000), ncol = 10))

library(dplyr)
library(tidyr)
library(ggplot2)
df %>%
    gather(key, value, -id) %>%
    mutate(key = factor(key, levels = paste0("X", 1:10))) %>%
    ggplot(aes(x = key, y = value)) +
    geom_boxplot()

enter image description here

Объяснение: Изменение формы с широкого на длинный сохраняет имена столбцов в новом столбце key и его значения в value; тогда мы можем просто отобразить key на x. Это работает для произвольного числа столбцов.


Обновление

Использование данных вашего образца

df <- read.table(text =
    "Chr Start   End Name    18NGS31 18MPD168    18NGS21 18NGS29 18NGS33 18NGS38
chr9    1234    1234    ABL1    1431    1   1112    1082    1809    1647
chr9    2345    2345    ASXL1   3885    37  3578    1974    2921    3559
chr9    3456    3456    ETV6    3235    188 2911    1578    2344    2673
chr9    4567    4567    MYD88   3198    187 2860    1547    2289    2621", header = T)

df %>%
    gather(key, value, -Chr, -Start, -End, -Name) %>%
    ggplot(aes(x = key, y = value, fill = key)) +
    geom_boxplot()

enter image description here

...