如何使用R中的plot()函数使基本图更美观

Hom*_*lli 0 plot r

我正在创建一个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)
Run Code Online (Sandbox Code Playgroud)

如何修改上面的代码以实现上面的要求1 - 3?

顺便说一句,我知道ggplot.我想我会坚持使用情节() - 我发现ggplot太神秘,令人费解和令人愤怒.

Ben*_*ker 5

既然我已经开始研究答案了:

补充一些数据:

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

创建公式,应用loess并将predict结果折叠到矩阵中:

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)))
Run Code Online (Sandbox Code Playgroud)

设置参数(总是值得回去并花更多时间阅读?par):

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

设置colo(u)rs和线型:

cvec <- c("gray","pink","red","cyan","black","green")
lvec <- 1:6
Run Code Online (Sandbox Code Playgroud)

创建情节:

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • `formula < - lapply(names(dat)[ - 1],function(yvar)as.formula(paste(yvar,"xvals",sep ="〜"))); loessfits < - lapply(公式,黄土,数据= dat)`纯天才! (2认同)