2014-01-18 3 views
1

Я ищу, чтобы создать график в R, который показывает относительное изменение некоторых переменных между двумя факторами. Я хотел бы их уложить, чтобы уменьшить избыточный текст и упростить визуальное сравнение изменений между двумя факторами. Я бы хотел, чтобы это выглядело примерно так: http://postimg.org/image/clmw5zj37/.Создайте сложенную диаграмму относительного изменения

где строки (или столбцы) представляют относительное изменение (y) в каждой переменной (X), сплошной круг (или любой другой символ) не представляет изменений, а звездочка указывает, что изменение является статистически значимым. У кого-нибудь есть идея, как это сделать в R?

+1

После просмотра этого сюжета я не могу сказать, что вы имеете в виду под «стек». Вы также должны опубликовать некоторые данные. –

+0

Под «сложены» Я имею в виду организацию двух графиков по вертикали друг на друга. Любые числовые данные могут быть сгенерированы в R или вы можете использовать случайные числа. Относительные изменения в моих данных - различия между медианными = медианными (time2) -median (time1)/median (time1). – user2998182

ответ

1

Это?

set.seed(1) 
df <- data.frame(x=toupper(letters[1:10]), 
       y=rnorm(20,0,50), 
       sig=sample(0:1,20,replace=T), 
       factor=rep(c("Factor1","Factor2"),each=10)) 

library(ggplot2) 
ggplot(df) + 
    geom_point(aes(x=x,y=y),shape=1,size=3)+ 
    geom_linerange(aes(x=x,ymin=0,ymax=y))+ 
    geom_text(data=df[df$sig==1,], aes(x=x,y=y+10*sign(y)),label="*",size=10)+ 
    geom_hline(yintercept=0)+ 
    facet_grid(factor~.) 

Обратите внимание, что считается вежливым, чтобы обеспечить представительный набор данных. См. this link для того, чтобы хорошо сформулировать вопрос.

Редактировать В ответ на комментарий ОП.

Настроить точки только тогда, когда y=0, установить data=df[df$y==0,] в звонок geom_point(...). Вертикальное выравнивание звезд может быть выполнено с помощью vjust= в вызове geom_text(...). Таким образом, этот код:

set.seed(1) 
df <- data.frame(x=toupper(letters[1:10]), 
       y=rnorm(20,0,50), 
       sig=sample(0:1,20,replace=T), 
       factor=rep(c("Factor1","Factor2"),each=10)) 
df[sample(1:nrow(df),4),2:3]=0  # add some zeros to example 

library(ggplot2) 
ggplot(df) + 
    geom_point(data=df[df$y==0,],aes(x=x,y=y),size=5)+ 
    geom_linerange(aes(x=x,ymin=0,ymax=y))+ 
    geom_text(data=df[df$sig==1,], aes(x=x,y=y+10*sign(y)), 
      label="*", size=10, vjust=+0.65)+ 
    geom_hline(yintercept=0)+ 
    facet_grid(factor~.) 

Genreates это ggplot:

+0

Это работает. Однако у меня есть две проблемы: когда y отрицательно, звездочка ближе к точке, чем если y> 0 (предположительно из-за порядка операций в строке 11, y = y + 10 * sign (y), но я неуверен); во-вторых, в моем первоначальном вопросе я указал, что мне нужны точки только для x, y = 0, как можно изменить синтаксис, чтобы поддержать это? – user2998182

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