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

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

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

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

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

  1. Under 5 5 to 19 \
  2. 1860 15.4 35.8
  3. 1870 14.3 35.4
  4. 1880 13.8 34.3
  5. 1890 12.2 33.9
  6. 1900 12.1 32.3
  7. 1910 11.6 30.4
  8. 1920 10.9 29.8
  9. 1930 9.3 29.5
  10. 1940 8.0 26.4
  11. 1950 10.7 23.2
  12. 1960 11.3 27.1
  13. 1970 8.4 29.5
  14. 1980 7.2 24.8
  15. 1990 7.6 21.3
  16. 2000 6.8 21.8
  17. 2005 6.8 20.7
  18. NaN -8.6 -15.1
  19. NaN NaN NaN
  20. Read more: Population Distribution by Age, Race... NaN NaN
  21.  
  22. 20 to 44 45 to 64 65+
  23. 1860 35.7 10.4 2.7
  24. 1870 35.4 11.9 3.0
  25. 1880 35.9 12.6 3.4
  26. 1890 36.9 13.1 3.9
  27. 1900 37.7 13.7 4.1
  28. 1910 39.0 14.6 4.3
  29. 1920 38.4 16.1 4.7
  30. 1930 38.3 17.4 5.4
  31. 1940 38.9 19.8 6.8
  32. 1950 37.6 20.3 8.1
  33. 1960 32.2 20.1 9.2
  34. 1970 31.7 20.6 9.8
  35. 1980 37.1 19.6 11.3
  36. 1990 40.1 18.6 12.5
  37. 2000 37.0 22.0 12.4
  38. 2005 35.4 24.6 12.4
  39. NaN -0.3 14.2 9.7
  40. NaN NaN NaN NaN
  41. Read more: Population Distribution by Age, Race... NaN NaN NaN

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

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

代码如下:

  1. import pandas as pd
  2. from matplotlib import pyplot as plt
  3. population=pd.read_excel(r"http://book.flowingdata.com/ch05/data/us-population-by-age.xls")
  4. fig,ax=plt.subplots(figsize=(7,5))
  5.  
  6. p1=population.iloc[0:16] #提取有效数据
  7. year=p1.index.astype(int) #提取年份,并转换为整数类型
  8.  
  9. v1=p1["Under 5"].values #提取5岁以下的数据
  10. v2=p1["5 to 19"].values #提取5-19岁的数据
  11. v3=p1["20 to 44"].values #提取20-44岁的数据
  12. v4=p1["45 to 64"].values #提取45-64岁的数据
  13. v5=p1["65+"].values #提取65岁以上的数据
  14.  
  15. #设置y轴刻度值的一个helper function
  16. def make_yticks(where):
  17. ytick=[]
  18. sum=0
  19. for i in where:
  20. sum+=i
  21. ytick.append(sum)
  22. return ytick
  23.  
  24. ax.stackplot(year,v1,v2,v3,v4,v5)
  25. ax.set(xlim=(1860,2005),ylim=(0,100),xlabel="Year",ylabel="Population %")
  26. ax1=ax.twinx() #设置双y轴,共享x轴
  27. ax.set_yticks(make_yticks(p1.loc[1860])) #设置第一个y轴刻度值
  28. ax1.set_yticks(make_yticks(p1.loc[2005])) #设置第二个y轴刻度值
  29. diff=[i-j for i,j in zip(p1.loc[2005],p1.loc[1860])] #计算2005年减去1860年的差值
  30. for i,j,z in zip(make_yticks(p1.loc[2005]), p1.columns,diff): #设置文字注释
  31. ax.text(x=1980,y=i-6,s=j)
  32. ax.text(x=2020,y=i-6,s=z,fontsize=14,color="b")
  33.  
  34. 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. VMware vSphere 6 序列号

    vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2 4C4WK-8KH8L-H85J0-UHCNK-8CKQ8 NV09R-2W007-08D38-C ...

  2. Git_GitHub详解

    Git和Github详细教程 一  概述 说到Git和Github,前几天我们知道微软以75亿美元收购全球最大的代码托管和写作平台GitHub,而GitHub是全球最大的代码仓库,很多开发人员都将代码 ...

  3. H5 后代选择器

    12-后代选择器 我是段落 我是段落 我是段落 我是段落 我是段落 我是段落 <!DOCTYPE html> <html lang="en"> <he ...

  4. 关于C语言内存的一些理解

    内存这个大话题 key:心里一定要有内存的逻辑图. 程序是什么? 程序 = 代码 + 数据 代码放在Flash中代码段,可变的数据(全局变量.局部变量)放在内存中. 运行程序的目的是什么? 得到运行结 ...

  5. NEST.net Client

    NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...

  6. Python之字符串格式化

    1)     占位符%s: %s是通用的占位符,所有类型不管是string还是int还是float全都代表. 如果使用%d,则只能代表整数:如果是%f,则只能代表小数: 2)     直接用加号+连接 ...

  7. Java Core - Map接口

    Map:是一组映射The java.util.Map interface represents a mapping between a key and a value. The Map interfa ...

  8. tomcat one connection one thread one request one thread

    java - What is the difference between thread per connection vs thread per request? - Stack Overflow ...

  9. MySQL 性能调优之存储引擎

    原文:http://bbs.landingbj.com/t-0-246222-1.html        http://bbs.landingbj.com/t-0-245851-1.html MySQ ...

  10. jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等

    转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...