> 技术文档 > Python进阶第三方库之Matplotlib

Python进阶第三方库之Matplotlib

应用Matplotlib的基本功能实现图形显示 应用Matplotlib实现多图显示 应用Matplotlib实现不同画图种类

1、什么是Matplotlib

是专门用于开发2D图表(包括3D图表) 以渐进、交互式方式实现数据可视化

2、为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。 能将数据进行可视化,更直观的呈现 使数据更加客观、更具说服力 例如下面两个图为数字展示和图形展示:

3、实现一个简单的Matplotlib画图 以折线图为例

3.1 matplotlib.pyplot模块

46matplotlib.pytplot包含了一系列类似于matlab的画图函数。 import matplotlib.pyplot as plt

3.2 图形绘制流程:

1.创建画布 -- plt.figure() plt.figure(figsize=(), dpi=) figsize:指定图的长宽 dpi:图像的清晰度 返回fig对象 2.绘制图像 -- plt.plot(x, y) 以折线图为例 3.显示图像 -- plt.show()

3.3 折线图绘制与显示

举例:展现上海一周的天气,比如从星期一到星期日的天气温度如下 import matplotlib.pyplot as plt # 1.创建画布 plt.figure(figsize=(10, 10), dpi=100) # 2.绘制折线图 plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13]) # 3.显示图像 plt.show()

4、基础绘图功能 以折线图为例

准备数据并画出初始折线图

import matplotlib.pyplot as plt import random # 画出温度变化图 # 0.准备x, y坐标的数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=80) # 2.绘制折线图 plt.plot(x, y_shanghai) # 3.显示图像 plt.show() 添加自定义x,y刻度 plt.xticks(x, **kwargs) x:要显示的刻度值 plt.yticks(y, **kwargs) y:要显示的刻度值 # 增加以下两行代码 # 构造x轴刻度标签 x_ticks_label = [\"11{}\".format(i) for i in x] # 构造y轴刻度 y_ticks = range(40) # 修改x,y轴坐标的刻度显示 plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5])中文显示问题解决 解决方案一: 下载中文字体(黑体,看准系统版本) 步骤一:下载 SimHei 字体(或者其他的支持中文显示的字体也行) 步骤二:安装字体 linux下:拷贝字体到 usr/share/fonts 下: sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf windowsmac下:双击安装 步骤三:删除~/.matplotlib中的缓存文件 cd ~/.matplotlib rm -r * 步骤四:修改配置文件matplotlibrc vi ~/.matplotlib/matplotlibrc 将文件内容修改为: font.family : sans-serif font.sans-serif : SimHei axes.unicode_minus : False 解决方案二: Python脚本中动态设置matplotlibrc,这样也可以避免由于更改配置文件而造成的麻烦,具体代码如下: from pylab import mpl # 设置显示中文字体 mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"] 有时候,字体更改后,会导致坐标轴中的部分字符无法正常显示,此时需要更改axes.unicode_minus参数: # 设置正常显示符号 mpl.rcParams[\"axes.unicode_minus\"] = False  添加网格显示 为了更加清楚地观察图形对应的值 plt.grid(True, linestyle=\'--\', alpha=0.5) 添加描述信息 添加x轴、y轴描述信息及标题 通过fontsize参数可以修改图像中字体的大小 plt.xlabel(\"时间\") plt.ylabel(\"温度\") plt.title(\"中午110分到12点之间的温度变化图示\", fontsize=20) 图像保存 # 保存图片到指定路径 plt.savefig(\"test.png\") 注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。 完整代码: import matplotlib.pyplot as plt import random from pylab import mpl # 设置显示中文字体 mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"] # 设置正常显示符号 mpl.rcParams[\"axes.unicode_minus\"] = False # 0.准备数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制图像 plt.plot(x, y_shanghai) # 2.1 添加x,y轴刻度 # 构造x,y轴刻度标签 x_ticks_label = [\"11{}\".format(i) for i in x] y_ticks = range(40) # 刻度显示 plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5]) # 2.2 添加网格显示 plt.grid(True, linestyle=\"--\", alpha=0.5) # 2.3 添加描述信息 plt.xlabel(\"时间\") plt.ylabel(\"温度\") plt.title(\"中午11--12点某城市温度变化图\", fontsize=20) # 2.4 图像保存 plt.savefig(\"./test.png\") # 3.图像显示 plt.show()

5、在一个坐标系中绘制多个图像

多次plot 需求:再添加一个城市的温度变化 收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需 要区分线条,如下显示。# 增加北京的温度数据 y_beijing = [random.uniform(1, 3) for i in x] # 绘制折线图 plt.plot(x, y_shanghai) # 使用多次plot可以画多个折线 plt.plot(x, y_beijing, color=\'r\', linestyle=\'--\') 显示图例 注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。 # 绘制折线图 plt.plot(x, y_shanghai, label=\"上海\") # 使用多次plot可以画多个折线 plt.plot(x, y_beijing, color=\'r\', linestyle=\'--\', label=\"北京\") # 显示图例 plt.legend(loc=\"best\")完整代码: # 0.准备数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1,3) for i in x] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制图像 plt.plot(x, y_shanghai, label=\"上海\") plt.plot(x, y_beijing, color=\"r\", linestyle=\"--\", label=\"北京\") # 2.1 添加x,y轴刻度 # 构造x,y轴刻度标签 x_ticks_label = [\"11{}\".format(i) for i in x] y_ticks = range(40) # 刻度显示plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5]) # 2.2 添加网格显示 plt.grid(True, linestyle=\"--\", alpha=0.5) # 2.3 添加描述信息 plt.xlabel(\"时间\") plt.ylabel(\"温度\") plt.title(\"中午11--12点某城市温度变化图\", fontsize=20) # 2.4 图像保存 plt.savefig(\"./test.png\") # 2.5 添加图例 plt.legend(loc=0) # 3.图像显示 plt.show()