Объедините facet_wrap линейного графика (1-й набор данных) с facet_wrap точечного графика (2-й набор данных) на одном графике

У меня есть два набора данных, я называю их 1.data 2.data_other

1.данные

data <- read.table(text = "Me EE  PE   DE    TE    DEE   CE
1   1  1 4.5 2000  0.50 0.2547 0.69
2   1  2 2.4 3000    NA 0.5896 2.56
3   1  3 6.5 2345 15.24     NA 1.85
4   1  4  NA   NA 18.23 1.2594 2.06
5   2  1 2.6   NA 12.25 1.5943 2.34
6   2  2  NA 3145 10.25     NA   NA
7   2  3 2.7 4235    NA     NA 2.90
8   2  4  NA   NA  6.32 2.5990 3.18
9   3  1 3.5   NA  8.25 2.9339 3.46
10  3  2 3.8   NA    NA     NA   NA
11  3  3  NA   NA    NA 3.6037 1.58
12  3  4 4.4 4325    NA 3.9386 4.30
13  4  1 4.7   NA 15.24 4.2735 4.58
14  4  2  NA 4325  6.66     NA   NA
15  4  3 5.3   NA 25.20     NA   NA
16  4  4 5.6 3256    NA 5.2782 5.42
17  5  1  NA 4351 25.36 5.6131 5.70
18  5  2 6.2 2345    NA 5.9480   NA
19  5  3 6.5   NA 19.36     NA   NA
20  5  4  NA 4643 17.25 6.6178 6.54", header = T)

2.data_other

Me  EE  PE  DE  TE  DEE CE
1   1   1.3 1452    12.5    0.2587  1.25
1   2   1.7 2458    10.8    1.5469  0.69
1   3   0.8 3524    11.96   0.5874  0.87
1   4   0.7 1905    13.58   0.9654  0.98
2   1   0.5 2941    12.54   0.2548  1.65
2   2   0.2 3183.5  13.134  1.3658  1.11
2   3   0.01    3426    13.42   0.48692 1.320666667
2   4   1.52    3668.5  13.706  1.9547  1.386095238
3   1   1.98    3911    13.992  0.36906 1.45152381
3   2   2.1 4153.5  14.278  0.31013 1.516952381
3   3   2.44    6674    15.96   0.564   0.2512  
3   4   2.736   6671    16.5    1.85    1.5687  
4   1   1.05    4881    15.136  0.13334 1.713238095
4   2   1.52    5123.5  15.422  0.07441 1.778666667
4   3   0.95    5366    15.708  0.01548 1.844095238
4   4   1.073   5608.5  15.994  1.2548  1.90952381
5   1   1.0233  5851    16.28   1.9658  1.974952381
5   2   0.9733  6093.5  16.566  2.2154  2.040380952
5   3   0.9233  6336    16.852  1.2587  2.105809524
5   4   2.45    6578.5  17.138  1.9657  2.171238095

Я строю точечный график с данными и использую следующий код

data <- read.table("data.txt")
datad <- melt(data,id.vars = c("Me","EE"),measure.vars= c("PE","DE","TE","DEE","CE"))
ggplot(subset(datad, !is.na(EE)),aes(x=EE,y=value), as.table = T) + 
    geom_point(aes(color=factor(Me)), size = 3) + 
    facet_wrap(~variable, nrow=3, ncol=2, scales = "free_y")

Я строю линейный график с data_other и использую следующий код

data_other <- read.table("data_other.txt", header = T)
data_otherd <- melt(data_other, id.vars = c("Me","EE"), measure.vars = c("PE","DE","TE","DEE","CE"))
ggplot(subset(data_otherd, !is.na(EE)), aes(x=EE, y=value), as.table = T) +
    geom_line(aes(color = factor (Me))) +
    facet_wrap(~variable, nrow=3, ncol=2, scales = "free_y")

Результат.

  1. данные (точечный график)

введите здесь описание изображения

  1. data_other (линейный график)

введите здесь описание изображения

Я пытаюсь объединить оба набора данных на одном графике (это означает, что линейный график data_other должен перекрываться с графиком точек данных или наоборот).

Оба набора данных имеют одинаковое количество столбцов, и имена столбцов также похожи.

Я знаю, что без facet_wrap я могу использовать другую геометрию, чтобы указать другой набор данных и построить линейный график на точечном графике. Но с фасетной оберткой я не знаю, как объединить оба набора данных.

Как поместить два набора данных с разными геомами на один график.

Пожалуйста помоги. Заранее спасибо.


person cppiscute    schedule 16.06.2014    source источник


Ответы (1)


Вам нужен только один вызов ggplot() с первым фреймом данных, а затем добавить geom_line() с data=data_otherd. Поскольку все имена переменных одинаковы, geom_line() будет использовать ту же информацию, что и aes() из ggplot() (переместите также color=factor(Me) в aes() из ggplot() вызова).

ggplot(datad,aes(x=EE,y=value,color=factor(Me)))+
      geom_point()+
      geom_line(data=data_otherd)+
      facet_wrap(~variable, nrow=3, ncol=2, scales = "free_y")

введите здесь описание изображения

person Didzis Elferts    schedule 16.06.2014
comment
Спасибо, я думал об этой идее, но никогда не пробовал, думал, как мы можем связать два набора данных в одном Facet_wrap, не обрабатывая его внутри Facet_wrap. Похоже, что функции достаточно мощны, чтобы справиться со многими вещами (просто вопрос изучения). Спасибо еще раз...:) - person cppiscute; 16.06.2014