2017-12-22 12 views
0

はで動作するように簡略化されたプロットである:書かれたようxpd = TRUEでも垂直線と水平線をプロットするにはどうすればよいですか?ここで

env <- data.frame(site = c('BLK','DUC','WHP','BLK','DUC','WHP','BLK','DUC','WHP'), 
        sal = c(5,6,3,2,4,5,6,8,4), 
        date = c(2013,2013,2013,2015,2015,2015,2017,2017,2017)) 
sitelist <- c('BLK','DUC','WHP') 
par(mar=c(3,5,3,6), xpd = T) 
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity', 
    bty = 'n', xlab = '') 
abline(v=2016, col = 'khaki', lwd = 20) 
abline(mean(env$sal), 0, lty = 3) 
for (ii in seq_along(sitelist)) { 
    i <- sitelist[ii]; lines(sal[site==i] ~ date[site==i], data = env, 
          col = c(4,2,5)[ii], lwd = 2, 
          lty = c(1,2,3)[ii]); 
    points(sal[site==i] ~ date[site==i], data = env, 
     pch = c(0,1,2)[ii], col = c(4,2,5)[ii])} 
legend('topright', title = 'sites', inset=c(-0.2,0), lty = c(1,2,3), 
     col = c(4,2,5), lwd = 2, sitelist, 
     pch = c(0,1,2)) 

、このコードはabline機能は、外部のプロットの境界のxpd=Tのおかげで行くラインを作成するプロットを生成します。しかし、私はxpd=Fを設定したくありません。なぜなら、私は凡例を境界の外側にプロットすることができないからです。ソリューションは、境界の外側にある凡例をxpd=Fでプロットする方法か、境界で停止する線をプロットする方法のいずれかでなければなりません。理想的には、このソリューションは基本プログラムを使い、かなり標準化されているので、あまりカスタマイズしなくても〜20個のプロットにそれぞれドロップすることができます。

Iはsegmentsを使用して試みたが、私の垂直線が一定時間を示す斜線領域の一種であると考えられるように、セグメントの丸みを帯びたエッジと幸せではなかったです。

+0

電話? – rosapluesch

答えて

0

あなたはセットがparコールでFALSEにXPDと、このようなlegend呼び出しでTRUE XPD =を挿入することができ、次のいずれか

env <- data.frame(site = c('BLK','DUC','WHP','BLK','DUC','WHP','BLK','DUC','WHP'), 
        sal = c(5,6,3,2,4,5,6,8,4), 
        date = c(2013,2013,2013,2015,2015,2015,2017,2017,2017)) 
sitelist <- c('BLK','DUC','WHP') 
par(mar=c(3,5,3,6), xpd = F) 
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity', 
    bty = 'n', xlab = '') 
abline(v=2016, col = 'khaki', lwd = 20) 
abline(mean(env$sal), 0, lty = 3) 
for (ii in seq_along(sitelist)) { 
    i <- sitelist[ii]; lines(sal[site==i] ~ date[site==i], data = env, 
          col = c(4,2,5)[ii], lwd = 2, 
          lty = c(1,2,3)[ii]); 
    points(sal[site==i] ~ date[site==i], data = env, 
     pch = c(0,1,2)[ii], col = c(4,2,5)[ii])} 
legend('topright', title = 'sites', inset=c(-0.2,0), lty = c(1,2,3), 
     col = c(4,2,5), lwd = 2, sitelist, 
     pch = c(0,1,2), 
    xpd = T) 

かにFALSEにXPD parコールとセットでTRUE = XPDを保ちますこのようなabline呼び出し:あなたはabline内XPD = Fを設定していないのはなぜ

env <- data.frame(site = c('BLK','DUC','WHP','BLK','DUC','WHP','BLK','DUC','WHP'), 
        sal = c(5,6,3,2,4,5,6,8,4), 
        date = c(2013,2013,2013,2015,2015,2015,2017,2017,2017)) 
sitelist <- c('BLK','DUC','WHP') 
par(mar=c(3,5,3,6), xpd = T) 
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity', 
    bty = 'n', xlab = '') 
abline(v=2016, col = 'khaki', lwd = 20,xpd=F) 
abline(mean(env$sal), 0, lty = 3,xpd=F) 
for (ii in seq_along(sitelist)) { 
    i <- sitelist[ii]; lines(sal[site==i] ~ date[site==i], data = env, 
          col = c(4,2,5)[ii], lwd = 2, 
          lty = c(1,2,3)[ii]); 
    points(sal[site==i] ~ date[site==i], data = env, 
     pch = c(0,1,2)[ii], col = c(4,2,5)[ii])} 
legend('topright', title = 'sites', inset=c(-0.2,0), lty = c(1,2,3), 
     col = c(4,2,5), lwd = 2, sitelist, 
     pch = c(0,1,2)) 

plot

+0

非常にうまくいった。 – InfiniteFlashChess

+0

簡単な解決に感謝します!私は 'xpd'が' par() 'の外で使われるかもしれないことを知りませんでした。 –

0

これは問題を解決するはずです。

lines(c(2013, 2017), rep(mean(env$sal), 2), col="black", lwd = 2, lty = 2) 
lines(rep(2016, 2), c(0, 10), col="khaki", lwd = 20) 

ソースで

abline(v=2016, col = 'khaki', lwd = 20) 
abline(mean(env$sal), 0, lty = 3) 

を交換してください:あなたは20の+プロットを持っている場合、私はトンを見てねhttps://stackoverflow.com/a/24741885/5874001

par(mar=c(3,5,3,6), xpd = T) 
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity', bty = 'n', xlab = '') 
lines(c(2013, 2017), rep(mean(env$sal), 2), col="black", lwd = 2, lty = 2) 
lines(rep(2016, 2), c(0, 10), col="khaki", lwd = 20) 
for (ii in seq_along(sitelist)) { 
    i <- sitelist[ii]; lines(sal[site==i] ~ date[site==i], 
          data = env, 
          col = c(4,2,5)[ii], 
          lwd = 2, 
          lty = c(1,2,3)[ii]); 
    points(sal[site==i] ~ date[site==i], data = env, 
     pch = c(0,1,2)[ii], col = c(4,2,5)[ii])} 
legend('topright', title = 'sites', inset=c(-0.2,0), 
     lty = c(1,2,3), col = c(4,2,5), lwd = 2, 
     sitelist, pch = c(0,1,2)) 

enter image description here

oそのタスクを実行するためのループを書くことができるかどうかを確認してください。

+0

水平線はどうですか? – rosapluesch

+0

ああ、私の悪いこと、それを編集する時間.... – InfiniteFlashChess

+0

完了、あなたの答えはよく、より多くの情報に見えます:) – InfiniteFlashChess

関連する問題