2016-07-19 2 views
0

У меня есть информационная рамка относительных бактериальных обилий для 152 образцов (рядов). Я хотел бы построить график штабелированных баров общей численности для каждой группы бактерий по всем образцам (например, Actinovacteria vs. Bacteroidetes против Firmicutes и т. Д.). Я бы хотел, чтобы он был закодирован в цвете, с легендой для этого. Может кто-нибудь предложить, как это сделать? Моя проблема заключается в том, что я не уверен, как получить итоговые значения столбцов для построения в R. Спасибо.Создание штабеля барного участка бактериального обилия

row.names  Actinobacteria Bacteroidetes Firmicutes Fusobacteria Proteobacteria Verrucomicrobia Other 
1 sample1 0.0084246282 0.41627099 0.55475503 0.000000e+00 7.245180e-04 5.391762e-05 1.977092e-02 
2 sample2 0.0168571327 0.13298800 0.80289437 3.560112e-05 4.272135e-03 4.238314e-02 5.696180e-04 
3 sample3 0.0020299288 0.53813817 0.42367947 3.311006e-02 7.978327e-04 3.534702e-05 2.209189e-03 
+1

[Reshape] (http://stackoverflow.com/question s/1181060), тогда ваши данные будут отображаться. Вот [пример] (http://stackoverflow.com/a/25936383/680068) с помощью ggplot – zx8754

ответ

1

Я не ясно, были ли выборочные имена имен строк в вашем dataframe, так что я просто воссоздан фрейм данных кладя имя образца в переменном, так же, как имена бактерий:

Sample Actinobacteria Bacteroidetes Firmicutes Fusobacteria Proteobacteria 
1 sample1 0.008424628  0.4162710 0.5547550 0.000000e+00 0.0007245180 
2 sample2 0.016857133  0.1329880 0.8028944 3.560112e-05 0.0042721350 
3 sample3 0.002029929  0.5381382 0.4236795 3.311006e-02 0.0007978327 
    Verrucomicrobia  Other 
1 5.391762e-05 0.019770920 
2 4.238314e-02 0.000569618 
3 3.534702e-05 0.002209189 

для воспроизведения этого набора данных вы можете запустить следующую команду:

df <- structure(list(Sample = structure(1:3, .Label = c("sample1", 
"sample2", "sample3"), class = "factor"), Actinobacteria = c(0.0084246282, 
0.0168571327, 0.0020299288), Bacteroidetes = c(0.41627099, 0.132988, 
0.53813817), Firmicutes = c(0.55475503, 0.80289437, 0.42367947 
), Fusobacteria = c(0, 3.560112e-05, 0.03311006), Proteobacteria = c(0.000724518, 
0.004272135, 0.0007978327), Verrucomicrobia = c(5.391762e-05, 
0.04238314, 3.534702e-05), Other = c(0.01977092, 0.000569618, 
0.002209189)), .Names = c("Sample", "Actinobacteria", "Bacteroidetes", 
"Firmicutes", "Fusobacteria", "Proteobacteria", "Verrucomicrobia", 
"Other"), class = "data.frame", row.names = c("1", "2", "3")) 

Как @ zx8754 предложил этот кадр данных требует изменения формы, то есть переход от широкого формата в длинный формат. Для получения дополнительной информации, пожалуйста, проверьте это link для нескольких примеров.

Если выше dataframe называется df, следующая команда изменит его в длинном формате:

library(reshape2) 
df_long <- melt(df, id.vars = "Sample", variable.name = "Phyla") 

Отсюда можно построить с помощью ggplot:

library(ggplot2) 
ggplot(df_long, aes(x = Sample, y = value, fill = Phyla)) + 
    geom_bar(stat = "identity") 

, который дает:

enter image description here

+0

Спасибо. Есть ли способ изменить его, чтобы название легенды говорило «Phyla» вместо переменной? – espop23

+0

Несомненно, 'variable' - это просто имя столбца, в котором содержится имя бактерий в' df_long'. Если вы измените имя этого столбца в фрейме данных, заголовок легенды изменится соответствующим образом. Кроме того, вы можете изменить его непосредственно в процедуре «расплав». Я редактировал код, чтобы добавить это. – thepule

+1

Или вы можете изменить название легенды, ничего не делая с данными: http://www.cookbook-r.com/Graphs/Legends_%28ggplot2%29/ –

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