本节书摘来异步社区《R数据可视化手册》一书中的第3章,第3.4节,作者:【美】Winston Chang,更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.4 条形图着色
问题
如何将条形图中的条形设定为不同的颜色?
方法
将合适的变量映射到填充色(fill)上即可。
这里以数据集uspopchange为例。该数据集描述了美国各州人口自2000年到2010年的变化情况。我们选取出人口增长最快的十个州进行绘图。图中会根据地区信息(东北部、南部、中北部、西部)对条形进行着色。
首先,选取出人口增长最快的十个州:
library(gcookbook) #为了使用数据
upc <- subset(uspopchange, rank(Change)>40)
upc
State Abb Region Change
Arizona AZ West 24.6
Colorado CO West 16.9
Florida FL South 17.6
Georgia GA South 18.3
Idaho ID West 21.1
Nevada NV West 35.1
North Carolina NC South 18.5
South Carolina SC South 15.3
Texas TX South 20.6
Utah UT West 23.8
接下来,将Region映射到fill并绘制条形图(见图3-9):
ggplot(upc, aes(x=Abb, y=Change, fill=Region)) + geom_bar(stat="identity")
讨论
条形图的默认颜色不太吸引眼球,因此,可能需要借助函数scale_fill_brewer()或scale_fill_manual()重新设定图形颜色。这里我们调用后者。我们通过把参数指定为colour="black"将条形的边框线设定为黑色(见图3-10)。注意:颜色的映射设定是在aes()内部完成的,而颜色的重新设定是在aes()外部完成的:
ggplot(upc, aes(x=reorder(Abb, Change), y=Change, fill=Region)) +
geom_bar(stat="identity", colour="black") +
scale_fill_manual(values=c("#669933","#FFCC66")) +
xlab("State")
本例用到了reorder()函数。在本例中,根据条形图的高度进行排序比按照字母顺序对分类变量排序更有意义。
另见
更多关于使用reorder()函数将因子根据另一个变量重新水平排序的内容,可参见15.9节。
更多关于图形着色的内容,参见第12章。