这里利用Nathan Yau所著的《鲜活的数据:数据可视化指南》一书中的数据,学习画图。

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

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

import pandas as pd
from matplotlib import pyplot as plt
population=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 pd
from matplotlib import pyplot as plt
population=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 function
def make_yticks(where):
ytick=[]
sum=0
for i in where:
sum+=i
ytick.append(sum)
return ytick ax.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()

图像如下:

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

Matplotlib学习---用matplotlib画面积图(area chart)的更多相关文章

  1. Matplotlib学习---用seaborn画矩阵图(pair plot)

    矩阵图非常有用,人们经常用它来查看多个变量之间的联系. 下面用著名的鸢尾花数据来画一个矩阵图.从sklearn导入鸢尾花数据,然后将其转换成pandas的DataFrame类型,最后用seaborn画 ...

  2. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

    直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...

  3. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  4. Matplotlib学习---用matplotlib画折线图(line chart)

    这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图. 数据地址:https://raw.githubusercontent.com/jakevd ...

  5. Matplotlib学习---用matplotlib画雷达图(radar chart)

    雷达图常用于对多项指标的全面分析.例如:HR想要比较两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较. 用Matplotlib画雷达图需要使用极坐标体系,可点击此链接,查看对极坐标体系的 ...

  6. Matplotlib学习---用matplotlib画误差线(errorbar)

    误差线用于显示数据的不确定程度,误差一般使用标准差(Standard Deviation)或标准误差(Standard Error). 标准差(SD):是方差的算术平方根.如果是总体标准差,那么用σ表 ...

  7. Matplotlib学习---用matplotlib画阶梯图(step plot)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/us-postage.c ...

  8. Matplotlib学习---用matplotlib画热图(heatmap)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv ...

  9. Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)

    由于直方图受组距(bin size)影响很大,设置不同的组距可能会产生完全不同的可视化结果.因此我们可以用密度平滑估计来更好地反映数据的真实特征.具体可参见这篇文章:https://blog.csdn ...

随机推荐

  1. 移动H5页面微信支付踩坑之旅(微信支付、单页面路由模拟、按钮加锁、轮询等常见功能)

    开发背景: .net混合开发的vue模板语法的单页面应用,所以不存在脚手架以及没有路由可以跳转. 项目描述: 需要写两个页面,在订单详情页需要点击“请输入手机号”进入手机号绑定页面,手机号绑定成功后自 ...

  2. log4j打印堆栈信息

    原文地址:https://blog.csdn.net/xianyu_0418/article/details/6043174 大家都知道,网站在运行的过程中,打印必要的log对记录网站的运行情况.从而 ...

  3. B. School Marks(典型贪心)

    链接 [https://codeforces.com/contest/540/problem/B] 题意 某个人有n门成绩,k门已知,剩下的他可以个瞎改,但有个要求,最后分数和不超过x,且每门成绩不超 ...

  4. sql中return和returns的区别

    用户定义函数中,用RETURNS 子句指定该函数返回值的数据类型 return用于返回具体的值/值变量

  5. CentOS 7.2 yum安装LAMP环境

    https://www.linuxidc.com/Linux/2016-11/136766.htm 详见以上链接,用yum安装方便省事. 尤其注意,mysql数据要设置远程连接.

  6. Elasticsearch的DSL之比较重要的几个查询语句

    1.  match_all { "match_all": {}} 匹配所有的, 当不给查询条件时,默认. 2. match 进行full text search或者exact va ...

  7. 利用php查看某个服务的进程数

    查看进程就是使用ps命令而已,只不顾ps的参数太多了. 使用php查询的话,必须要开启几个函数(可以执行外部程序的函数),参考官网:http://php.net/manual/zh/book.exec ...

  8. react中如何使用动画效果

    在react中想要加入动画效果 需要引入 import {CSSTransitionGroup} from 'react-transition-group' //加入react 动画包 import ...

  9. java中级——集合框架【3】-HashSet

    HashSet package cn.jse.hashset; import java.util.HashSet; public class TestCollection { public stati ...

  10. NIO和经典IO

    NIO未必更快,在Linux上使用Java6完成的测试中,多线程经典I/O设计胜出NIO30%左右 异步I/O强于经典I/O:服务器需要支持超大量的长期连接,比如10000个连接以上,不过各个客户端并 ...