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

时间:2013-11-17 21:32:13

标签: r

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

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

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

但是如果我尝试将lty=c(1,3,1,1)传递给matplot(或者我使用par预设它),那么matplot会假设我想循环使用样式1(实体),样式3(虚线),样式1(实心),样式1(实体),产生此

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

而不是

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

如何让matplot明白它应该将整个矢量解释为一种风格?

1 个答案:

答案 0 :(得分:4)

因此?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,每个值都将被正确解释。