代码:
CashSurDef <- ggplot(data=wdiSSA_CashSurDef.df,aes(x=Country.Name, y=avg, fill=colour))
CashSurDef <- CashSurDef + geom_bar(stat="identity",position=position_dodge(),alpha=.75) + theme_bw()
CashSurDef <- CashSurDef + scale_fill_manual(breaks = wdiSSA_CashSurDef.df$Country.Name,
values = unique(as.character(wdiSSA_CashSurDef.df$colour)))
CashSurDef <- CashSurDef + scale_y_continuous(breaks=seq(-25,25,2.5)) + geom_hline(yintercept=0, linetype="dashed", colour="blue", size=1.1)
CashSurDef <- CashSurDef + labs(title="Cash surplus/deficit (% of GDP) (Average 2005-2012)", y="", x="Country") + coord_flip()
CashSurDef <- CashSurDef + theme(plot.title=element_text(face="bold", size=rel(2), hjust=0.5, vjust=1.5),
axis.text.x=element_text(color="black", size=rel(1.8), hjust=0.5, vjust=0.5),
axis.text.y=element_text(color="black", size=rel(1.8), hjust=1),
axis.title.x=element_text(face="bold", color="black", size=rel(1.6), hjust=0.5, vjust=0.2),
axis.title.y=element_text(color="black", size=rel(1.6), hjust=0.5, vjust=0.2),
strip.text=element_text(face="bold", size=rel(1.8)),
legend.text=element_text(face="bold", size=rel(1.25)),
legend.title=element_blank(),
legend.position="bottom")
CashSurDef
代码1:
Unemploy <- ggplot(data=wdiSSA_Unemploy.df,aes(x=Country.Name, y=avg, fill=colour))
Unemploy <- Unemploy + geom_bar(stat="identity",position=position_dodge(),alpha=.75) + theme_bw()
Unemploy <- Unemploy + scale_fill_manual(breaks = wdiSSA_Unemploy.df$Country.Name,
values = unique(as.character(wdiSSA_Unemploy.df$colour)))
Unemploy <- Unemploy + scale_y_continuous(breaks=seq(0,35,5)) + geom_hline(yintercept=5, linetype="dashed", colour="blue", size=1.1)
Unemploy <- Unemploy + labs(title="Average unemployment rate (2005-2012), total (%)", y="", x="Country") + coord_flip()
Unemploy <- Unemploy + theme(plot.title=element_text(face="bold", size=rel(2), hjust=0.5, vjust=1.5),
axis.text.x=element_text(color="black", size=rel(1.8), hjust=0.5, vjust=0.5),
axis.text.y=element_text(color="black", size=rel(1.8), hjust=1),
axis.title.x=element_text(face="bold", color="black", size=rel(1.6), hjust=0.5, vjust=0.2),
axis.title.y=element_text(color="black", size=rel(1.6), hjust=0.5, vjust=0.2),
strip.text=element_text(face="bold", size=rel(1.8)),
legend.text=element_text(face="bold", size=rel(1.25)),
legend.title=element_blank(),
legend.position="bottom")
Unemploy
结果: 结果1:
问题:我正在尝试绘制数据并使用由列&#34;颜色&#34;捕获的预定义填充。在&#34; Data&#34;中,它是根据条件语句添加的:if(avg>0, tan3, grey)
。当我绘制时,颜色填充会反过来,如图中所示&#34;结果&#34;。我对我的数据中的其他变量应用了相同的方法(参见&#34; Data1&#34;,&#34; Result1&#34;),它完美地运行。有什么想法,建议吗?
干杯
答案 0 :(得分:2)
首先,您省略了通过avg重新排序国家/地区名称因子的代码,因此您的代码不会生成这些图。
其次,在数据框中使用颜色名称对您没有帮助。 ggplot(...,aes(fill=...))
将该列解释为区分组的因素。它分配了自己的颜色,这就是为什么你需要使用scale_fill_manual(...)
来实际设置你想要的颜色。
第三,在breaks=...
的来电中,您不需要scale_fill_manual(...)
。
第四,这是您的主要问题的答案,unique(as.character(df$colours))
根据它们在df
中的显示时间返回订单中的颜色。在现金流量表中,首先显示tan3
,首先出现在失业表grey
中。解决这个问题的一种方法是更换你的电话
scale_fill_manual(breaks = df$Country.Name, values = unique(df$colour)))
带
scale_fill_manual(values =
as.character(setNames(unique(df$colour),unique(df$colour))))
将df
替换为数据框的名称。这将创建一个命名的矢量颜色,其中颜色名称和颜色相同,例如。
c(tan3="tan3",grey="grey",NA)
将正确关联颜色。
最后,IMO你做这样的事情要好得多(我在这里使用cash
作为数据框的名称)
...
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"))
...