I just came a cross this nice code that makes this scatter matrix plot:
我只是来了一个这个漂亮的代码,使这个散点矩阵图:
alt text http://addictedtor.free.fr/graphiques/graphiques/graph_137.png
alt text http://addictedtor.free.fr/graphiques/graphiques/graph_137.png
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).
并希望通过使点的大小/颜色(在下三角形中)根据该类型的多少选项发生不同(例如抖动可能给我的效果)将其实现为可能的比例变量(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)
2 个解决方案
#1
3
You can use 'symbols' (analogous to the methods 'lines', 'abline' et al.)
你可以使用'符号'(类似于方法'line','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', e.g., 'stars' = c(4, 3, 5, 1). Color is set with 'bg' and/or 'fg'.
使用“符号”可以设置符号大小,颜色和形状。通过传入每个符号大小的向量并将其绑定到“圆圈”,“正方形”,“矩形”或“星星”,例如“星星”= c(4,3, 5,1)。颜色设置为'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. 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. I would use color ('bg') for discrete variables/factors.
如果我理解你问题的第二部分,你想要合理地确定用于缩放图中符号的函数以有意义的方式实现。 “符号”功能根据“z”变量(或data.frame列等)中的值缩放(例如)圆的半径。在下面的行中,我将最大符号大小(半径)设置为1 / 3英寸 - 除最大值之外的每个符号的半径都小一些,通过该数据点的值与最大值的比率进行缩放。比那个比例是一个很好的选择吗?我不知道 - 在我看来,直径或特别是圆周可能会更好。无论如何,这是一个微不足道的变化。总而言之,传入“圆圈”的“符号”将按比例缩放符号的半径,与“z”坐标成比例 - 可能最适合连续变量。我会使用颜色('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',它创建绘图对象但禁止绘制符号,以便您可以使用下面的'symbols'函数绘制它们。
I would not recommend 'cex' for this purpose. '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; if you set it within the 'plot' function then it affects symbols size.
我不会为此目的推荐'cex'。 'cex'是文本大小和符号大小的缩放系数,但它影响的两个绘图元素中的哪一个取决于您何时传入它 - 如果您通过'par'设置它然后它会对出现的大部分文本起作用在情节上;如果你在'plot'函数中设置它,那么它会影响符号大小。
#2
2
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.
它为您提供不同的圆形尺寸。颜色可以简单地是第四个维度。
#1
3
You can use 'symbols' (analogous to the methods 'lines', 'abline' et al.)
你可以使用'符号'(类似于方法'line','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', e.g., 'stars' = c(4, 3, 5, 1). Color is set with 'bg' and/or 'fg'.
使用“符号”可以设置符号大小,颜色和形状。通过传入每个符号大小的向量并将其绑定到“圆圈”,“正方形”,“矩形”或“星星”,例如“星星”= c(4,3, 5,1)。颜色设置为'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. 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. I would use color ('bg') for discrete variables/factors.
如果我理解你问题的第二部分,你想要合理地确定用于缩放图中符号的函数以有意义的方式实现。 “符号”功能根据“z”变量(或data.frame列等)中的值缩放(例如)圆的半径。在下面的行中,我将最大符号大小(半径)设置为1 / 3英寸 - 除最大值之外的每个符号的半径都小一些,通过该数据点的值与最大值的比率进行缩放。比那个比例是一个很好的选择吗?我不知道 - 在我看来,直径或特别是圆周可能会更好。无论如何,这是一个微不足道的变化。总而言之,传入“圆圈”的“符号”将按比例缩放符号的半径,与“z”坐标成比例 - 可能最适合连续变量。我会使用颜色('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',它创建绘图对象但禁止绘制符号,以便您可以使用下面的'symbols'函数绘制它们。
I would not recommend 'cex' for this purpose. '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; if you set it within the 'plot' function then it affects symbols size.
我不会为此目的推荐'cex'。 'cex'是文本大小和符号大小的缩放系数,但它影响的两个绘图元素中的哪一个取决于您何时传入它 - 如果您通过'par'设置它然后它会对出现的大部分文本起作用在情节上;如果你在'plot'函数中设置它,那么它会影响符号大小。
#2
2
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.
它为您提供不同的圆形尺寸。颜色可以简单地是第四个维度。