使用许多变化的变量为 ggplot 分配稳定的颜色

问题描述

这是我在这里的第一个问题,我是 R 的初学者。

我看过类似的问题,包括:

第一个,“将稳定的颜色分配给 ggplot 时”......等等,真的很接近我想要做的,但不完全是。让我以 mtcars 数据集为例进行说明。

假设我正在为马自达准备一些数字。每次我的观众在人偶上看到马自达 RX4 时,我都希望它是粉红色的,而且如果人偶中没有马自达(也许我只是在看某个特定人偶的竞争对手)我不想要任何其他汽车显示为粉红色。基本上,我想告诉 R:“如果马自达 RX4 在数据集中,则将其设为粉红色。如果马自达 RX4 不在数据集中,则根本不要使用粉红色。”

这是我的代码现在所处的位置(感谢我上面链接的问题):

data <- mtcars %>% 
 rownames_to_column() %>% 
 rowid_to_column() %>% 
 mutate(rowname = reorder(rowname,mpg)) 
fullplot <- data %>% 
 ggplot(aes(rowname,mpg,fill = rowname,color = rowname)) + 
 geom_col()+ 
 coord_flip()
fullplot

fullplot 产生以下结果: full barchart,all cars

然后,我用两辆马自达做了一个缩小版:

reducedplot <- fullplot %+% droplevels(filter(data,rowid < 3))

最后,包含两辆马自达和另一辆车的第三个版本:

reducedplot2 <- fullplot %+% droplevels(filter(data,rowid < 4))

现在我已经建立了我的三个示例数字,我已经为我感兴趣的东西分配了颜色,我称之为mazda_constants:

mazda_constants <- c("Mazda RX4" = "hotpink1","Mazda RX4 Wag" = "deeppink3")
reducedplot + 
 scale_fill_manual(values = mazda_constants) +
 scale_color_manual(values = mazda_constants)

我的问题是,这仅在我使用仅包含马自达的简化图时才有效。如果我尝试将其应用于 fullplot 甚至 reduceplot2,则会出现此错误:

reducedplot2 +
scale_fill_manual(values + mazda_constants) +
scale_color_manual(values = mazda_constants)

错误:手动刻度值不足。需要 3 个,但只提供了 2 个。

我理解为什么会发生这种情况,并且我理解 R 正在按照我的指示执行操作,但是我找不到解决方法。无论如何,有没有办法将粉红色分配给马自达?

请注意,我上传的图片不能超过一张——可能是因为我的新会员身份。我希望代码足够清晰以进行解释。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)