无法播放?请 点击这里 跳转到Youtube
切换视频源:

本篇是《Pandas入门教程》的最后一章,来学习一下如何为DataFrame画不同的图,比如饼状图、柱状图、折线图、散点图、盒形图和面积图。

首先我们导入一下需要用到的library,除了pandas之外,numpy用于生成数据,matplotlib则负责实现数据可视化:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

饼形图 Pie Chart

首先我们创建一个DataFrame,其中存下美国人口最多的5个城市的人口统计,然后直接使用plot.pie画出饼状图(Pie Chart):

usa_city_population = pd.DataFrame({
    'population': [8398748, 3990456, 2705994, 2325502, 1660272],
}, index = ['New York City', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'])

axs = usa_city_population.plot.pie(y='population')

同样的,我们创建一个DataFrame存储中国5大城市的人口数量,使用相同的方式画出饼状图:

china_city_population = pd.DataFrame({
    'population': [26917322, 20381745, 15773658, 13552359, 13238590],
}, index = ['Shanghai', 'Beijing', 'Chongqing', 'Tianjin', 'Guangzhou'])

axs = china_city_population.plot.pie(y='population', figsize=(5, 5))

柱状图 Bar Chart

如果我们要对比美国和中国五大城市的人口数量,我们可以将其数据存在新的DataFrame中,然后使用plot.bar画出柱状图进行比较:

top_city_population = pd.DataFrame({
    'usa': usa_city_population['population'].values,
    'china': china_city_population['population'].values
}, index = ['top1', 'top2', 'top3', 'top4', 'top5'])
axs = top_city_population.plot.bar(rot = 0)

如果只想看美国的城市人口数量,可以使用reset_index函数将index变成新的一列,然后在plot.bar中设定x和y画出新的柱状图:

top_city_population.reset_index().plot.bar(x = 'index', y = 'usa', rot = 0)

折线图 Line Chart

下面我们生成1000个随机数据,然后将数据进行累加,再使用data.plot画出折线图:

data = pd.Series(np.random.randn(1000), index = np.arange(1000)) # 生成一组符合标准正态分布的随机样本值。
data = data.cumsum() # 将数据进行累加
axs = data.plot()

下面生成一个形状为(1000, 4)的DataFrame,然后使用plot画出4条折线图:

data = pd.DataFrame(np.random.randn(1000, 4), index = np.arange(1000), columns = ["A", "B", "C", "D"])
data = data.cumsum()
data.plot()

散点图 Scatter Plot

使用上面相同的数据,通过设定x和y参数,使用scatter函数画出散点图(Scatter Plot):

data.plot.scatter(x = 'A', y = 'B', color='Green', label='Class 1')
data.plot.scatter(x = 'A', y = 'C', color='Red', label='Class 2')

如果要将两个散点图合在一个图中,可以先将一个散点图存在ax1上,然后通过指定第二个散点图的 ax 参数,两个散点图就会出现在同一个图中了:

ax1 = data.plot.scatter(x = 'A', y = 'B', color='Green', label='Class 1')
data.plot.scatter(x = 'A', y = 'C', color='Red', label='Class 2', ax = ax1)

盒形图 Box Plot

box函数可以画出盒形图:

data.plot.box()

面积图 Area Chart

area函数可以画出面积图,将subplots设为True,结果会为单独的列出图:

data = np.abs(data)
axs = data.plot.area(figsize=(12, 4), subplots = True)

将subplots设为False,4列的面积会被叠合起来:

axs = data.plot.area(figsize=(12, 4), subplots = False)

这就是Pandas数据可视化基本的内容啦,如果大家想要更多了解MatplotLib,敬请期待我们之后会出的完整系列。