Гусеничные участки в ggplot2 - PullRequest
3 голосов
/ 28 марта 2011

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

#generate random data frame
set.seed(42)
my_df<-data.frame(x=rnorm(100), y=runif(100,-2,2), z=rpois(100, 10))

#3 panels of plots
par(mfrow=c(1,3))

#note the abline to show an axis at y=0
sapply(c("x", "y", "z"), function(i){ plot(sort(my_df[[i]])); abline(0,0)})

Но я не знаю, как это сделать с помощью ggplot2. Я знаю, что для объединения трех панелей мне нужно растопить фрейм данных, но потом ... как можно упорядочить по переменной и построить график по оси 0 позже? Все, что у меня есть, это ...

melt_df<-melt(my_df)

qplot(1:100, value, data=melt_df, geom="point",facets=~variable)+theme_bw(base_size=16)

Ответы [ 3 ]

5 голосов
/ 28 марта 2011

Построение ответа от jebyrnes - вы можете установить ось Y, чтобы в качестве аргумента в facet_wrap были указаны свободные масштабы.Мы можем добавить горизонтальную линию с помощью geom_hline():

ggplot(melt_df, aes(1:100, value)) + geom_point() + 
    facet_wrap(~ variable, ncol = 3, scales = "free_y") +
    geom_hline(aes(intercept = 0), linetype = 2) +
    theme_bw(base_size = 16)

Вы можете получить эквивалентные результаты с помощью stat_qq() и избежать сортировки с помощью ddply заранее.Разница в том, что нам нужно только передать аргумент sample в aes:

ggplot(melt_df, aes(sample = value)) + geom_point(stat = "qq") + 
    facet_wrap(~ variable, ncol = 3, scales = "free_y") +
    geom_hline(aes(intercept = 0), linetype = 2) +
    theme_bw(base_size = 16)
1 голос
/ 27 августа 2015
######## Begin: base R approach ###########
#generate random data frame
set.seed(42)
my_df<-data.frame(x=rnorm(100), y=runif(100,-2,2), z=rpois(100, 10))
#3 panels of plots
par(mfrow=c(1,3))
#note the abline to show an axis at y=0
sapply(c("x", "y", "z"), function(i){ plot(sort(my_df[[i]])); abline(0,0)})
######## End: base R approach ###########

rbase

######## Begin: data.table + ggplot2 approach ###########
library(data.table)
library(ggplot2)
melt_df<-melt(my_df)
melt_dt<-melt_df
setDT(melt_dt)
setkey(melt_dt, variable, value)
catey <- ggplot(melt_dt, aes(x=rep(1:100,3), y=value)) + geom_point() + 
facet_wrap(~ variable, ncol = 3, scales = "free_y") +
 geom_hline(aes(intercept = 0), linetype = 2) +
 theme_bw(base_size = 16)
## catepillar:
catey
## with line ranges:
melt_dt[, minvalue:= -2*value+value]
melt_dt[, maxvalue:=  2*value+value]
butterfly <- catey + geom_linerange(aes(ymin=minvalue, ymax=maxvalue))
butterfly
######## End: data.table + ggplot2 approach ###########

caterpillar

butterfly

1 голос
/ 28 марта 2011

Шаг 1: заказ выполняется ddply.

melt_df<-melt(my_df)

melt_df<-ddply(melt_df, .(variable), summarize, value=sort(value))

qplot(1:100, value, data=melt_df, geom="point",facets=~variable)+theme_bw(base_size=16)

Ось все еще озадачивает меня, особенно с учетом трех граней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...