从〇到一 轻松学编程

Python 数据可视化示例

by 星辉


Posted on 2019年10月24日周四 at 08:56上午 in 教程


数据处理与分析的结果可以通过图形工具包展示为生动直观的图表,Python中最常用的图表工具软件包是数学绘图库Matplotlib,Anaconda发行版已经直接附带了Matplotlib,对于Python官方版则可以使用以下pip命令安装Matplotlib:

pip install matplotlib 

以下代码导入绘图子模块matplotlib.pyplot(按惯例以plt作为别名)并创建了必要的中文字体属性对象:

import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.font_manager import FontProperties
cfont = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf")  # 创建中文字体属性,自带字库不支持中文

接下来的语句块将基于之前皇帝寿命DataFrame中的数据绘制一个直方图:

plt.style.use("seaborn")
plt.title("皇帝的寿命:区间分布", fontproperties=cfont, fontsize=18)
plt.hist(df.寿命, range=(0, 100), edgecolor="blue")

可以看到数据值是呈正态分布的,占比最高的是30到40岁区间——总共有62位皇帝的寿命处在这个范围之内。

下面的继续尝试绘制不同类型的图表,以便研究一下皇帝寿命的变化趋势,首先使用以下语句块对DataFrame进行修改:

df["出生年份"] = df.生卒.apply(
    lambda x: int(x.split("年", 1)[0].replace("前", "-")))
df = df.sort_values("出生年份")
df["平均寿命"] =df.寿命.rolling(20).mean()
df.head()

以上语句块先添加了一个“出生年份”列,即通过对生卒列处理得到的整数(公元前为负值);再按出生年份排序;最后再添加一个“平均寿命”列,即连续20位皇帝寿命的移动平均值。可以看到现在数据将按出生年份排序,平均寿命列的前19行为空值(Pandas以NaN表示空值,即Not a Number)。

现在可以使用以下语句块绘制新的图表:plot方法用于绘制折线图,第一行根据出生年份和寿命值绘图,第三个参数为表示绿色圆点的样式字符串,相当于画散点图;第二行根据出生年份和平均寿命值绘图,样式为红色实线:

plt.plot(df.出生年份, df.寿命, "go")
plt.plot(df.出生年份, df.平均寿命, "r-")
plt.title("皇帝寿命:变化趋势", fontproperties=cfont, fontsize=18);

你可以从这张图中一眼看出皇帝寿命与朝代兴衰的显著关联,一图胜千言。

Matplotlib支持绘制各种类型的图表,实际工作中应当根据数据的特点选择最能说明问题的图表类型。有关Matplotlib的更多信息请访问项目官网 https://matplotlib.org/



No one has commented yet.

Leave a Comment

HTML语法: 禁用