2016-05-23 1 views
1

Мне интересно, как построить несколько графиков на одном экране, используя ggplot() и facet_grid(), потому что мне действительно нужно несколько раз повторять этот процесс для разных статистических переменных.Построить несколько графиков с помощью ggplot() и facet_grid()

У меня есть два наблюдения за кадрами данных и еще один с предсказаниями. Они являются как матрицей 550 x 76.

данных кадра 1:

Observations x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75 
Observation1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8 
Observation2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6 
Observation3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1 
Observation550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1 

данных кадра 2:

Predictions x1 x2 x3 x5 x6 x7 x8 x9 x10 x11 x13 .... x75 
Prediction1 -0.1 0.05 0.1 0.2 0.3 0.04 0.3 -0.1 0.02 0.02 -0.2 ....0.8 
Prediction2 -0.3 0.05 0.1 0.1 0.3 0.03 0.3 -0.1 0.03 0.02 -0.2 ....0.6 
Prediction3 -0.2 0.05 0.1 0.4 0.3 0.02 0.3 -0.1 0.01 0.01 -0.2 ....0.1 
Prediction550 -0.1 0.05 0.8 0.4 0.3 0.02 0.7 -0.1 0.01 0.01 -0.2 ....0.1 

Кажется, что я должен создать только один кадр данных или список с этими двумя матрицей внутри, чтобы использовать ggplot().

Я сделал это, но используя стандартный график r.

Заранее спасибо

+0

Как вы хотите огранка смотреть? Сетка с 76 столбцами и 550 рядами будет превосходить любое устройство вывода, которое я когда-либо видел. –

+0

Я хочу показать по крайней мере два экрана с выделенными строками (каждый отдельный граф - одна строка с 75 столбцами), может быть два экрана, скажем, по 20 графиков. – FernRay

+0

Хорошо, да, я вижу, что я неправильно понял это. Дайте мне несколько минут –

ответ

1

Я думаю, что это то, что вы хотите.

library(ggplot2) 
library(reshape2) 

# Fake some data 
set.seed(1234) 
nc <- 15 
nr <- 20 
onms <- sprintf("Observation%d",1:nr) 
pnms <- sprintf("Prediction%d",1:nr) 
cnames <- sprintf("x%d",1:nc) 

odf <- data.frame(Observations=onms) 
pdf <- data.frame(Predictions=pnms) 

for(i in 1:nc){ 
    vk1 <- 0.01*rnorm(nr) 
    odf[[cnames[i]]] <- round(cumsum(vk1),3) 
    vk2 <- 0.02*rnorm(nr) 
    pdf[[cnames[i]]] <- round(cumsum(vk1) + cumsum(vk2),3) 
} 

# This is the data we need 
head(odf) 
head(pdf) 

# Now change the pred. colnames so they don't collide with the obs. colnames 
newpnames <- sprintf("p_x%d",1:nc) 
names(pdf) <- c("series",newpnames) 
names(odf)[1] <- "series" 

# Merge the data into a long format 
modf <- melt(odf,id.vars="series",measure.vars=cnames) 
mpdf <- melt(pdf,id.vars="series",measure.vars=newpnames) 
mdf <- rbind(modf,mpdf) 

# Now extract the fields we need into new columns 
mdf$x <- as.numeric(gsub(".*[A-Za-z]","",mdf$variable)) 
mdf$frame <- as.numeric(gsub(".*[A-Za-z]","",mdf$series)) 
frameNames <- sprintf("Frame:%d",1:max(mdf$frame)) 
mdf$frame <- factor(sprintf("Frame:%d",mdf$frame),levels=frameNames) 
mdf$kind <- substr(mdf$series,1,3) 

# Finally plot it 
ggplot(mdf) + geom_line(aes(x=x,y=value,color=kind)) + facet_wrap(~ frame) 

# ecdf version 
ggplot(mdf,aes(x=value,color=kind)) + stat_ecdf(geom="step") + facet_wrap(~ frame) 

Обратите внимание, что head заявления после того, как фальсифицировать данные дают вам это, так что это близко к тому, что вы начинаете с я верю:

> head(odf) 
    Observations  x1  x2  x3  x4  x5 x6  x7  x8  x9 
1 Observation1 -0.012 0.014 -0.002 -0.002 -0.008 0.005 0.001 -0.010 0.001 
2 Observation2 -0.009 0.004 -0.003 -0.010 -0.011 0.012 0.005 -0.005 0.002 
3 Observation3 0.002 -0.005 -0.017 0.011 -0.015 0.014 -0.006 -0.012 -0.003 
4 Observation4 -0.022 -0.008 -0.019 0.018 -0.017 0.021 0.001 -0.004 -0.019 
5 Observation5 -0.018 -0.017 -0.010 0.037 -0.013 0.024 0.008 -0.012 -0.019 
6 Observation6 -0.013 -0.027 -0.003 0.037 -0.007 0.031 0.011 -0.009 -0.026 
    x10 x11 x12 x13 x14 x15 
1 0.009 -0.012 0.005 -0.007 0.015 -0.007 
2 0.028 -0.012 0.004 0.005 0.013 -0.018 
3 0.028 -0.016 0.005 -0.012 0.026 -0.021 
4 0.027 -0.025 -0.004 -0.008 0.026 -0.020 
5 0.022 -0.021 -0.017 -0.006 0.019 -0.012 
6 0.036 -0.019 -0.003 0.026 0.011 0.001 
> head(pdf) 
    Predictions  x1 x2  x3  x4  x5 x6  x7  x8 x9 
1 Prediction1 -0.009 0.028 0.007 -0.009 -0.063 0.023 0.020 -0.022 0.000 
2 Prediction2 -0.016 0.068 -0.005 0.011 -0.068 0.043 0.017 -0.036 0.007 
3 Prediction3 -0.014 0.059 -0.017 0.045 -0.052 0.090 0.009 -0.047 0.021 
4 Prediction4 -0.029 0.042 -0.029 0.050 -0.046 0.121 -0.019 -0.018 0.028 
5 Prediction5 -0.038 0.032 -0.037 0.079 -0.024 0.130 -0.005 -0.026 0.031 
6 Prediction6 -0.062 0.058 -0.027 0.087 0.022 0.124 -0.016 -0.036 0.047 
    x10 x11 x12 x13 x14 x15 
1 -0.027 -0.037 0.007 0.012 0.023 -0.026 
2 -0.061 -0.029 -0.010 0.000 0.048 -0.027 
3 -0.073 -0.035 -0.004 -0.003 0.048 -0.023 
4 -0.045 -0.041 0.000 -0.001 0.048 -0.025 
5 -0.034 -0.024 -0.038 0.037 0.030 -0.007 
6 0.005 -0.020 -0.045 0.064 -0.002 -0.005 

Наконец получают этот участок:

enter image description here

И т его граненый ecdf участок:

enter image description here

+0

Теперь, когда я думаю об этом, я должен был сгенерировать поддельные данные за строкой и добавить его в dataframes с помощью 'rbind' вместо столбца. Вот почему это выглядит так странно, но для вас это не имеет значения. –

+0

Эй, спасибо @Mike мудрый, ваш ответ был действительно полезен. Думаю, что мои графики показывают в другом порядке, R жалуются на эту команду: – FernRay

+0

mdf <- mdf [order (mdf)] и показывает это сообщение об ошибке: Ошибка в '.data.frame' (mdf, order (mdf)): выбраны неопределенные столбцы Большое спасибо! – FernRay

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