2016-11-05 3 views
-1

Я пытаюсь использовать функцию R barplot построить следующий массив на одном графике:Участок выровнен barplots в том же графике

ID 1 2 3 4 5 6 7 8 
HeL 0 2 1 4 2 3 2 4 
CaC 2 0 0 2 1 5 7 8 
NIH 1 2 5 6 3 5 7 9 

я должен был бы иметь barplot каждой строки имеет свой собственный у -axis, но ось x должна быть общей для всех строк. То, что я достиг до сих пор, чтобы прочитать матрицу из файла «rna.tab», а затем построить каждую строку отдельно:

dat <- read.table ("rna.tab", row.names=1, header=TRUE) 
barplot (as.matrix (dat[,1])) 
barplot (as.matrix (dat[,2])) 
barplot (as.matrix (dat[,3])) 

, но мне не удалось в замыслах их все вместе. Заранее благодарен Arturo

+0

'library (tidyverse); df%>% rownames_to_column ('ID')%>% gather (var, val, -ID)%>% ggplot (aes (var, val, fill = ID)) + geom_bar (stat = 'identity', position = ' додж ') '? – alistaire

ответ

0

Это вы что искали? Если вы не можете сделать пример вручную, что хотите и опубликовать изображение?

par(mfrow = c(ncol(dat),1), mar = c(2.5,4,1,1)) 
apply(dat, 2, barplot, beside = TRUE) 
par(mfrow = c(1,1)) 

Первого par говорит, что вы хотите сетку участков с таким количеством строк, что столбцы dat и 1 столбец, и изменяет края участка, чтобы соответствовать. Функция apply делает barplot для столбца eash dat и beside = TRUE помещает столбцы рядом друг с другом. Следующий par сбрасывает сетку построения сетки на один граф, и в следующий раз вам нужно нарисовать что-то, что вы не просто создаете кучу крошечных участков.

+0

Спасибо. Но когда я печатаю первую строку, я получаю сообщение об ошибке: par (mfrow = c ((ncol (dat), 1), mar = c (2.5,4,1,1)) Ошибка: неожиданный ',' in "par (mfrow = c ((ncol (dat) »,« – Arturo

+0

извините, скользящие круглые скобки, исправлены. – Barker

0

Спасибо Баркер за исправление и извините за то, что вы так долго возвращались к вам, но я болел почти неделю. Ваш код отлично работает, единственное, что, так как мне нужно построить строки, а не столбцы, это должно быть: apply (dat, 1, barplot, рядом = TRUE) Извините за то, что не ясно, в этот момент ,

У меня есть только один последний вопрос, если вы не против. Обычно моя реальная матрица жизни составляет 6000 * 30. Это означает, что я должен построить 30 строк. Обычно я сохранить изображение на диск:

png ("plot.png") 
par(mfrow = c(ncol(dat),1), mar = c(2.5,4,1,1)) 
apply(dat, 1, barplot, beside = TRUE) 
dev.off() 

Когда я делаю это, я получаю только сюжет из последних 4-х строк в файле «plot.png», а сюжет всех строк. Кроме того, поскольку ось х одинакова для всех графиков, можно было бы рисовать ее только в конце?

Смежные вопросы