2016-02-25 3 views
-2

У меня есть набор данных, который я хотел бы построить так:ggplot2 сложенной гистограммы с использованием строк в качестве точек данных

enter image description here

Теперь это нанесено с помощью LibreOffice Calc в Ubunutu. Я попытался сделать это в R, используя следующий код:

ggplot(DATA, aes(x="Samples", y="Count", fill=factor(Sample1)))+geom_bar(stat="identity") 

Это не дает мне столбчатую диаграмму для каждого образца, а один один график. У меня был аналогичный вопрос, который использовал другой файл данных, на который был дан ответ here. Однако в этой проблеме у меня нет только одного образца, но информация по крайней мере три. В LibreOffice Calc или Excel я могу выбрать опцию stacked bar graph, а затем выбрать использование строк в качестве серии данных. Как достичь аналогичного графика в ggplot2?

Вот dataframe/объект, для которого я пытаюсь произвести график:

Aminoacid Sequence,Sample1,Sample2,Sample3 
Sequence 1,16,10,33 
Sequence 2,2,2,7 
Sequence 3,1,1,6 
Sequence 4,4,1,1 
Sequence 5,1,2,4 
Sequence 6,4,3,14 
Sequence 7,2,2,2 
Sequence 8,8,5,12 
Sequence 9,1,3,17 
Sequence 10,7,1,4 
Sequence 11,1,1,1 
Sequence 12,1,1,2 
Sequence 13,1,1,1 
Sequence 14,1,2,2 
Sequence 15,5,4,7 
Sequence 16,3,1,8 
Sequence 17,7,5,20 
Sequence 18,3,3,21 
Sequence 19,2,1,5 
Sequence 20,1,1,1 
Sequence 21,2,2,5 
Sequence 22,1,1,3 
Sequence 23,4,2,9 
Sequence 24,2,1,1 
Sequence 25,4,4,3 
Sequence 26,4,1,3 

Я скопировал содержимое файла .csv, достаточно того, что воспроизводимый? Он работал для меня, чтобы просто использовать read.csv (.file) в R.

Edit:

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

df <- read.csv("example.csv") 
df2 <- melt(example, id="Aminoacid.Sequence") 
ggplot(df2, aes(x=variable, y=value, fill=Aminoacid.Sequence))+geom_bar(stat="identity") 

Использование variable, как на оси х составляю гистограмму для каждого образца (Sample1-sample3 в примере). Использование y=value использует значение в каждой ячейке для этого образца по оси y. И самое главное, используя fill="Aminoacid.Sequence", складывает значения для каждой последовательности друг на друга, давая мне тот же график, что и на скриншоте выше!

Благодарим за помощь!

+3

Ваш вопрос не содержит [воспроизводимого примера] (http://stackoverflow.com/q/5963269/4303162). Поэтому трудно понять вашу проблему и дать вам соответствующий ответ. Пожалуйста, сделайте свои данные доступными (например, с помощью 'dput()') или используйте один из примеров наборов данных в R. Также добавьте минимальный код, необходимый для воспроизведения вашей проблемы на ваш пост. – Stibu

+2

«расплавьте» свои данные. ggplot2 предназначен для долговременных данных. – Roland

+0

Спасибо! Я добавил примеры данных, это достаточно? – Vaxin

ответ

0

попробовать что-то по следующим направлениям:

library(reshape2) 
df <- melt(DATA) # you probably need to adjust the id.vars here... 
ggplot(df, aes(x=variable, y=value) + geom_bar(stat="identity") 

Обратите внимание, что вам нужно настроить ggplot и melt код несколько, но так как вы не предоставили образцы данных, никто не может предоставить фактический код, необходимый , Вышеприведенный пример дает базовый подход к тому, как обращаться с этими несколькими столбцами, представляющими ваши образцы. melt будет «складывать» столбцы друг на друга и создавать столбец со старым именем переменной. Затем вы можете использовать x для ggplot.

Обратите внимание, что если у вас есть другие данные в фрейме данных, то melt также будет их складывать. По этой причине вам нужно будет настроить команды в соответствии с вашими данными.

Edit: с помощью данных:

library(reshape2) 
library(ggplot2) 
### reading your data: 
# df <- read.table(file="clipboard", header=T, sep=",") 
df2 <- melt(df) 

head(df2) 
     Aminoacid.Sequence variable value 
1   Sequence 1 preDLI 16 
2   Sequence 2 preDLI  2 
3   Sequence 3 preDLI  1 
4   Sequence 4 preDLI  4 
5   Sequence 5 preDLI  1 
6   Sequence 6 preDLI  4 

Это может быть использовано как в:

ggplot(df2, aes(x=variable, y=value, fill=Aminoacid.Sequence)) + geom_bar(stat="identity") 

Your picture

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

+0

Спасибо! Я попытался использовать разные переменные, но в настоящее время моя проблема заключается в том, что x-variable должна состоять из всех трех выборок (preDLI, D14, D28), которые я не могу использовать. Я отредактировал свой оригинальный пост и включил образцы данных, которые можно прочитать в R с помощью read.csv(). Может быть, вы могли бы взглянуть на это? – Vaxin

+0

Я отредактировал свой ответ, чтобы показать вам более подробно, как это сделать, используя ваши данные. Если это отвечает на ваш первоначальный вопрос, не стесняйтесь принять ответ, чтобы другие люди могли видеть, что проблема решена. – coffeinjunky

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