首页 > Python基础教程 > Python数据可视化
阅读:8,984
Python Matplotlib legend函数:为每条折线添加图例
对于复式折线图来说,应该为每条折线都添加图例,此时可以通过 legend() 函数来实现。对于该函数可传入两个 list 参数,其中第一个 list 参数(handles 参数)用于引用折线图上的每条折线;第二个 list 参数(labels)代表为每条折线所添加的图例。
下面程序示范了为两条折线添加图例:
上面程序中,第 11 行代码用于为 ln2、ln1 所代表的折线添加图例(按传入该函数的两个列表的元素顺序一一对应),其中 loc 参数指定图例的添加位置,该参数支持如下参数值:
运行上面程序,将会发现应程序并没有绘制图例,这是因为 Matplotlib 默认不支持中文字体。如果希望在程序中修改 Matplotlib 的默认字体,则可按如下步骤进行:
将上面程序中第 11 行代码改为如下几行代码:
再次运行上面程序,将看到如图 1 所示的效果。
图 1 使用 legend() 函数指定图例
在使用 legend() 函数时可以不指定 handles 参数,只传入 labels 参数,这样该 labels 参数将按顺序为折线图中的多条折线添加图例。因此,可以将上面第 5 行代码改为如下形式:
Matplotlib 也允许在调用 plot() 函数时为每条折线分别传入 label 参数,这样程序在调用 legend() 函数时就无须传入 labels、handles 参数了。例如如下程序:
正如从上面程序中所看到的,每次绘制中文内容时都需要设置字体,那么是否能改变 Matplotlib 的默认字体呢?答案是肯定的。在 Python 的交互式解释器中输入如下两行命令:
下面程序示范了为两条折线添加图例:
import matplotlib.pyplot as plt x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # 定义2个列表分别作为两条折线的Y轴数据 y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 指定折线的颜色、线宽和样式 ln1, = plt.plot(x_data, y_data, color = 'red', linewidth = 2.0, linestyle = '--') ln2, = plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0, linestyle = '-.') # 调用legend函数设置图例 plt.legend(handles=[ln2, ln1], labels=['Android基础', 'Java基础'], loc='lower right') # 调用show()函数显示图形 plt.show()上面程序在调用 plot() 函数绘制折线图时,获取了该函数的返回值。由于该函数的返回值是一个列表,而此处只需要获取它返回的列表的第一个元素(第一个元素才代表该函数所绘制的折线图),因此程序利用返回值的序列解包来获取。
上面程序中,第 11 行代码用于为 ln2、ln1 所代表的折线添加图例(按传入该函数的两个列表的元素顺序一一对应),其中 loc 参数指定图例的添加位置,该参数支持如下参数值:
- 'best':自动选择最佳位置。
- 'upper right':将图例放在右上角。
- 'upper left':将图例放在左上角。
- 'lower left':将图例放在左下角。
- 'lower right':将图例放在右下角。
- 'right':将图例放在右边。
- 'center left':将图例放在左边居中的位置。
- 'center right':将图例放在右边居中的位置。
- 'lower center':将图例放在底部居中的位置。
- 'upper center':将图例放在顶部居中的位置。
- 'center':将图例放在中心。
运行上面程序,将会发现应程序并没有绘制图例,这是因为 Matplotlib 默认不支持中文字体。如果希望在程序中修改 Matplotlib 的默认字体,则可按如下步骤进行:
- 使用 matplotlib.font_manager 子模块下的 FontProperties 类加载中文字体。
- 在调用 legend() 函数时通过 prop 属性指定使用中文字体。
将上面程序中第 11 行代码改为如下几行代码:
import matplotlib.font_manager as fm # 使用Matplotlib的字体管理器加载中文字体 my_font=fm.FontProperties(fname="C:\Windows\Fonts\simkai.ttf") # 调用legend函数设置图例 plt.legend(handles=[ln2, ln1], labels=['Android基础', 'Java基础'], loc='lower right', prop=my_font)上面程序使用 FontProperties 类来加载 C:Windows\Fonts\simkai.ttf 文件所对应的中文字体,因此需要保证系统能找到该路径下的中文字体。
再次运行上面程序,将看到如图 1 所示的效果。
图 1 使用 legend() 函数指定图例
在使用 legend() 函数时可以不指定 handles 参数,只传入 labels 参数,这样该 labels 参数将按顺序为折线图中的多条折线添加图例。因此,可以将上面第 5 行代码改为如下形式:
plt.legend(labels=['Java基础', 'Android基础'], loc='lower right', prop=my_font)上面代码只指定了 labels 参数,该参数传入的列表包含两个字符串,其中第一个字符串将作为第一条折线(虚线)的图例,第二个字符串将作为第二条折线(短线、点相间的虚线)的图例。
Matplotlib 也允许在调用 plot() 函数时为每条折线分别传入 label 参数,这样程序在调用 legend() 函数时就无须传入 labels、handles 参数了。例如如下程序:
import matplotlib.pyplot as plt x_data = ['2013', '2014', '2015', '2016', '2017', '2018', '2019'] # 定义2个列表分别作为两条折线的Y轴数据 y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700] # 指定折线的颜色、线宽和样式 plt.plot(x_data, y_data, color = 'red', linewidth = 2.0, linestyle = '--', label='Java基础') plt.plot(x_data, y_data2, color = 'blue', linewidth = 3.0, linestyle = '-.', label='Android基础') import matplotlib.font_manager as fm # 使用Matplotlib的字体管理器加载中文字体 my_font=fm.FontProperties(fname="C:\Windows\Fonts\simkai.ttf") # 调用legend函数设置图例 plt.legend(loc='best') # 调用show()函数显示图形 plt.show()上面程序在调用 plot() 函数时传入了 label 参数,这样每条折线本身己经具有图例了,因此程序在调用 legend() 函数生成图例时无须传入 labels 参数。
正如从上面程序中所看到的,每次绘制中文内容时都需要设置字体,那么是否能改变 Matplotlib 的默认字体呢?答案是肯定的。在 Python 的交互式解释器中输入如下两行命令:
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
'D:\\Python\\Python36\\lib\\site-packages\\matplotlib\\mp1-data\\matplotlibrc'
#font.family:sans-serif
上面这行代码用于配置 Matplotlib 的默认字体,取消运行配置代码之前的注释符号(#),并将后面的 sans-serif 修改为本地己有的中文字体。例如使用微软雅黑字体,只要将上面的配置代码修改为如下形式即可:font.family: Microsoft YaHei
通过上面设置,即可改变 Matplotlib 的默认字体,这样即可避免每次调用 legend() 函数时都需要额外指定字体。所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频