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()

图像如下:

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

原文地址:https://www.cnblogs.com/HuZihu/p/9481088.html

时间: 2024-10-12 09:12:29

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

XCL-Charts画面积图(AreaChart) 例1

面积图的一个例子,做面积图时发现注释位置放图上方更好处理.改了下. 面积图的网格和轴处理与其它图不一样, 它是用覆盖的范围来表示其势力范围,标签轴无需在突出一段出来.这里处理了下. 代码: //图基类 chart = new AreaChart(); //图所占范围大小 chart.setChartRange(0, 0, this.mScrWidth , this.mScrHeight ); //标签1对应的数据集 LinkedList<Double> valueA= new LinkedLi

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

直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/crimeRatesByState2005.csv 以下是这个数据文件的前5行: state murder forcible_rape robbery aggravated_assault 0 United States 5.6 31.7 140.7 291.1

XCL-Charts画线图(Line Chart)

关于线图(Line Chart)如何画,我以前写过很详细的说明,只是在这附一下,现在的基类是怎么弄的. 基类把有关线图的所有相关元素都能开发出来变成可控制的,而隐藏了具体的位置计算,图形绘制计算等待过程,只须传入数据源, 加上自己想要的控制即可得到一个还不错的图表. 附上代码: //线图基类 chart = new LineChart(); //图所占范围大小 chart.setChartRange(0, 0, this.mScrWidth , this.mScrHeight ); //标签1对

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

这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图. 数据地址:https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv 准备工作:先导入matplotlib和pandas,用pandas读取csv文件,然后创建一个图像和一个坐标轴 import pandas as pd from matplotlib import pyplot as plt birth=p

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

雷达图常用于对多项指标的全面分析.例如:HR想要比较两个应聘者的综合素质,用雷达图分别画出来,就可以进行直观的比较. 用Matplotlib画雷达图需要使用极坐标体系,可点击此链接,查看对极坐标体系的介绍:https://www.cnblogs.com/kallan/p/6738577.html. 下面,我们从五个方面(编程能力,沟通技能,专业知识,团队协作,工具掌握)来对路人甲和路人乙进行比较. 代码如下: import numpy as np from matplotlib import p

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

这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv 首先查看一下数据文件的前5行: Name G MIN PTS FGM FGA FGP FTM FTA FTP ... 0 Dwyane Wade 79 38.6 30.2 10.8 22.0 0.491 7.5 9.8 0.765 ... 1 LeBron James 81 37.7 28.4 9.7 19.

Matplotlib学习---用matplotlib画散点图,气泡图(scatterplot, bubble chart)

Matplotlib里有两种画散点图的方法,一种是用ax.plot画,一种是用ax.scatter画. 一. 用ax.plot画 ax.plot(x,y,marker="o",color="black") 二. 用ax.scatter画 ax.scatter(x,y,marker="o",s=sizes,c=colors) ax.plot和ax.scatter的区别: ax.plot:各散点彼此复制,因此整个数据集中所有的点只需配置一次颜色和大小

Matplotlib——第一章轻松画个图

首先安装matplotlib,使用pip install matplotlib.安装完成后在python的命令行敲入import matplotlib,如果没问题,说明安装成功可以开始画图了. 看好了,见证奇迹的时刻 from matplotlib import pyplot as plt plt.plot([1,2,3,4,5],[4,3,4,3,4]) #在画布上画图 plt.show() #显示画布 画线,需要给出线上的点的坐标,然后Matplotlib会自动将点连成线.我们看到两个点的坐

Matplotlib学习---用wordcloud画词云(Word Cloud)

画词云首先需要安装wordcloud(生成词云)和jieba(中文分词). 先来说说wordcloud的安装吧,真是一波三折.首先用pip install wordcloud出现错误,说需要安装Visual C++ 14.0.折腾半天安装好Visual C++后,还是不行,按网上指点,下载第三方包安装(https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud).安装是成功了,可是在anaconda里导入的时候又出现了问题,说是"no module