(я полагаю, вы уже знаете, что нужно добавить 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)
Мы можем создать палитру, используя 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()
Используйте 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)