各图实际上一致的可变颜色

时间:2018-09-03 00:01:52

标签: r ggplot2 plot pca

在使用factoextra库绘制PCA结果时,我试图使绘图保持一致的可变颜色。下面的可复制示例:

data("decathlon2")
df <- decathlon2[1:23, 1:10]
library("FactoMineR")
res.pca <- PCA(df,  graph = FALSE)
get_eig(res.pca)

# Contributions of variables to PC1
fviz_contrib(res.pca, choice = "var", axes = 1, top = 10)
# Contributions of variables to PC2
fviz_contrib(res.pca, choice = "var", axes = 2, top = 10)

我希望PC1和PC2的绘图具有10种颜色的调色板,这在各个绘图上是相同的(即x100m都将是红色的)。但是,在我的实际数据集中,我有15个解释变量,这些变量似乎超出了颜色调制器的限制,因此存在2个问题:

  1. 如何保持一致的配色方案
  2. 能够使用15种颜色

谢谢。

1 个答案:

答案 0 :(得分:2)

(我假设您已经知道需要将fill = "name"添加到fviz_contrib()调用中;否则,小节将默认为fill = "steelblue"。)

您可以手动定义调色板,以便每个变量对应相同的颜色。

要使用问题中的示例模拟问题,假设我们只想显示前7个(总共10个变量):

# naive way with 7-color palette applied to different variables
fviz_contrib(res.pca, choice = "var", fill = "name", color = "black", axes = 1, top = 7)
fviz_contrib(res.pca, choice = "var", fill = "name", color = "black", axes = 2, top = 7)

plot1

我们可以使用hue_pal()包中的scales为10种不同的颜色(df的每一列创建一个调色板)。

(您还可以使用基本rainbow()软件包中的heat.colors() / grDevices /等调色板。尽管如此,我发现它们的默认颜色范围还是很深的,对于条形图来说,它会显得过于刺眼。)

mypalette <- scales::hue_pal()(ncol(df))
names(mypalette) <- colnames(df)

# optional: see what each color corresponds to
ggplot(data.frame(x = names(mypalette),
                  y = 1,
                  fill = mypalette)) +
  geom_tile(aes(x = x, y = y, fill = fill), color = "black") +
  scale_fill_identity() +
  coord_equal()

palette

在每个图表上使用scale_fill_manual()和自定义调色板:

fviz_contrib(res.pca, choice = "var", fill = "name", color = "black", axes = 1, top = 7) +
  scale_fill_manual(values = mypalette)
fviz_contrib(res.pca, choice = "var", fill = "name", color = "black", axes = 2, top = 7) +
  scale_fill_manual(values = mypalette)

plot2