问题描述
我正在尝试更改下图中的9个状态的颜色。这些州是采矿最高的州,我希望它们在下面的图像中脱颖而出。作为最简单的步骤,我可能需要修改数据框。还有其他想法吗?
ggplot(data = media_impact_by_state) +
#geom_hline(yintercept=0,linetype="dashed",color = "red") +
geom_bar(aes(x= reorder(GeoName,trustclimscisstOppose - mean(trustclimscisstOppose)),y= CO2limitsOppose-mean(CO2limitsOppose),fill = "fill1"),stat = 'identity') +
geom_point(aes(x = GeoName,y = trustclimscisstOppose - mean(trustclimscisstOppose),color = "dot1"),size=3) +
scale_color_manual(values = c("black"),label = "distrust of Scientists",name = "Mean Deviation") +
scale_fill_manual(values = c(fill1 = "darkorange1",fill2 = "blue"),labels = c(fill1 = "Oppose Limits to Co2 Emissions",fill2 = "poop"),name = "Mean Deviation") +
labs(x = "State",y = "(%)",title = "distrust of Scientists") +
theme(axis.text.x = element_text(angle = 90,vjust = 0.5,hjust=1,size=12),axis.text.y = element_text(size=14),axis.title.y = element_text(size=16),axis.title.x = element_text(size=16),plot.title = element_text(size=16,hjust=0.5))
解决方法
如果不查看数据的子集,将很难提供指导。要提供一些建议,请先尝试使用ifelse()
修改相应的列(即变量),然后再将其提供给fill
美观。确保将其包装在aes()
调用中。您的图例标题为“平均偏差”,应适当地分为两类。然后,只需根据需要修改scale_fill_manual()
内的颜色。
ggplot(data = media_impact_by_state) +
geom_bar(aes(x = reorder(GeoName,trustclimsciSSTOppose - mean(trustclimsciSSTOppose)),y = CO2limitsOppose - mean(CO2limitsOppose),fill = factor(ifelse(GeoName %in% c(...),"Top 20","Bottom 80"))),# index the states
stat = 'identity') +
geom_point(aes(x = GeoName,y = trustclimsciSSTOppose - mean(trustclimsciSSTOppose),color = "dot1"),size = 3) +
scale_color_manual(name = "Mean Deviation"
values = c("black"),labels = "Distrust of Scientists") +
scale_fill_manual(name = "Mean Deviation",values = c("darkorange1",# supply the vector of colors
"blue"),labels = c("Oppose (Top 20)",# supply the vector of labels
"Oppose (Bottom 80)") +
labs(x = "State",y = "(%)",title = "Distrust of Scientists") +
theme(
axis.text.x = element_text(angle = 90,vjust = 0.5,hjust = 1,size = 12),axis.text.y = element_text(size = 14),axis.title.y = element_text(size = 16),axis.title.x = element_text(size = 16),plot.title = element_text(size = 16,hjust = 0.5)
)
但是,如果您想通过任何其他挖掘输出的任意措施来标记状态的前20%,那么也许您应该考虑使用R的泛型函数之一修改现有数据框。我不确定您使用哪种标准来确定“最高”采矿状态,但这是您要决定的。例如,尝试提前创建变量,将其命名为fill_col
,然后在fill
调用中将其传递给aes()
。这是预处理数据的方法:
media_impact_by_state %>%
arrange(GeoName,desc(mining_output)) %>% # order in descending order by mining output
mutate(fill_col = mining_output > quantile(mining_output,.8)) # flag the top 20 percent
最后,手动键入要突出显示的所有状态没有什么问题,但是如果您拥有50多个州(或者如果包含超过50个州,则为51个州)可能会变得笨拙。哥伦比亚)。
我希望这会有所帮助!