matplotlib是python的一个数据可视化工具,是一个功能强大的数学绘图库,它能帮助程序员绘制出折线图或散点图等图表。
访问以下链接https://matplotlib.org/stable/gallery/index.html
可以了解到更多功能并获取官方教程。
应用场景:
以上为我国2020年第一季度至2021年第一季度的国内生产总值统计表。将表中数据按照时间为横轴(单位:季度)、GDP为纵轴(单位:亿元)绘制成折线图。
数据来自国家统计局官网,点击以下链接可查看原网页:
https://data.stats.gov.cn/easyquery.htm?cn=B01
在中学的数学课上,老师就讲过,描绘函数图像的核心步骤只有三步:描点、连线和画图,在这里也是一样。
# 导入matplotlib下的pyplot包
from matplotlib import pyplot as plt
# 描述横坐标
x = range(1, 6)
# 描述横坐标对应的纵坐标
y = [205727, 248985.1, 264976.3, 296297.8, 249310.1]
# 将坐标信息传入绘制图像的函数
plt.plot(x, y)
# 显示图像
plt.show()
但是,我们注意到,这幅图横纵坐标的物理意义并不明确,缺少必要的说明。同时坐标轴的分度值(0.5)不合适。(“半个季度”可能会让人产生疑惑)所以我们有必要对图像作出优化。
# 导入matplotlib下的pyplot包
from matplotlib import pyplot as plt
# 基础步骤
# 描述横坐标
x = range(1, 6)
# 描述横坐标对应的纵坐标
y = [205727, 248985.1, 264976.3, 296297.8, 249310.1]
# 将坐标信息传入绘制图像的函数
plt.plot(x, y)
# 优化1
# 设置我们想在x轴刻度的标签上做出的修改
xTicksLabel = ["2020年第{}季度".format(i) for i in range(1, 5)] + ["2021年第1季度"]
plt.xticks(x, xTicksLabel)
# 设置坐标轴的描述
plt.xlabel("季度")
plt.ylabel("GDP(单位:亿元)")
# 设置图像标题
plt.title("[我国2020年第一季度至2021年第一季度的国内生产总值折线图")
# 显示图像
plt.show()
我们发现,绘制结果没有如我们所愿,汉字并不能被显示出来。这是因为matplotlib的默认设置并不支持中文显示。为此我们需要对字体进行更改,从而显示中文。同时,我们还将对字体进行适当调整,让重要信息能更好地突出。
# 导入matplotlib下的pyplot包
from matplotlib import pyplot as plt
# 基础步骤
# 描述横坐标
x = range(1, 6)
# 描述横坐标对应的纵坐标
y = [205727, 248985.1, 264976.3, 296297.8, 249310.1]
# 将坐标信息传入绘制图像的函数
plt.plot(x, y)
# 优化2
# 导入font_manager进行字体设置
from matplotlib import font_manager as fm
# 将与修改的字体在电脑里的储存路径传入实例化的FontProperties对象
# (在我的电脑里,"C:\\windows\\fonts\\simsun.ttc"路径就对应宋体,
# 这一路径在不同电脑中可能不同,windows10用户可以直接在开始菜单中搜索“字体”,
# 就能找到对应字体的安装路径)
myfont = fm.FontProperties(fname="C:\\windows\\fonts\\simsun.ttc")
#将该实例作为参数传入刚刚使用过的方法中,同时对字体大小进行修改
# 优化1
# 设置我们想在x轴刻度的标签上做出的修改
xTicksLabel = ["2020年第{}季度".format(i) for i in range(1, 5)] + ["2021年第1季度"]
plt.xticks(x, xTicksLabel, fontproperties=myfont)
# 设置坐标轴的描述
plt.xlabel("季度", fontproperties=myfont, fontsize=20)
plt.ylabel("GDP(单位:亿元)", fontproperties=myfont, fontsize=20)
# 设置图像标题
plt.title("[我国2020年第一季度至2021年第一季度的国内生产总值折线图", fontproperties=myfont, fontsize=30)
# 显示图像
plt.show()
我们发现,这样制作出来的图片仍然不能令人满意,部分文字信息超出了图片范围,所以我们想到调整图片大小。这里注意一定要把调整图片大小的语句放在描点步骤的前面,否则会绘制出两个图象。
# 导入matplotlib下的pyplot包
from matplotlib import pyplot as plt
# 优化3
# 调整图片大小
plt.figure(figsize=(30, 30), dpi=80)
# 基础步骤
# 描述横坐标
x = range(1, 6)
# 描述横坐标对应的纵坐标
y = [205727, 248985.1, 264976.3, 296297.8, 249310.1]
# 将坐标信息传入绘制图像的函数
plt.plot(x, y)
# 优化2
# 导入font_manager进行字体设置
from matplotlib import font_manager as fm
# 将与修改的字体在电脑里的储存路径传入实例化的FontProperties对象
# (在我的电脑里,"C:\\windows\\fonts\\simsun.ttc"路径就对应宋体,
# 这一路径在不同电脑中可能不同,windows10用户可以直接在开始菜单中搜索“字体”,
# 就能找到对应字体的安装路径)
myfont = fm.FontProperties(fname="C:\\windows\\fonts\\simsun.ttc")
#将该实例作为参数传入刚刚使用过的方法中,同时对字体大小进行修改
# 优化1
# 设置我们想在x轴刻度的标签上做出的修改
xTicksLabel = ["2020年第{}季度".format(i) for i in range(1, 5)] + ["2021年第1季度"]
plt.xticks(x, xTicksLabel, fontproperties=myfont)
# 设置坐标轴的描述
plt.xlabel("季度", fontproperties=myfont, fontsize=20)
plt.ylabel("GDP(单位:亿元)", fontproperties=myfont, fontsize=20)
# 设置图像标题
plt.title("我国2020年第一季度至2021年第一季度的GDP折线图", fontproperties=myfont, fontsize=30)
# 显示图像
plt.show()
至此,我们已经完成了折线图的绘制,初步达到了预期效果。绘制折线图核心是准确传入数据,其他的工作就只是在此基础上的调整。还有疑问的话也欢迎在评论区和我交流。
[1]Eric Matthes著, 袁国忠译. Python编程:从入门到实践[M]. 北京: 人民邮电出版社,2016.