如何在 R 中使用 matplot 绘制非常自定义的线条样式

Mus*_*ful 4 r

?par解释lty可以将其指定为交替绘制/跳过的线段长度的向量。

例如c(1,3,1,1)看起来像这样:

?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试传递lty=c(1,3,1,1)matplot(或者如果我使用 预设它par),那么matplot假设我想通过样式 1(实心)、样式 3(虚线)、样式 1(实心)、样式 1(实心)循环,结果是

????????????????????????????????????????????????????????????????????????????
?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   
????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????
?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   
????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

而不是这个

?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? ?   ? 
Run Code Online (Sandbox Code Playgroud)

我怎样才能matplot理解它应该将整个向量解释为一种风格?

jor*_*ran 5

所以?par实际上说自定义线类型应该指定为character,具有偶数个元素,例如"33".

无论如何,matplot不会将其与普通整数规范混合处理,因为它已将参数“选择”lty为向量,每行一个值。

您可以传递matplot一个字符向量并lty手动指定每个向量,例如像lty = c("44","22","33","3322"). 或者您可以matplot通过将最后几行更改为以下内容来创建自己的版本:

if (!add) {
        ii <- ii[-1L]
        plot(x[, 1L], y[, 1L], type = type[1L], xlab = xlab, 
            ylab = ylab, xlim = xlim, ylim = ylim, lty = lty[[1L]], 
            lwd = lwd[1L], lend = lend[1L], pch = pch[1L], col = col[1L], 
            cex = cex[1L], bg = bg[1L], ...)
    }
    for (i in ii) lines(x[, i], y[, i], type = type[i], lty = lty[[i]], 
        lwd = lwd[i], lend = lend[i], pch = pch[i], col = col[i], 
        cex = cex[i], bg = bg[i])
Run Code Online (Sandbox Code Playgroud)

以便它使用[[而不是[选择适当的lty值。然后你可以传递一个值列表,lty每个值都会被正确解释。