Matplotlib学习---用matplotlib画面积图(area chart)
这里利用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)的更多相关文章
- Matplotlib学习---用seaborn画矩阵图(pair plot)
矩阵图非常有用,人们经常用它来查看多个变量之间的联系. 下面用著名的鸢尾花数据来画一个矩阵图.从sklearn导入鸢尾花数据,然后将其转换成pandas的DataFrame类型,最后用seaborn画 ...
- Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)
直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...
- Matplotlib学习---用matplotlib画箱线图(boxplot)
箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...
- Matplotlib学习---用matplotlib画折线图(line chart)
这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图. 数据地址:https://raw.githubusercontent.com/jakevd ...
- Matplotlib学习---用matplotlib画雷达图(radar chart)
雷达图常用于对多项指标的全面分析.例如:HR想要比较两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较. 用Matplotlib画雷达图需要使用极坐标体系,可点击此链接,查看对极坐标体系的 ...
- Matplotlib学习---用matplotlib画误差线(errorbar)
误差线用于显示数据的不确定程度,误差一般使用标准差(Standard Deviation)或标准误差(Standard Error). 标准差(SD):是方差的算术平方根.如果是总体标准差,那么用σ表 ...
- Matplotlib学习---用matplotlib画阶梯图(step plot)
这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/us-postage.c ...
- Matplotlib学习---用matplotlib画热图(heatmap)
这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv ...
- Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)
由于直方图受组距(bin size)影响很大,设置不同的组距可能会产生完全不同的可视化结果.因此我们可以用密度平滑估计来更好地反映数据的真实特征.具体可参见这篇文章:https://blog.csdn ...
随机推荐
- VMware vSphere 6 序列号
vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8CKQ8 NV09R-2W007-08D38-C ...
- Git_GitHub详解
Git和Github详细教程 一 概述 说到Git和Github,前几天我们知道微软以75亿美元收购全球最大的代码托管和写作平台GitHub,而GitHub是全球最大的代码仓库,很多开发人员都将代码 ...
- H5 后代选择器
12-后代选择器 我是段落 我是段落 我是段落 我是段落 我是段落 我是段落 <!DOCTYPE html> <html lang="en"> <he ...
- 关于C语言内存的一些理解
内存这个大话题 key:心里一定要有内存的逻辑图. 程序是什么? 程序 = 代码 + 数据 代码放在Flash中代码段,可变的数据(全局变量.局部变量)放在内存中. 运行程序的目的是什么? 得到运行结 ...
- NEST.net Client
NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...
- Python之字符串格式化
1) 占位符%s: %s是通用的占位符,所有类型不管是string还是int还是float全都代表. 如果使用%d,则只能代表整数:如果是%f,则只能代表小数: 2) 直接用加号+连接 ...
- Java Core - Map接口
Map:是一组映射The java.util.Map interface represents a mapping between a key and a value. The Map interfa ...
- tomcat one connection one thread one request one thread
java - What is the difference between thread per connection vs thread per request? - Stack Overflow ...
- MySQL 性能调优之存储引擎
原文:http://bbs.landingbj.com/t-0-246222-1.html http://bbs.landingbj.com/t-0-245851-1.html MySQ ...
- jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...