4

dput() を使用して、私のデータフレームに続いて:

structure(list(year = 1984:2007, ger.90.10.ratio = c(3.1, 3.09, 
2.98, 2.93, 2.98, 2.96, 2.95, 3.12, 3.16, 3.13, 3.24, 3.3, 3.28, 
3.24, 3.24, 3.17, 3.23, 3.31, 3.63, 3.69, 3.75, 3.91, 4.1, 3.99
), kanzler = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L), wahljahr = c(0L, 
0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 1L, 0L, 0L, 1L, 0L, 0L), us.90.10.ratio = c(9.55, 9.69, 10.09, 
10.23, 10.21, 9.99, 10.12, 10.22, 10.34, 10.64, 10.57, 10.11, 
10.33, 10.6, 10.44, 10.42, 10.58, 10.63, 10.75, 11.22, 11.08, 
11.17, 11.08, 11.18), us.80.20.ratio = c(4.36, 4.38, 4.49, 4.48, 
4.45, 4.44, 4.42, 4.51, 4.6, 4.65, 4.68, 4.52, 4.61, 4.64, 4.65, 
4.62, 4.56, 4.65, 4.69, 4.83, 4.76, 4.78, 4.84, 4.93), ger.ratio.diff = c(NA, 
-0.0100000000000002, -0.11, -0.0499999999999998, 0.0499999999999998, 
-0.02, -0.00999999999999979, 0.17, 0.04, -0.0300000000000002, 
0.11, 0.0599999999999996, -0.02, -0.0399999999999996, 0, -0.0700000000000003, 
0.0600000000000001, 0.0800000000000001, 0.32, 0.0600000000000001, 
0.0600000000000001, 0.16, 0.19, -0.109999999999999), ger.ratio.change = c(0, 
-0.0100000000000002, -0.11, -0.0499999999999998, 0.0499999999999998, 
-0.02, -0.00999999999999979, 0.17, 0.04, -0.0300000000000002, 
0.11, 0.0599999999999996, -0.02, -0.0399999999999996, 0, -0.0700000000000003, 
0.0600000000000001, 0.0800000000000001, 0.32, 0.0600000000000001, 
0.0600000000000001, 0.16, 0.19, -0.109999999999999)), row.names = c(NA, 
-24L), .Names = c("year", "ger.90.10.ratio", "kanzler", "wahljahr", 
"us.90.10.ratio", "us.80.20.ratio", "ger.ratio.diff", "ger.ratio.change"
), class = "data.frame")

私がやりたいことは、3 番目の変数の値に応じて線のスタイルを変更する線図を作成することです。次のプロットのようになります大統領の所属する政党によって線のスタイルが異なるプロット

つまり、上記のデータフレームでは、年に対して ger.90.10.ratio をプロットし、kanzler-column の値に応じて線のスタイルを変更したいと考えています。

どこでも検索しましたが(おそらく私のgoogle-fuが悪いのでしょうか?)、Rでそれが可能かどうか知りたいです.

ご協力いただきありがとうございます。

4

2 に答える 2

4

R のベース グラフィックスでは、線のプロパティ (タイプ/破線パターン、色など) を途中で変更できないため、データを分割して部分で使用するlines()か、またはsegments().

これは完全な解決策ではありませんが、開始です。

グラフィックパラメータを設定します(不要ですが、私は気に入っています):

par(las=1,bty="l")

分割用の変数を生成します (各セグメントを区別する必要があります)。

dat <- transform(dat,k2=c(0,cumsum(diff(kanzler)!=0)))

データを分割します。

s <- split(dat,dat$k2)

空のプロットをセットアップします。

plot(ger.90.10.ratio~year,data=dat,type="n")

各ピースに次の行を追加します。

invisible(lapply(s,
     function(x) with(x,lines(year,ger.90.10.ratio,col=kanzler))))

ここに画像の説明を入力

でこれを (いつものように) もう少しコンパクトに行うことができますggplot2が、k2設定した変数は依然として役に立ちます。

library("ggplot2")
qplot(year,ger.90.10.ratio,data=dat,colour=factor(kanzler),
      group=k2,geom="line")

ここに画像の説明を入力

于 2013-03-17T18:38:12.070 に答える
1

latticeこれは、パッケージを使用して、ベース グラフィック プロットとどれだけ類似しているかを示すソリューションです。私は基本的にデータを分割する@Benのアイデアを使用しています。latticeパネルを使用して、より多くのcompactソリューションを提供します。

ここに画像の説明を入力

library(lattice)
dat <- transform(dat,k2=c(0,cumsum(diff(kanzler)!=0)))
s <- split(dat,dat$k2)
xyplot(ger.90.10.ratio~year,data=dat,type=c('p'),groups=kanzler,
       main = 'THE PARTISAL POLITICAL ECONOMY',
       auto.key=list(columns=2,cex=2,text=c('Democrats','Republicans')),
       panel=function(x,y,...) {
         panel.xyplot(x,y,...)
         lapply(s,function(x) 
          with(x,panel.lines(year,ger.90.10.ratio,col=kanzler)))
         panel.grid()
       })
于 2013-03-17T19:14:24.083 に答える