私は1つの完全なグラフを作成するために2つの問題に取り組もうとしています(ggplotが望ましい)。まず、データ用のforループをワイドフォーマットで開発する必要があると思います。そのため、複数の系列を1つのプロットに個別の線としてプロットすることができます。forループをR ggplotのワイドフォーマットで作成する
第2に、別の列(気候データ、異なるy値)を個々の系列の上にプロットする必要があります。私は二重軸グラフについて複数の議論があることを知っていますが、クライアントはこの特定のグラフを求めています。私はそれを回避できません。
これは(2011 publicationから借用)を製造するための理想的なグラフ
私のデータは、ワイドフォーマットで現在であり、私の考えは、個々のグレーを生成するために、列2:13のためのforループを作成することですシリーズごとのライン。次に、特定の月(列14:25)を上に赤で選択的に追加できるようにしたいと思います。選択的に数か月を取り出してグレーデータシリーズにプロットすることができれば、私は長いフォーマットに切り替えることができます。以下はデータの小さなサブセットですが、実際のデータセットははるかに大きくなります。
WideDF <- structure(list(Year = c("2008", "2009", "2010", "2011", "2012",
"2013", "2014"), M3T1045 = c(153.821659726048, 123.081558884975,
176.771512423309, 181.76302562778, 121.366484915564, 112.166318263156,
83.430179685548), M3T2045 = c(1979.67428393397, 2304.69652323779,
2038.57278760525, 1598.21780623635, 1698.10896695776, 1282.44883906715,
1243.48492202174), M3T3045 = c(2059.61060104009, 2538.3591621577,
2836.19881815023, 2529.3912848661, 2715.04505989801, 2137.18245498415,
1914.61513277697), M3T4045 = c(3923.28951818649, 4180.76535402238,
4214.78156108969, 4295.05332803458, 4522.22790268241, 4472.36745319943,
4098.5309021999), M3T5045 = c(2018.8160905218, 1997.65271391178,
2079.82809750919, 2248.83387563616, 2494.15706661903, 1355.10547024274,
1353.37214047842), M3T6045 = c(4409.16623051298, 4276.51428713093,
3831.60326756482, 3308.15549785341, 4045.82249844548, 4462.00875828256,
3572.81219768132), M3U1045 = c(113.83650201514, 118.780241020127,
114.984700722952, 133.421492210513, 205.600098647934, 122.476010617811,
97.1844650220458), M3U2045 = c(337.787032910181, 376.487106438174,
430.035628616836, 414.099557447903, 458.763256619945, 331.056861800248,
238.741139683364), M3U3045 = c(320.507421943828, 322.708996668388,
313.17219893837, 270.058319678974, 376.456328254947, 267.987391226506,
296.912173018184), M3U4045 = c(1095.26781018262, 1138.4400696583,
1401.22300738868, 1387.70010663431, 1658.03042540523, 1230.4459207838,
987.787227627777), M3U5045 = c(125.346087984721, 127.324176091091,
111.68607241898, 164.421987100271, 241.013673561191, 158.550165076745,
157.942524508873), M3U6045 = c(774.63712785103, 824.750682887739,
745.467515460673, 666.817790501942, 988.567171986328, 654.042598223899,
559.472739395766), Jan = c(1.11, 3.38, 3.41, 1.26, 1.02, -1.39,
1.71), Feb = c(2.32, 2.85, 3.09, 0.97, -1.52, -1.22, 1.55), Mar = c(2.47,
2.1, 3.59, 1.31, -2.29, -1.62, 1.7), Apr = c(2.45, 2, 2.5, 1.96,
-1.93, -2.14, 1.45), May = c(1.44, 1.97, 1.47, 2.12, -1.26, -1.35,
1.48), Jun = c(1.77, 3.53, 1.86, 1.74, 2.06, 1.57, 1.73), Jul = c(2.07,
4.66, 1.14, 1.1, 1.07, 2.28, 3.09), Aug = c(2.83, 4.74, -1.6,
2.55, 1.08, 2.79, 3.05), Sep = c(4.04, 3.63, -1.22, 2.26, 1.5,
3.48, 1.92), Oct = c(3.89, 4.21, 0.97, 2.7, 2.46, 2.31, 2.53),
Nov = c(4.09, 3.97, 1.28, 1.67, 1.12, 2.13, 2.16), Dec = c(4.21,
3.79, 2.05, 1.38, 1.51, 1.84, 2.71)), .Names = c("Year",
"M3T1045", "M3T2045", "M3T3045", "M3T4045", "M3T5045", "M3T6045",
"M3U1045", "M3U2045", "M3U3045", "M3U4045", "M3U5045", "M3U6045",
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"), row.names = 65:71, class = "data.frame")
私はポストhere次試してみたが、私は、すべてのシリーズのためのコードの行を作成する必要があります。
また、Didzis hereで提供されているforループを使用してみましたが、各グループが1つの観測のみで構成されているというエラーが発生し続けました。これは私が使用しようとしたコードです:
plotAllLayers(WideDF)
fields <- names(WideDF[,1:13])
p <- ggplot(aes(x=Year), data=WideDF)
for (i in 2:length(fields)) {
loop_input = paste("geom_smooth(aes(y=",fields[i],",color='",fields[i],"'))", sep="")
p <- p + eval(parse(text=loop_input))
}
p <- p + guides(color = guide_legend(title = "",))
p
この問題に取り組んでいただければ幸いです。
あなたはワイドフォーマットでデータを維持を主張するのはなぜ?物をはるかにプロットしやすくするために、長い/高いフォーマットに改造してみましょう。 – MrFlick
私がこのポストで触れたように、気候データの特定の数か月を引き上げて上にプロットする方法があれば、私は長い間形を整えることができます。私が長い形式に変換したとき、それは私のすべてのデータ(個々の時系列と気候データを数ヶ月でプロット)でした。これを回避して上記のグラフを作成する方法がある場合は、私は長く変換することができます。 – KKL234
特に、スケーリングが任意に行われる場合は、同じプロット上に異なるユニットを持つ2つのデータ系列をプロットすることをお勧めします。それは真実でない関係を暗示する傾向があります。 – AkselA