在R中使用两个组的散点图使用不同的颜色/形状

时间:2017-05-07 14:32:03

标签: r matrix scatter-plot lattice

我目前正在使用R中的晶格包创建一个散点图矩阵,使用splom函数。我的数据集中有两个组,标记在两个不同的列中:

PC1 PC2 PC3 Group1 Group2
1   2   3   A      X
1   2   3   B      X
1   2   3   C      X
1   2   3   D      X
1   2   3   A      Y
1   2   3   B      Y
1   2   3   C      Y
1   2   3   D      Y
1   2   3   A      Z
1   2   3   B      Z
1   2   3   C      Z
1   2   3   D      Z

我可以使用以下代码让splom函数为其中一个组使用不同的颜色和形状,但不能同时使用两者:

splom(~pcVT[,1:3], data = pcVT, xlab = NULL, groups = Group1, pch = c(1,2,3),
col = super.sym$col[1:3], panel = panel.superpose, 
key = list(points = list(pch = c(1,2,3),col = super.sym$col[1:3]),text = list(mylabels)))

我怎么能让它使用两组来着色和形状 - 即,我希望Group1基于颜色绘制图形,而Group2基于形状绘制图形。或者,如果splom不能这样做,有没有一种很好的方法来使用gpplot2?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您的示例不可重现,您的数据集不太可用。 我做了另一个......

以下是基础图的解决方案:

d <- as.data.frame(princomp(iris[,1:4])$scores)
d$Group1 <- iris$Species
d$Group2 <- factor(sample(c("A","B","C"), 150, replace = TRUE))

mycols <- c("forestgreen", "gold", "dodgerblue")

x11(width = 16/2.54, height = 12/2.54)
pairs(d[,1:4], oma=c(3,3,6,3), 
      col = mycols[as.numeric(d$Group1)], pch = c(1:3)[as.numeric(d$Group2)], gap = 0)
legend("top", col = mycols, legend = levels(d$Group1), pch = 20, 
       xpd = NA, ncol = 3, bty = "n", inset = 0.01, pt.cex = 1.5)
legend("top", pch = 1:3, legend = levels(d$Group2), col = "black",
       xpd = NA, ncol = 3, bty = "n", inset = -0.03)

enter image description here

如果你想要一个ggplot解决方案,请探索GGally:ggpairs可能性(计算速度慢得多):

library(GGally)
ggpairs(data=d, mapping = aes(color = Group1, shape = Group2), 
        columns = 1:4, legend = c(2,1))

enter image description here