0

複数の線で構成されるグラフを作成するためのRスクリプトを作成しています。基本的なチャートを作成し、プロットされた各線を滑らかにすることができました。ただし、次のようにしてチャートを美しくしたいと思います。

  1. 現在、各線は平滑化された線としてプロットされています。他の線種、たとえば一点鎖線、一点鎖線などを使用して、平滑化された線をプロットしたいと思います。

  2. グラフに凡例を追加し、凡例に線(メインチャートで表す線と同じ色)を表示したいと思います。

  3. メインチャートのタイトル、xおよびyのフォントサイズを指定します

これが私がこれまでに持っているものです:

dat  <- read.csv(filename, sep=',')

xvals <- dat$xvals
y1  <- dat$y1
y2  <- dat$y2
y3  <- dat$y3
y4  <- dat$y4
y5  <- dat$y5
y6  <- dat$y6

lo1 <- loess(y1~xvals)
lo2 <- loess(y2~xvals)
lo3 <- loess(y3~xvals)
lo4 <- loess(y4~xvals)
lo5 <- loess(y5~xvals)
lo6 <- loess(y6~xvals)

plot(xvals,y1, xlab='X label', ylab='Y label', type='n')
xl <- seq(min(xvals),max(xvals), (max(xvals) - min(xvals))/1000)
lines(xl, predict(lo1,xl), col='gray', lwd=1)
lines(xl, predict(lo2,xl), col='pink', lwd=1)
lines(xl, predict(lo3,xl), col='red', lwd=1)
lines(xl, predict(lo4,xl), col='cyan', lwd=1)
lines(xl, predict(lo5,xl), col='black', lwd=1)
lines(xl, predict(lo6,xl), col='green', lwd=1)

legend("topright", "(x,y)", pch=1, lty=c(1,1), # gives the legend appropriate symbols (lines)
       , lwd=c(1,1),col=c("blue","red"), inset = .02)

上記の要件1〜3を実装するために、上記のコードを変更するにはどうすればよいですか?

余談ですが、私はggplotを知っています。私はplot()に固執すると思います-ggplotはあまりにも不可解で、不可解で、腹立たしいと思います。

4

1 に答える 1

5

私はすでに答えに取り組み始めたので:

いくつかのデータを作成します。

dat <- data.frame(xvals=1:100,
                  y=matrix(rnorm(600),ncol=6))

数式を作成し、適用loesspredictて、結果を行列にまとめます。

formulae <- lapply(names(dat)[-1],
                   function(yvar) as.formula(paste(yvar,"xvals",sep="~")))
loessfits <- lapply(formulae,loess,data=dat)

xl <- with(dat,seq(min(xvals),max(xvals), length.out=1000))
pvals <- do.call(cbind,lapply(loessfits,predict,newdata=data.frame(xvals=xl)))

パラメータを設定します(常に戻って、もう少し時間をかけて読む価値があります?par):

## set box type (open), horizontal tick labels, axis label and title size
par(bty="l",las=1,cex.main=2,cex.lab=2)

colo(u)rsと線種を設定します。

cvec <- c("gray","pink","red","cyan","black","green")
lvec <- 1:6

プロットを作成します。

matplot(xl,pvals,type="l",col=cvec,lty=lvec,
        xlab='X label', ylab='Y label')    
legend("topright", paste0("L",1:6), pch=1, lty=lvec,col=cvec, inset = .02)

ここに画像の説明を入力してください

于 2012-08-02T00:39:26.170 に答える