画决策树的时候用了igraph包,由于基础薄弱加后天努力不足,所以痛苦万分。ggplot一直是我十分钟爱于做2D图形展示的工具,由于treemapify的加入,我也可以有层次的展示我的原始数据啦~真的是目之所及就可以有层次哦~
好了,先把准备工作做好吧!
一、该有的包先装上,比如说ggplot2、treemapify、RColorBrewer等。补充一点,关于treemapify包的安装,我用了
install.packages("treemapify")
devtools::install_github("wilkox/treemapify")
这两种方法都不行!所以,就直接去官网下载它的Zip包,把它解压到我R的library里直接加载了。链接在此:https://github.com/wilkox/treemapify。在右边绿色区 域“clone or download”处哈~还有一种不用解压直接选选选从本地目录安装加载程序包的方法:utils:::menuInstallLocal(),此法,就不要把下载好的压缩包解压了哈~
Ok,包包安装好了,就进入实战吧~
二、实际演练
其实也不太实际,至少数据给的还挺理想的——因为用的是treemapify的内置数据啊~知道内置数据怎么用吧,比如说,你想知道treemapify包里的内置数据集有哪 些,用data()函数来查看;然后,你想用里面的其中一个数据集,用data(X)来加载就好啦~本案例里,用的就是treemapify包的里G20数据。
data(G20) is ok !
then , 用str()函数看下我们有哪些指标,并且它们都是些啥类型吧~
我用 Unique_information <- apply(G20,2,unique) 这条命令主要是不想看完整个数据框,因为从上图可以看到各个指标里面的变量不一样,用apply函数按列进行 unique需求操作,就可以看完整个数据框的所有指标的unique情况啦。unique不用细说吧,不懂的可以help(unique) or ?unique 。
现在我们知道,这个数据集里8个地区、20个国家、20条gdp数据、20条人类发展指数(hdi)、各地区的经济发展程度以及南北半球与否。那你想画个什么图 呢?根据gdp大小来画个热力图,把20个地区的名字填进去?好啊,来!
我是女生呢,所以喜欢粉色~这个图的代码就是这样啦:
ggplot(G20, aes(area = gdp_mil_usd,label=country)) + geom_treemap(color="black",fill="pink") +
geom_treemap_text( colour = "black", place = "centre",grow = TRUE)
ggplot里的G20、area和label就不说了,函数geom_treemap只有装上了treemapify包在ggplot2里才会出现的。可能有的人不喜欢粉色,那就把pink自己改了吧。 还可以把函数变为geom_treemap(aes(fill=X),color="black"),其中,X就是各指标名字啦,比如hdi啦,econ_classification啦,那那些矩形里的填充色就会根据指标里面 变量的不同而不同咯。有图有真相:
其实这样的画图已经达到了一定的目的,至少你可以比较各个国家的一些基本情况。我的area是根据gdp来的,gdp越大,矩形的区域自然越大。但是我们身为中国 人,经历过gdp高速增长的几个时期,但心里对于“gdp越大,不代表国家层次越高”这个概念是十分理解并且理解得还算透彻的。所以,再加一个指标啊,就是上图。中国 的gdp面积这么大,但它是发展中国家。
另外,第一个指标:region没用到啊。经济的发不发达,跟它所处的地区有啥关系不?把八个区加进来,再看看这八个区下20个国家的基本情况,是不是很有层次 感呢?感谢treemapify包啦,设置subgroup参数(一个类别型变量),函数内部可以自动完成亚群的变量聚合计算,并在图形成用框线显示出次级类别大小的规模。详 情见下图:
相应代码在这里:
ggplot(G20, aes(area = gdp_mil_usd,fill=hdi, label = country,subgroup = region))+
geom_treemap() + geom_treemap_subgroup_border(color="black") +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.3, colour ="black") +
geom_treemap_text(colour = "darkblue", place = "topleft", reflow = T,alpha=.8) +
scale_fill_distiller(palette="Greens")
绿色看起来也不错,其实是palette里没有找到关于Pink、Pinks、pink的设置。alpha是透明度设置,越小越透明就越不显眼。这个包还有一个很人性化的东西: reflow参数用于控制标签是否自适应矩形块大小,若按照原始大小超过矩形块,则会自动换行显示。在你们计算机上实现的时候,可以方大图看,那些在我这张图上自动 换行的,在你们那就直直的过去了。place是text的位置设置,常用的位置就是“centre”、“topleft/topright”、“bottomleft/bottomright”啦~
这里就已经存在亚群的情况了,一个大的框框下,还有很多小框框。那几条粗黑的线,就是大框框的边界。也要注意,这里是有两层text文本要加的哈, geom_treemap_subgroup_text()这个函数加的是subgroup = region这八个文本, geom_treemap_text()加的就是label的内容。
但这样看起来有点乱乱的,其实我们也可以分面去看这幅图片。用地区去分面啦,用region去分面啦、用econ_classification去分面啦、用 hemisphere 啦。
相应代码就是在原来的基础上加 facet_wrap( ~ X)了,还知道X是什么卅?
明天应该是让这幅图动起来吧,今天就到此为止了!