我正在尝试绘制散点图矩阵,因为我有很多变量可以相互比较。
但是,我在使用 R 基本图的数据点着色方面遇到问题。
使用 GGplot2 一切似乎都很好,但是当我转向基本 R 时,颜色编码不再起作用。我知道可以使用pairs
,但我仍然不知道如何对代码进行着色。
另外,我有 NA 的数据,当我删除这些数据时,颜色编码再次发生变化,使得两个基本 R 图不具有可比性。我认为一定有一些因素,但我无法解决。
这是一个工作示例,其中包含一些示例。
编辑:我仅使用 ggplot 图作为引用来检查散点图矩阵中“单元格”之一的颜色。
library("scales")
library("ggplot2")
# load data and subset to simplify plotting
part_iris <- iris[c(1:10, 51:60, 101:110), ]
# select params to plot
params_to_plot <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
# set factors
part_iris$Species <- factor(part_iris$Species, levels=c("setosa", "virginica", "versicolor"))
# set seed to transform some (same) data into NA's
set.seed(131)
# transform into NA's
part_iris[sample(1:nrow(part_iris), 5), "Sepal.Length"] <- NA
part_iris[sample(1:nrow(part_iris), 5), "Sepal.Width"] <- NA
part_iris[sample(1:nrow(part_iris), 5), "Petal.Length"] <- NA
part_iris[sample(1:nrow(part_iris), 5), "Petal.Width"] <- NA
# create palette for each datapoint
species_palette <- hue_pal()(3)
names(species_palette) <- c("setosa", "viriginica", "versicolor")
# plot
dev.new()
ggplot(part_iris, aes(x=Sepal.Length, y=Petal.Width, color=Species)) + geom_point(size=5)
dev.new()
plot(part_iris[, params_to_plot], pch=21, cex=3, col="black", bg=species_palette, cex.axis=2, font=2)
legend(x="topright", legend=names(species_palette), col=species_palette, pch=21, xpd=T, ncol=3)
# now remove nas
no_nas_iris <- part_iris[complete.cases(part_iris), ]
# plot again
dev.new()
ggplot(no_nas_iris, aes(x=Sepal.Length, y=Petal.Width, color=Species)) + geom_point(size=5)
dev.new()
plot(no_nas_iris[, params_to_plot], pch=21, cex=3, col="black", bg=species_palette, cex.axis=2, font=2)
legend(x="topright", legend=names(species_palette), col=species_palette, pch=21, xpd=T, ncol=3)
最佳答案
当您在基本 R 图中指定 col
或 bg
时,您需要提供与每个点的颜色相对应的向量,而不是每个级别的颜色。
所以如果你使用:
bg=species_palette[part_iris$Species]
而不是 bg=species_palette
您将得到您期望的行为。如果您只使用调色板矢量,它只会沿着数据集循环利用它。所以(还有一些其他的摆弄以使图例正确):
pairs(part_iris[, params_to_plot],
pch=21, cex=3,
col="black",
bg=species_palette[part_iris$Species],
cex.axis=2,
font=2,
oma=c(3,3,10,3)
)
legend(x = "topright",
legend=names(species_palette),
pt.bg=species_palette,
col="black",
pt.cex=2,
text.width = .1,
pch=21,
xpd=T,
ncol=3)
关于r - 如何根据R基矩阵散点图中的因子对数据进行着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77818784/