5

我刚刚遇到了这个很好的代码,它制作了这个散点矩阵图:

替代文字
(来源:free.fr

并希望通过使点的大小/颜色(在下三角形中)根据出现的该类型选项的数量而有所不同(例如抖动可能给我的效果),从而将其实现为 likret 比例变量(1 到 5 的整数) )。

关于如何在基础绘图机制上执行此操作的任何想法?

更新:

我做了以下功能,但不知道如何让点的比例总是“好”,你怎么看?

panel.smooth2 <- function (x, y, col = par("col"), bg = NA, pch = par("pch"), 
                    cex = 1, col.smooth = "red", span = 2/3, iter = 3, ...) 
{
    require(reshape)
    z <- merge(data.frame(x,y), melt(table(x ,y)),sort =F)$value
    z <- z/ (4*max(z)) 

    symbols( x, y,  circles = z,#rep(0.1, length(x)), #sample(1:2, length(x), replace = T) ,
            inches=F, bg="blue", fg = bg, add = T)

    # points(x, y, pch = pch, col = col, bg = bg, cex = cex)
    ok <- is.finite(x) & is.finite(y)
    if (any(ok)) 
        lines(stats::lowess(x[ok], y[ok], f = span, iter = iter), 
            col = col.smooth, ...)
}



a1 <- sample(1:5, 100, replace = T)
a2 <- sample(1:5, 100, replace = T)
a3 <- sample(1:5, 100, replace = T)
aa <- data.frame(a1,a2,a3)


pairs(aa , lower.panel=panel.smooth2)
4

2 回答 2

3

你可以使用' symbols '(类似于'lines'、'abline'等方法)

此方法可让您在一行代码中对符号大小和颜色进行细粒度控制。

使用“符号”,您可以设置符号大小、颜色和形状。形状和大小通过传入每个符号大小的向量并将其绑定到“圆形”、“正方形”、“矩形”或“星形”来设置,例如,“星形”= c(4, 3, 5、1)。颜色用“bg”和/或“fg”设置。

symbols( x, y, circles = circle_radii, inches=1/3, bg="blue", fg=NULL) 

如果我理解您问题的第二部分,您希望合理地确定您用来缩放绘图中符号的函数以有意义的方式这样做。'symbols' 函数缩放(例如)半径基于 'z' 变量(或 data.frame 列等)中的值的圆圈数半径小一点,按该 dat 点的值与最大值的比率进行缩放。比那个成比例的,这是一个不错的选择吗?我不知道——在我看来,直径或特别是周长可能会更好。无论如何,这是一个微不足道的变化。总之,传入“圆圈”的“符号”将按比例缩放符号的半径,与“z”坐标成比例——可能最适合连续变量。我会使用颜色('bg')作为离散变量/因子。

使用'symbols'的一种方法是调用你的绘图函数并传入type='n'来创建绘图对象但抑制绘制符号,以便你可以使用'symbols'函数来绘制它们。

为此,我不会推荐“cex”。'cex' 是文本大小和符号大小的比例因子,但它影响的这两个绘图元素中的哪一个取决于您何时将其传入 - 如果您通过 'par' 设置它,那么它会作用于出现的大部分文本在情节上;如果您在“绘图”函数中设置它,那么它会影响符号大小。

于 2010-04-07T16:07:12.890 回答
2

当然,只需使用cex

set.seed(42)
DF <- data.frame(x=1:10, y=rnorm(10)*10, z=runif(10)*3) 
with(DF, plot(x, y, cex=z))

这给了你不同的圆圈大小。颜色可以简单地是第四个维度。

于 2010-04-07T15:26:27.567 回答