R 强制ggplot2使用手动指定的填充打印条形图?

R 强制ggplot2使用手动指定的填充打印条形图?,r,ggplot2,R,Ggplot2,数据: 数据1: 代码: CashSurDef首先,您省略了按平均值重新排序国家名称因子的代码,因此您的代码不会生成这些图 其次,在数据框中使用颜色名称对您没有帮助ggplot(…,aes(fill=…)将该列解释为区分组的因素。它指定自己的颜色,这就是为什么您需要使用scale\u fill\u manual(…)来实际设置所需颜色的原因 第三,在调用scale\u fill\u manual(…)时,不需要breaks=… 第四,这是您主要问题的答案,unique(as.character(

数据: 数据1:

代码:


CashSurDef首先,您省略了按平均值重新排序国家名称因子的代码,因此您的代码不会生成这些图

其次,在数据框中使用颜色名称对您没有帮助
ggplot(…,aes(fill=…)
将该列解释为区分组的因素。它指定自己的颜色,这就是为什么您需要使用
scale\u fill\u manual(…)
来实际设置所需颜色的原因

第三,在调用
scale\u fill\u manual(…)
时,不需要
breaks=…

第四,这是您主要问题的答案,
unique(as.character(df$colors))
根据颜色出现在
df
中的时间顺序返回颜色。在现金流量表中,
tan3
首先出现,在失业表中
grey
首先出现。解决这个问题的一种方法是更换电话

scale_fill_manual(breaks = df$Country.Name, values = unique(df$colour)))

df
替换为数据帧的名称。这将创建一个命名的颜色向量,其中颜色名称和颜色相同,例如

c(tan3="tan3",grey="grey",NA)
这将正确地关联颜色

最后,在我看来,这样做会更好(这里我使用
cash
作为数据帧的名称)

scale_fill_manual(breaks = df$Country.Name, values = unique(df$colour)))
scale_fill_manual(values = 
            as.character(setNames(unique(df$colour),unique(df$colour))))
c(tan3="tan3",grey="grey",NA)
...
ggplot(data=cash,aes(x=Country.Name, y=avg, 
                     fill=(ifelse(avg>0,"Positive","Negative"))))+
   geom_bar(stat="identity",position=position_dodge(),
            alpha=.75) +
   scale_fill_manual(values = c(Positive="grey",Negative="tan3"))
...