这里利用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. CentOS 7+nginx+PHP+php-fpm

    根据网上资料配置: location ~ \.php$ { #include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index in ...

  2. Python_每日习题_0007_copy

    题目:将一个列表的数据复制到另一个列表中. 程序分析:使用列表[:],拿不准可以调用copy模块 import copy a = [,,,,['a','b']] b = a #赋值 c = a[:] ...

  3. c++入门之结构体初步

    结构体实际上是一种数据结构的雏形,对结构体的灵活使用很多时候可以带来很多便利.下面给出一个关于结构体的程序: #include "iostream" # include " ...

  4. Divisors of Two Integers CodeForces - 1108B (数学+思维)

    Recently you have received two positive integer numbers xx and yy. You forgot them, but you remember ...

  5. withRouter使用

    import React from 'react'; import {Switch,NavLink,Route,Redirect,withRouter} from 'react-router-dom' ...

  6. Tomcat异常及解决办法——持续更新中

    公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.ap ...

  7. vue页面传参和接参

    https://blog.csdn.net/zhouzuoluo/article/details/81259298(copy) js** this.$router.push({ name: 'Flow ...

  8. Day 6-3 粘包现象

    服务端: import socket import subprocess phone = socket.socket(family=socket.AF_INET, type=socket.SOCK_S ...

  9. 关于 html input标签的几个常用操作

    1.清除 input 标签默认样式 input { -moz-appearance: none; outline: 0; text-decoration: none; outline: none; b ...

  10. 转:Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)

    1 继续关系: BoxDecoration:实现边框.圆角.阴影.形状.渐变.背景图像 ShapeDecoration:实现四个边分别指定颜色和宽度.底部线.矩形边色.圆形边色.体育场(竖向椭圆).  ...