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

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

─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─

但是,如果我尝试将 lty=c(1,3,1,1) 传递给 matplot(或者如果我使用 par 预设它),那么 matplot 假设我想循环遍历样式 1(实心)、样式 3(虚线)、样式 1(实心)、样式 1(实心) ,导致这个
────────────────────────────────────────────────────────────────────────────
─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─
────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─   ─
────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────

而不是这个
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─
─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─ ─   ─

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

最佳答案

所以 ?par 实际上是说自定义线型应该被指定为一个字符,具有偶数个元素,例如"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])

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

关于r - 如何在 R 中使用 matplot 绘制非常自定义的线条样式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20036440/

10-12 18:59