ggplot多行按图例+ SD按行和列

时间:2019-06-16 12:10:18

标签: r ggplot2 dplyr

我有2个data.frame:

data_mean:

 territory_1 territory_2 territory_3 territory_4 territory_5 territory_6 territory_7 territory_8 territory_9
season_1   0.04548814  0.03679184  0.04804329  0.01774598   0.1873583  0.03798713  0.02515220  0.04006423   0.2460139
season_2   0.07529072  0.08048696  0.06041415  0.03461997   0.1473725  0.04371079  0.02451824  0.03729869   0.2325734
season_3   0.19094684  0.05399267  0.09108074  0.05326579   0.1107565  0.04996543  0.02944363  0.04424125   0.2061001
season_4   0.16393195  0.02916149  0.05763407  0.03526731   0.1212815  0.05466920  0.02825975  0.06150540   0.2232308
season_5   0.08309387  0.05862481  0.07578285  0.03620725   0.1433460  0.07038242  0.03102652  0.05434440   0.1553574

和data_SD:

territory_1 territory_2 territory_3 territory_4 territory_5 territory_6 territory_7 territory_8 territory_9
season_1  0.009414762 0.009205625 0.003816925 0.002548717  0.01475648 0.003631448 0.001490306 0.002462043 0.007583638
season_2  0.024247471 0.016402706 0.004980897 0.004745206  0.01393021 0.004178247 0.001597244 0.002553933 0.007538909
season_3  0.030626971 0.012865086 0.006913778 0.005980786  0.01313423 0.004754663 0.001875462 0.002952610 0.007434868
season_4  0.034040440 0.009705439 0.004927881 0.004330766  0.01350788 0.004751983 0.001753364 0.003384793 0.007406657
season_5  0.020016015 0.014591767 0.005815301 0.004232419  0.01499951 0.005411255 0.001875151 0.003234048 0.006308964

我想为一个地区绘制一个ggplot Y =值,X =季节,并为一个地区绘制一条线,每个地区的颜色不同(颜色(地区)),并在Sd inf和Sd sup之间绘制一个区域。我想绘制另一个ggplot:xterritory的xggplot + Sd inf和Sd sup之间的区域。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:2)

使用ggplot的最有效方法是将数据重整为长格式,通常为单个数据帧。下面,我使用dplyr::left_jointidyr::gather将提供的两个表转换并组合为ggplot最适合的形式。

library(tidyverse)
data_combined <-
  left_join(
    data_mean %>% gather(territory, mean, -season),
    data_SD %>% gather(territory, SD, -season)
  )

然后将不同的列分配给图表的不同外观非常简单:

ggplot(data_combined,
       aes(x = season, y = mean, color = territory, group = territory)) +
  geom_ribbon(aes(ymin = mean - SD, ymax = mean + SD, fill = territory), 
              alpha = 0.3, color = NA) +
  geom_line()

enter image description here