如何根据格子图中的列定义 pch 和颜色
How to define pch and color based on columns in lattice plot
我正在制作格子图,我想使用一列中的值定义 pch,使用另一列中的值定义点的颜色。类似于:
xyplot(mpg ~ wt | cyl,
data=mtcars,
col = gear,
pch = carb)
第二个和第三个面板中有独特的 pch 点,但这些点仅在地块内是唯一的,而不是在所有地块中(它们应该是)。如果您使用以下代码,您可以看到这一点:
xyplot(mpg ~ wt | cyl,
data=mtcars,
groups = carb
)
这个图对于一个组来说看起来很棒,但如果您尝试调用两个组,它只是采用这两个变量的独特组合并将它们绘制为独特的颜色。
导致此解决方案和下面作为答案提供的问题的问题是,并非每个组的每个值都出现在每个面板中,而且它们几乎从不以相同的顺序排列。我的实际数据文件非常大,无法解决这个问题。如果我可以只使用列中的值来实际定义整个绘图的颜色或 pch ,而不仅仅是每个面板,那将是最好的。 R 只是假设每个面板中新值的顺序应该定义 pch 或颜色的变化。
这是你想要的吗?
mypch <- 1:6
mycol <- 1:3
with(mtcars,
xyplot(mpg ~ wt | cyl,
panel = function(x, y, ..., groups, subscripts) {
pch <- mypch[factor(carb[subscripts])]
col <- mycol[factor(gear[subscripts])]
grp <- c(gear,carb)
panel.xyplot(x, y, pch = pch, col = col)
}
) )
对@LocoGris 给出的答案进行了小幅修改。
xyplot(mpg ~ wt | cyl,
panel = function(x, y, ..., groups, subscripts) {
pch <- mypch[factor(carb)[subscripts]]
col <- mycol[factor(gear)[subscripts]]
grp <- c(gear,carb)
panel.xyplot(x, y, pch = pch, col = col)
}
)
这显然是一个实际的解决方案,它对数据框的排序很稳健。这个答案是由另一个论坛上的用户提供的。谢谢你,彼得·朗菲尔德!
感谢 r-help 电子邮件列表,这是另一个解决方案:
xyplot(mpg ~wt|cyl, data = mtcars,
col = mtcars$gear,
pch = mtcars$carb,
panel = function(x,y, subscripts, col, pch,...)
{
panel.xyplot(x,y, col = col[subscripts], pch = pch[subscripts] )
}
)
感谢 Bert Gunter 的帮助!
我正在制作格子图,我想使用一列中的值定义 pch,使用另一列中的值定义点的颜色。类似于:
xyplot(mpg ~ wt | cyl,
data=mtcars,
col = gear,
pch = carb)
第二个和第三个面板中有独特的 pch 点,但这些点仅在地块内是唯一的,而不是在所有地块中(它们应该是)。如果您使用以下代码,您可以看到这一点:
xyplot(mpg ~ wt | cyl,
data=mtcars,
groups = carb
)
这个图对于一个组来说看起来很棒,但如果您尝试调用两个组,它只是采用这两个变量的独特组合并将它们绘制为独特的颜色。
导致此解决方案和下面作为答案提供的问题的问题是,并非每个组的每个值都出现在每个面板中,而且它们几乎从不以相同的顺序排列。我的实际数据文件非常大,无法解决这个问题。如果我可以只使用列中的值来实际定义整个绘图的颜色或 pch ,而不仅仅是每个面板,那将是最好的。 R 只是假设每个面板中新值的顺序应该定义 pch 或颜色的变化。
这是你想要的吗?
mypch <- 1:6
mycol <- 1:3
with(mtcars,
xyplot(mpg ~ wt | cyl,
panel = function(x, y, ..., groups, subscripts) {
pch <- mypch[factor(carb[subscripts])]
col <- mycol[factor(gear[subscripts])]
grp <- c(gear,carb)
panel.xyplot(x, y, pch = pch, col = col)
}
) )
对@LocoGris 给出的答案进行了小幅修改。
xyplot(mpg ~ wt | cyl,
panel = function(x, y, ..., groups, subscripts) {
pch <- mypch[factor(carb)[subscripts]]
col <- mycol[factor(gear)[subscripts]]
grp <- c(gear,carb)
panel.xyplot(x, y, pch = pch, col = col)
}
)
这显然是一个实际的解决方案,它对数据框的排序很稳健。这个答案是由另一个论坛上的用户提供的。谢谢你,彼得·朗菲尔德!
感谢 r-help 电子邮件列表,这是另一个解决方案:
xyplot(mpg ~wt|cyl, data = mtcars,
col = mtcars$gear,
pch = mtcars$carb,
panel = function(x,y, subscripts, col, pch,...)
{
panel.xyplot(x,y, col = col[subscripts], pch = pch[subscripts] )
}
)
感谢 Bert Gunter 的帮助!