1つのグラフにプロットする必要がある数年の時系列があります。最大の系列の平均は340、最小は245、最大は900です。最小の系列の平均は7で、最小は-28、最大は31です。残りの系列の値は6〜700の範囲です。このシリーズは、突然、1か月間急激な気温の上昇があり、その後、通常よりも死亡数が大幅に増加するまで、年間を通じて定期的な年次および季節パターンに従います。
実際のデータを提供することはできませんが、次のデータをシミュレートし、ここにあるサンプルコードに基づいた以下のコードを試しました http://www.r-bloggers.com/multiple-y-axis- in-ar-plot / 。しかし、陰謀は私が望んだものを生み出しませんでした。次の質問があります
どうもありがとう
temp<- rnorm(365, 5, 10)
mort<- rnorm(365, 300, 45)
poll<- rpois(365, lambda=76)
date<-seq(as.Date('2011-01-01'),as.Date('2011-12-31'),by = 1)
df<-data.frame(date,mort,poll,temp)
windows(600,600)
par(mar=c(5, 12, 4, 4) + 0.1)
with(df, {
plot(date, mort, axes=F, ylim=c(170,max(mort)), xlab="", ylab="",type="l",col="black", main="")
points(date,mort,pch=20,col="black")
axis(2, ylim=c(170,max(mort)),col="black",lwd=2)
mtext(2,text="Mortality",line=2)
})
par(new=T)
plot(date, poll, axes=F, ylim=c(45,max(poll)), xlab="", ylab="",
type="l",col="red",lty=2, main="",lwd=1)
axis(2, ylim=c(45,max(poll)),lwd=1,line=3.5)
points(date, poll,pch=20)
mtext(2,text="PM10",line=5.5)
par(new=T)
plot(date, temp, axes=F, ylim=c(-28,max(temp)), xlab="", ylab="",
type="l",lty=3,col="brown", main="",lwd=1)
axis(2, ylim=c(-28,max(temp)),lwd=1,line=7)
points(date, temp,pch=20)
mtext(2,text="Temperature",line=9)
axis(1,pretty(range(date),10))
mtext("date",side=1,col="black",line=2)
各変数に個別のプロットを使用して、y軸を異ならせます。 1つのプロットに複数のy軸を導入するよりも、これが好きです。これを行うためにggplot2
を使用します。具体的には、ファセットの概念です。
library(ggplot2)
library(reshape2)
df_melt = melt(df, id.vars = 'date')
ggplot(df_melt, aes(x = date, y = value)) +
geom_line() +
facet_wrap(~ variable, scales = 'free_y', ncol = 1)
ファセットを積み重ねていることに注意してください。これにより、各シリーズのイベントのタイミングを簡単に比較できます。または、(nrow = 1
でfacet_wrap
を使用して)それらを隣同士に配置することもできます。これにより、y値を簡単に比較できます。
極端な例もいくつか紹介します。
df = within(df, {
temp[61:90] = temp[61:90] + runif(30, 30, 50)
mort[61:90] = mort[61:90] + runif(30, 300, 500)
})
df_melt = melt(df, id.vars = 'date')
ggplot(df_melt, aes(x = date, y = value)) +
geom_line() +
facet_wrap(~ variable, scales = 'free_y', ncol = 1)
ここでは、臨時雇用者の増加が死亡率の増加と相関していることを簡単に確認できます。
ここに6つのアプローチがあります:
library(Zoo)
z <- read.Zoo(df)
# classic graphics in separate and single plots
plot(z)
plot(z, screen = 1)
# lattice graphics in separate and single plots
library(lattice)
xyplot(z)
xyplot(z, screen = 1)
# ggplot2 graphics in separate and single plots
library(ggplot2)
autoplot(z) + facet_free()
autoplot(z, facet = NULL)
私は同じタスクを手にしていて、いくつかの調査の後、私はrでts.plot {stats}関数に出くわしました。これは非常に役に立ちました。
関数の使用法は次のとおりです。
ts.plot(..., gpars = list())
gparsは、プロットのグラフィックコンポーネントを指定できるグラフィックパラメーターです。
これに似たデータがあり、timeという変数に格納されていました。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
V3 1951 1100 433 5638 1760 2385 2602 11007 2490 421
V5 433 880 216 4988 220 8241 13229 18704 6289 421
V7 4001 440 433 3686 880 9976 12795 21036 13229 1263
V9 2385 1320 650 8241 440 12795 13229 19518 11711 1474
V11 4771 880 1084 6723 0 17783 17566 27326 11060 210
V13 6940 880 2168 2602 1320 21036 16265 10843 15831 1474
V15 3903 1760 1951 3470 0 18217 14964 0 13663 2465
V17 4771 440 2819 8458 880 25591 24940 1518 17783 1895
V19 7807 1760 5205 2385 0 14096 22771 13880 12578 1263
V21 5205 880 5205 6506 880 28410 18217 13229 19952 1474
V23 6506 1760 5638 7590 880 14747 26675 11928 12795 1474
V25 7373 440 5855 10626 0 19301 21470 15398 19952 1895
V27 5638 2640 6289 0 880 16482 20603 30796 14313 2316
V29 8241 440 6506 6723 880 11277 35784 25157 23205 4423
V31 7373 2640 6072 8891 220 17133 27109 31013 27287 4001
V33 6723 660 5855 14313 660 6940 26892 17566 24111 4844
V35 9325 2420 9325 12578 0 6506 30796 34483 23422 5476
V37 4771 440 6872 12361 880 9325 36218 25808 30362 4844
V39 9976 2640 7658 12361 440 11277 36001 31013 40555 4633
V41 10410 880 6506 12795 440 26241 33398 27976 24940 5686
V43 5638 2200 7590 14313 0 9976 34483 29928 33832 6108
V45 10843 440 8675 11711 440 7807 29278 24940 43375 4633
V47 8675 1760 8891 13663 0 9108 38386 31230 33398 4633
V49 10410 1760 9542 13880 440 8675 39051 31446 42507 5476
. . . . . . . . .
そして、同じプロットの各列の時系列プロットを取得する必要がありました。コードは次のとおりです。
ts.plot(time,gpars= list(col=Rainbow(10)))