简体   繁体   English

不同点大小的相关散布矩阵图(以R为单位)

[英]Correlation Scatter-matrix plot with different point size (in R)

I just came a cross this nice code that makes this scatter matrix plot: 我刚刚遇到了一个很好的代码 ,它使散点图如下所示:

替代文字
(source: free.fr ) (来源: free.fr

And wanted to implement it to a likret scale variables (integers of 1 to 5) by making the dot's sizes/colors (in the lower triangle) differ according to how many options of that type occurs (like the effect the jitter might have given me). 并想通过使点的大小/颜色(在下部三角形中)根据出现的那种类型的选项数量不同(例如抖动可能给我带来的影响),将其实现为likret比例变量(1到5的整数) )。

Any idea on how to do this on the base plotting mechanism ? 关于如何在基本绘图机制上执行此操作的任何想法?

Update: 更新:

I made the following function, but don't know how to have the scale of the dots always be "good", what do you think ? 我做了以下功能,但不知道如何使点的比例始终为“良好”,您怎么看?

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)

You can use ' symbols ' (analogous to the methods 'lines', 'abline' et al.) 您可以使用' 符号 '(类似于方法'lines','abline'等)。

This method will give you fine-grained control over both symbols size and color in a single line of code. 此方法将使您可以在一行代码中对符号大小和颜色进行细粒度控制。

Using 'symbols' you can set the symbol size, color, and shape. 使用“符号”可以设置符号的大小,颜色和形状。 Shape and size are set by passing in a vector for the size of each symbol and binding it to either 'circles', 'squares', 'rectangles', or 'stars', eg, 'stars' = c(4, 3, 5, 1). 通过传入每个符号大小的向量并将其绑定到“圆”,“正方形”,“矩形”或“星”上来设置形状和大小,例如,“星” = c(4,3, 5、1)。 Color is set with 'bg' and/or 'fg'. 颜色设置为“ bg”和/或“ fg”。

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

If i understand the second part of your question, you want to be reasonably sure that the function you use to scale the symbols in your plot does so in a meaningful way. 如果我理解问题的第二部分,则需要合理地确定用于缩放绘图中符号的函数确实有意义。 The 'symbols' function scales (for instance) the radii of circles based on values in a 'z' variable (or data.frame column, etc.) In the line below, I set the max symbol size (radius) as 1/3 inches--every symbol except for the largest has a radius some fraction smaller, scaled by the ratio of the value of that dat point over the largest value. 'symbols'函数根据'z'变量(或data.frame列等)中的值缩放(例如)圆的半径 。在下面的行中,我将最大符号大小(半径)设置为1 / 3英寸-除最大符号外的每个符号的半径都小一些,以该点的值与最大值之比进行缩放。 than that one in proportion to Is this a good choice? 比那一个比例好吗?这是一个不错的选择吗? I don't know--it seems to me that diameter or particularly circumference might be better. 我不知道-在我看来,直径或特别是圆周可能会更好。 In any event, that's a trivial change. 无论如何,这都是微不足道的变化。 In sum, 'symbols' with 'circles' passed in will scale the radii of the symbols in proportion to the 'z' coordinate--probably best suited for continuous variables. 总之,带有“圆”的“符号”将与“ z”坐标成比例地缩放符号的半径-可能最适合连续变量。 I would use color ('bg') for discrete variables/factors. 我将颜色('bg')用于离散变量/因数。

One way to use 'symbols' is to call your plot function and pass in type='n' which creates the plot object but suppresses drawing the symbols so that you can draw them with the 'symbols' function next. 一种使用“符号”的方法是调用绘图函数,并传入type ='n',它创建绘图对象,但禁止绘制符号,以便您接下来可以使用“符号”功能对其进行绘制。

I would not recommend 'cex' for this purpose. 我不建议为此目的使用“ cex”。 'cex' is a scaling factor for both text size and symbols size, but which of those two plot elements it affects depends on when you pass it in--if you set it via 'par' then it acts on most of the text appearing on the plot; 'cex'是文本大小和符号大小的比例因子,但是它会影响这两个绘图元素中的哪一个取决于您何时传入它-如果您通过'par'进行设置,则它将作用于大多数出现的文本在情节上; if you set it within the 'plot' function then it affects symbols size. 如果在“绘图”功能中进行设置,则会影响符号大小。

Sure, just use cex : 当然,只需使用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))

which gives you varying circle sizes. 这使您可以改变圆的大小。 Color can simply be a fourth dimension. 颜色可以只是第四维度。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM