使用变量赋值更改ggpair中的默认颜色

des4xlb0  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(136)

我有代码来创建一个散点图矩阵,其中包含我希望基于数据集中的分类变量着色的密度曲线。我需要它来匹配特定的颜色,但似乎无法从默认值更新颜色。
下面是一个例子,我试图用一个众所周知的数据集来实现这个概念(因为我的数据包含敏感信息,不能发布)。
例如,如果我想用R中的crabs数据集创建这个,我会给分类变量分配一个颜色和符号,如:

species <- ifelse(crabs$sp == "B", "blue", "orange")
gender <- ifelse(crabs$sex == "M", "O", "+")

然后,我希望在矩阵和密度图中使用完全相同的符号和颜色:

ggpairs(crabs, columns=4:8, aes(color=species, shape=gender),
        lower=list(continuous="smooth"), diag=list(continuous="densityDiag"))

但是,这会输出以下内容:

But the coral color should be blue, and the teal color should be true orange.
cnjp1d6j

cnjp1d6j1#

您可能需要使用scale_color_manual()和scale_fill_manual()为每个组指定颜色。此外,颜色值必须与类别数相同,而不是与数据长度相同:

species <- ifelse(crabs$sp == "B", "blue", "orange")
gender <- ifelse(crabs$sex == "M", "O", "+")

ggpairs(crabs, columns=4:8, aes(colour=species, shape=gender),
lower=list(continuous="smooth"), diag=list(continuous="densityDiag"))+
scale_color_manual(values = unique(species))+
scale_fill_manual(values = unique(species))

8zzbczxx

8zzbczxx2#

更改ggpair的默认颜色并不容易,这里的问题特别是右上角的关联文本,这意味着scale_colour_identity()不起作用。您可以使用手动缩放来定义颜色:

species <- ifelse(crabs$sp == "B", "blue", "orange")
gender <- ifelse(crabs$sex == "M", "O", "+")

ggpairs(crabs, columns=4:8, aes(color=species,
                                shape=gender),
        lower=list(continuous="smooth"),
        diag=list(continuous="densityDiag")) +
  scale_fill_manual(values = c("blue", "orange")) +
  scale_colour_manual(values = c("blue", "orange"))

在这里,我建议你把species中的值称为更有意义的东西,以便在相关图中得到更好的标签。我还建议你为aes()中的颜色传入一列数据,而不是一个外部向量。你可以为scale_shape_manual()中的点做类似的事情。

相关问题