2014-10-08 2 views
2

У меня есть ряд оценок плотности, которые я хотел бы построить для сравнения в ggplot2. Я не привязан к какому-либо из подробностей, которые я выбрал до сих пор (например, должны ли они быть на одном участке, следует ли использовать грани, сетку.арранга и т. Д.) Я открыт для предложений:ggplot2: выстроить границы x на двух участках плотности

Первая попытка:

p1<-ggplot(data, aes(TPM,fill=col))+scale_x_log10()+scale_fill_brewer(type="div") + geom_density(alpha=.7) 
p2<-ggplot(data, aes(RPKM,fill=col))+scale_x_log10()+scale_fill_brewer(type="div") + geom_density(alpha=.7) 
grid.arrange(p1,p2,ncol=1) 

enter image description here

Хорошо, но я хотел бы ось быть тем же самым, так что они сопоставимы.

Я попытался установить границы с помощью coord_cartesian(xlim=c(0,5)), но я получаю ошибки, такие как

Error in seq.default(min, max, by = by) : 
    'from' cannot be NA, NaN or infinite 

Я также попытался установить пределы в scale_x_log10(limits=c(0,5), но я получаю

Error in seq.default(range[1], range[2], length = 200) : 
    'from' cannot be NA, NaN or infinite 
Error in exists(name, envir = env, mode = mode) : 
    argument "env" is missing, with no default 

Есть ли лучший способ выровнять чтобы эти графики были более легко сопоставимы? Я бы выбрал любое решение.

Мои данные этой формы:

  RPKM   TPM col 
1 0.129335235 0.602873040 3 
2 0.395073341 1.724916453 4 
3 0.004909958 0.003465248 1 
4 0.466517328 0.557687694 1 
5 0.522773169 0.486767563 1 
6 0.179694966 0.180683888 1 

ответ

4

Если вы широкий для длительного преобразования на фрейме данных, вы можете использовать ggplot аспекты для ваших участков. По умолчанию у вас будут одинаковые масштабы для x & y, если вы не переопределите их. Я создал некоторые данные на пример ниже):

library(ggplot2) 
library(reshape2) 
library(gridExtra) 

set.seed(1492) 
data <- data.frame(RPKM=runif(2000, min=0, max=1), 
        TPM=runif(2000, min=0, max=1), 
        col=factor(sample(1:9, 2000, replace=TRUE))) 

data_m <- melt(data) 
data_m$col <- factor(data_m$col) # need to refactor "col" 

gg <- ggplot(data_m) 
gg <- gg + geom_density(aes(value, fill=col), alpha=.7) 
gg <- gg + scale_fill_brewer(type="div") 
gg <- gg + facet_wrap(~variable, ncol=1) 
gg 

enter image description here

+0

чистого совершенства, именно то, что я хотел! Мне нужно будет больше узнать о reshape2 и расплавлении. – bdeonovic

+0

Определенно включите [tidyr] (http://blog.rstudio.org/2014/07/22/introducing-tidyr/) в это исследование. Он протекает очень хорошо, если вы примете новый «канал» для передачи данных вокруг (ala magrittr/dplyr). – hrbrmstr