2013-10-04 7 views
1

У меня есть ряд данных, которые показывают, как давно в геноме был активен определенный тип ДНК-элемента. Это может выглядеть примерно так:Преобразование высоты каждого фактора в уложенной плотности плотности (ggplot2)

data.df <- data.frame(name=c("type1", "type1", "type1", "type2", "type2", "type2"), 
         active=c(9,11,10,21,21,18)) 

Итак, есть три элемента «Type1» активные приблизительно 10 лет назад и три типа 2 элемента активных 20 лет назад.

Я создал многослойный график плотности с использованием ggplot2, чтобы получить распределение, когда каждый элемент был активен, что-то вроде этого:

ggplot(data.df, aes(x=active)) + geom_density(position="stack", aes(fill=name)) 

Stacked sample plot

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

Так что мой вопрос сводится к следующему: Как преобразовать/умножить высоту плотности каждого типа элемента на какой-то фактор, в зависимости от группы? Например, если бы у меня было 1000 типов одного элемента в геноме и только 3 элемента типа 2, то в таблице сложенной плотности доминировал бы тип 1, и вы вряд ли увидели бы кривую, связанную с типом 2.

Я надеюсь это имеет смысл. Заранее спасибо!

ответ

1

Я не уверен, правильно ли я понял ваш вопрос, но это то, что вы хотите?

ggplot(data.df) 
+geom_density(aes(x=active,y=..scaled..,fill=name),position="stack") 

ggplot2 «s помощи при stat_density говорит, что scaled дает "оценку плотности, масштабируется до максимума 1".

В качестве альтернативы, вы можете также добавить столбец веса (например, wght) к вашему data.frame используйте weight аргумент в geom_density и игнорировать предупреждение

data.df=data.frame(name=c("type1","type1","type1","type1","type1","type1","type2", "type2","type2"),active=c(1.1,1,1,1,1,1,17.1,17,17),stringsAsFactors =FALSE) 
data.df=within(data.df,wght<-c(rep(1/6,6),rep(4/9,3))) 

ggplot(data.df)+ 
geom_density(aes(x=active,y=(..density..),fill=name,weight=wght),position="stack") 

Однако, я не знаю точно, как geom_density ручки весы, которые не суммируются до 1.

+0

Весы были именно тем, что я искал. ..scaled .. масштабирует все кривые, чтобы иметь максимальную высоту 1, что делает более широкие диапазоны распределения/активности искусственно завышенными в количестве. Благодаря! –

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