2014-11-11 2 views
0

Может ли кто-нибудь помочь мне построить данные ниже в виде графика плотности, где colour=variable?Земельный участок в виде плоского участка в ggplot

> head(combined_length.m) 
    length      seq   mir variable  value 
1  22 TGAGGTATTAGGTTGTATGGTT mmu-let-7c-5p  Ago1 8.622468 
2  23 TGAGGGAGTAGGTTGTATGGTTT mmu-let-7c-5p  Ago1 22.212471 
3  21 TGAGGTAGTAGGTTGCATGGT mmu-let-7c-5p  Ago1 9.745199 
4  22 TGAGGTAGTATGTTGTATGGTT mmu-let-7c-5p  Ago1 11.635982 
5  22 TGAGTTAGTAGGTTGTATGGTT mmu-let-7c-5p  Ago1 13.203627 
6  20 TGAGGTAGTAGGCTGTATGG mmu-let-7c-5p  Ago1 7.752571 

ggplot(combined_length.m, aes(factor(length),value)) + geom_bar(stat="identity") + facet_grid(~variable) + 
    theme_bw(base_size=16 

Я попытался это без успеха:

ggplot(combined_length.m, aes(factor(length),value)) + geom_density(aes(fill=variable), size=2) 

Error in data.frame(counts = c(167, 9324, 177, 150451, 62640, 74557, 4, : 
    arguments imply differing number of rows: 212, 6, 1, 4 

enter image description here

Я хочу что-то вроде этого:

http://i.stack.imgur.com/qitOs.jpgenter image description here

+0

ли вы потрудились взглянуть на примеры в [документации ggplot2] (http://docs.ggplot2.org/current/stat_density.html)? –

+0

Да, я получил это:> ggplot (combination_length.m, aes (factor (length), value)) + geom_density (aes (fill = factor (variable)), size = 2) Ошибка в данных.(counts = c (167, 9324, 177, 150451, 62640, 74557, 4,: аргументы подразумевают различное количество строк: 212, 6, 1, 4 – BioMan

+0

Пожалуйста, включите ваш код в сам вопрос, а не в комментарии (вы можете легко отформатировать его там, и это легко увидеть всем, не прочитав все комментарии). –

ответ

2

Использование factor(length) для x, похоже, создает проблемы. Просто используйте length.

Кроме того, графики плотности отображают распределение того, что вы определяете как x. Поэтому по определению ось y представляет собой плотность при заданном значении x. В вашем коде вы, кажется, пытаетесь указать как x, так и y, что не имеет смысла. Вы можете указать y в geom_density(...), но это контролирует масштабирование, как показано ниже. [Примечание. В вашем примере есть только один тип variable (Ago1), поэтому я создал искусственный набор данных].

set.seed(1) # for reproducible example 
df <- data.frame(variable=rep(LETTERS[1:3],c(5,10,15)), 
       length =rpois(30,25), 
       value =rnorm(30,mean=20,sd=5)) 

library(ggplot2) 
ggplot(df,aes(x=length))+geom_density(aes(color=variable)) 

В этом представлении, площадь под каждой кривой 1. Это то же самое, как установка y=..density..

ggplot(df,aes(x=length))+geom_density(aes(color=variable,y=..density..)) 

Вы также можете установить y=..count.. который масштабируется на основе подсчетов. В этом примере, поскольку имеется 15 наблюдений для C и только 5 для A, синяя кривая (C) имеет в три раза большую площадь в виде красной кривой (A).

ggplot(df,aes(x=length))+geom_density(aes(color=variable,y=..count..)) 

Вы также можете установить y=..scaled.., который регулирует кривые так, максимальное значение в каждый из которых соответствует 1.

ggplot(df,aes(x=length))+geom_density(aes(color=variable,y=..scaled..)) 

Наконец, если вы хотите получить избавившись от всех этих раздражающих дополнительных линий, используйте вместо этого stat_density(...):

ggplot(df,aes(x=length))+ 
    stat_density(aes(color=variable),geom="line",position="identity") 

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