r - 如何根据R基矩阵散点图中的因子对数据进行着色?

标签 r plot

我正在尝试绘制散点图矩阵,因为我有很多变量可以相互比较。

但是,我在使用 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 图中指定 colbg 时,您需要提供与每个点的颜色相对应的向量,而不是每个级别的颜色。

所以如果你使用:

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)

enter image description here

关于r - 如何根据R基矩阵散点图中的因子对数据进行着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77818784/

相关文章:

r - 如何在 R 中添加没有维度的行名

r - ggline有2种美学

python - 如何同时标记直方图和函数?

python - 为来自矩阵一列的每个线图创建图例条目

javascript - D3.js - 绘制时间序列数据 - 从 JSON 格式化 x 轴

r - 有没有办法防止在输入框中输入文本时触发observeEvent()?

r - 在 r 中从宽到长的复杂 reshape

r - 使用多个条件使用 dplyr 进行变异

matlab - 在 Matlab 中绘制反色?

matlab - 如何使用matlab在3D大数据散点图中用不同颜色标记一个点(我有x,y,z)?