博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matplotlib学习---用matplotlib画面积图(area chart)
阅读量:6089 次
发布时间:2019-06-20

本文共 4518 字,大约阅读时间需要 15 分钟。

这里利用Nathan Yau所著的一书中的数据,学习画图。

 

数据地址:http://book.flowingdata.com/ch05/data/us-population-by-age.xls

 

准备工作:先导入matplotlib和pandas,用pandas读取excel文件,然后创建一个图像和一个坐标轴

import pandas as pdfrom matplotlib import pyplot as pltpopulation=pd.read_excel(r"http://book.flowingdata.com/ch05/data/us-population-by-age.xls")fig,ax=plt.subplots()

 

 先来看一看这个数据文件:

Under 5  5 to 19  \1860                                                   15.4     35.8   1870                                                   14.3     35.4   1880                                                   13.8     34.3   1890                                                   12.2     33.9   1900                                                   12.1     32.3   1910                                                   11.6     30.4   1920                                                   10.9     29.8   1930                                                    9.3     29.5   1940                                                    8.0     26.4   1950                                                   10.7     23.2   1960                                                   11.3     27.1   1970                                                    8.4     29.5   1980                                                    7.2     24.8   1990                                                    7.6     21.3   2000                                                    6.8     21.8   2005                                                    6.8     20.7   NaN                                                    -8.6    -15.1   NaN                                                     NaN      NaN   Read more: Population Distribution by Age, Race...      NaN      NaN                                                       20 to 44  45 to 64   65+  1860                                                    35.7      10.4   2.7  1870                                                    35.4      11.9   3.0  1880                                                    35.9      12.6   3.4  1890                                                    36.9      13.1   3.9  1900                                                    37.7      13.7   4.1  1910                                                    39.0      14.6   4.3  1920                                                    38.4      16.1   4.7  1930                                                    38.3      17.4   5.4  1940                                                    38.9      19.8   6.8  1950                                                    37.6      20.3   8.1  1960                                                    32.2      20.1   9.2  1970                                                    31.7      20.6   9.8  1980                                                    37.1      19.6  11.3  1990                                                    40.1      18.6  12.5  2000                                                    37.0      22.0  12.4  2005                                                    35.4      24.6  12.4  NaN                                                     -0.3      14.2   9.7  NaN                                                      NaN       NaN   NaN  Read more: Population Distribution by Age, Race...       NaN       NaN   NaN

这个文件记录的是1860年-2005年美国各年龄段人口占总人口的百分比。由于文件里有NaN字样,因此先把有效数据提取出来。然后把各年龄段的人口数据堆叠起来,画一个面积图。

 

面积图: ax.stackplot(x,y1,y2,y3...)

 

代码如下:

import pandas as pdfrom matplotlib import pyplot as pltpopulation=pd.read_excel(r"http://book.flowingdata.com/ch05/data/us-population-by-age.xls")fig,ax=plt.subplots(figsize=(7,5))p1=population.iloc[0:16] #提取有效数据year=p1.index.astype(int) #提取年份,并转换为整数类型v1=p1["Under 5"].values #提取5岁以下的数据v2=p1["5 to 19"].values #提取5-19岁的数据v3=p1["20 to 44"].values #提取20-44岁的数据v4=p1["45 to 64"].values #提取45-64岁的数据v5=p1["65+"].values #提取65岁以上的数据#设置y轴刻度值的一个helper functiondef make_yticks(where):    ytick=[]    sum=0    for i in where:        sum+=i        ytick.append(sum)    return ytickax.stackplot(year,v1,v2,v3,v4,v5)ax.set(xlim=(1860,2005),ylim=(0,100),xlabel="Year",ylabel="Population %")ax1=ax.twinx() #设置双y轴,共享x轴ax.set_yticks(make_yticks(p1.loc[1860])) #设置第一个y轴刻度值ax1.set_yticks(make_yticks(p1.loc[2005])) #设置第二个y轴刻度值diff=[i-j for i,j in zip(p1.loc[2005],p1.loc[1860])] #计算2005年减去1860年的差值for i,j,z in zip(make_yticks(p1.loc[2005]), p1.columns,diff): #设置文字注释    ax.text(x=1980,y=i-6,s=j)    ax.text(x=2020,y=i-6,s=z,fontsize=14,color="b")plt.show()

 

图像如下:

可以看出,大的趋势是:年轻人口比重在逐年减少,老年人口比重则逐年增高。

 

转载于:https://www.cnblogs.com/HuZihu/p/9481088.html

你可能感兴趣的文章
Laravel 深入核心系列教程
查看>>
webpack 性能提速
查看>>
一次下载多个文件的解决思路-JS
查看>>
记录使用Vue相关API开发项目时遇到的问题难点整理(不定时更新)
查看>>
《Java8实战》-第五章读书笔记(使用流Stream-02)
查看>>
vue轮播图插件之vue-awesome-swiper
查看>>
Cabloy.js:基于EggBorn.js开发的一款顶级Javascript全栈业务开发框架
查看>>
HTTP相关知识汇总
查看>>
使用wagon-maven-plugin部署Java项目到远程服务器
查看>>
新书推荐 |《PostgreSQL实战》出版(提供样章下载)
查看>>
JavaScript/数据类型/function/closure闭包
查看>>
30个免费资源:涵盖机器学习、深度学习、NLP及自动驾驶
查看>>
读zent源码库之Dialog组件实现
查看>>
express中间层搭建前端项目3
查看>>
【刷算法】我知道的所有类似斐波那契数列的问题
查看>>
centos下安装JAVA开发工具(3)------Mysql
查看>>
JS 实现文字滚动显示
查看>>
php实现依赖注入(DI)和控制反转(IOC)
查看>>
如何搭建高质量、高效率的前端工程体系--页面结构继承
查看>>
白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
查看>>