我目前正在使用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?
非常感谢!
答案 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)
如果你想要一个ggplot解决方案,请探索GGally:ggpairs
可能性(计算速度慢得多):
library(GGally)
ggpairs(data=d, mapping = aes(color = Group1, shape = Group2),
columns = 1:4, legend = c(2,1))