13

1 つのグラフにプロットする必要がある数年の時系列があります。最大の系列の平均は 340、最小は 245、最大は 900 です。最小の系列の平均は 7、最小は -28、最大は 31 です。残りの系列の値は 6 ~ 700 の範囲です。このシリーズは、何年にもわたって定期的な年次および季節的なパターンに従いますが、突然、1か月間気温が上昇し、その後、通常よりもはるかに多くの死亡者が発生しました.

実際のデータを提供することはできませんが、次のデータをシミュレートし、ここにあるサンプル コードに基づいた以下のコードを試しましたhttp://www.r-bloggers.com/multiple-y-axis-in-ar-プロット/ . しかし、プロットは私が望んでいたものを生み出しませんでした. 次の質問があります

  1. プロットでは、シリーズのいずれかを明確に描写することは難しく、重要な事実は詳細に隠されています。このデータをより適切に提示するにはどうすればよいですか?
  2. Y 軸の長さが異なります。どうすれば同じ長さの軸を持つことができますか? このコードを改善し、より良いプロットを提示する方法についてのアイデアや提案に感謝します。極端な気象現象の期間を反映する極端な値をシミュレートできないため、シミュレートしたデータは私のデータを反映していません。

どうもありがとう

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)
4

3 に答える 3

14

ここに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)
于 2013-09-14T13:01:27.053 に答える
10

私は同じタスクを手にしていましたが、いくつかの調査の結果、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)))

1 つのプロット内の複数の時系列

于 2015-07-16T13:35:06.673 に答える
8

変数ごとに個別のプロットを使用して、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または、(in を使用して)それらを隣り合わせに配置することもでき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)

ここに画像の説明を入力

ここでは、体温の上昇が死亡率の上昇と相関していることを簡単に確認できます。

于 2013-09-14T12:38:59.553 に答える