Matplotlib 添加图例,任何图表都应该有的元素是图例,pyplot专门提供了legend()
函数用于添加图例,通过设置参数可以改变图例位置,也支持多图例的显示。
极客教程前面有介绍如何添加网格,本文在此基础上添加图例。
添加图例
这里使用legend()
函数将图例和字符串类型的图例说明添加到图表中,如下所示,我们把输入的四个数据点统称为”First series”。
import matplotlib.pyplot as plt
plt.axis([0,5, 0, 20])
plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman")
plt.xlabel('Counting', color = 'gray')
plt.ylabel('Square values', color = 'gray')
plt.text(1, 1.5, 'First')
plt.text(2, 4.5, 'Second')
plt.text(3, 9.5, 'Third')
plt.text(4, 16.5, 'Fourth')
plt.text(1.1, 12, r'$y=x^2', fontsize=20, bbox={'facecolor':'yellow', 'alpha' : 0.2})
plt.grid(True)
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.legend(['First series'])
plt.show()
输出结果如下:
改变图例位置
如上所示,图例默认添加到图形的右上角。如果要修改图例的位置,还是需要添加几个关键字参数。例如,图例的位置由loc
关键字控制,其取值范围为0-10。每个数字代表图表中的一处位置,默认为1
,就是右上角位置。
字符串 | 位置编号 | 位置表述 |
---|---|---|
best |
0 | 最佳位置 |
upper right |
1 | 右上角 |
upper left |
2 | 左上角 |
lower left |
3 | 右下角 |
lower right |
4 | 左下角 |
right |
5 | 右侧 |
center left |
6 | 左侧垂直居中 |
center right |
7 | 右侧垂直居中 |
lower center |
8 | 下方水平居中 |
upper center |
9 | 上方水平居中 |
center |
10 | 正中间 |
如下所示,改变图例的显示位置。
import matplotlib.pyplot as plt
plt.axis([0,5, 0, 20])
plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman")
plt.xlabel('Counting', color = 'gray')
plt.ylabel('Square values', color = 'gray')
plt.text(1, 1.5, 'First')
plt.text(2, 4.5, 'Second')
plt.text(3, 9.5, 'Third')
plt.text(4, 16.5, 'Fourth')
plt.text(1.1, 12, r'$y=x^2', fontsize=20, bbox={'facecolor':'yellow', 'alpha' : 0.2})
plt.grid(True)
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.legend(['First series'], loc=6)
plt.show()
输出结果如下:
多个图例
通常,图例通过标签、颜色或符号向读者表明是哪个序列,应该与其他序列区别开来。前面的例子中,我们只使用了由一个plot()
函数绘制的单个序列。现在我们来看看更常见的情况,在一幅图中同时显示了多个序列。图表中每个序列用一种特定的颜色和符号来表示。从代码实现的角度来看,每个序列都要调用一次plot()
函数,调用顺序跟传给legend()
函数作为参数的文本标签顺序应保持一致。
import matplotlib.pyplot as plt
plt.axis([0,5, 0, 20])
plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman")
plt.xlabel('Counting', color = 'gray')
plt.ylabel('Square values', color = 'gray')
plt.text(1, 1.5, 'First')
plt.text(2, 4.5, 'Second')
plt.text(3, 9.5, 'Third')
plt.text(4, 16.5, 'Fourth')
plt.text(1.1, 12, r'$y=x^2', fontsize=20, bbox={'facecolor':'yellow', 'alpha' : 0.2})
plt.grid(True)
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.plot([1,2,3,4], [0.8,3.5,8,15],'g^')
plt.plot([1,2,3,4], [0.5,2.5,4,12],'b*')
plt.legend(['First series', 'Second Series', 'Third series'], loc=2)
plt.show()
输出结果如下:
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 = '-.')
plt.title("geek-docs.com", fontsize=20, fontname="Times New Roman")
# 调用legend函数设置图例
plt.legend(handles=[ln2, ln1], labels=['Android', 'Java'], loc='lower right')
# 调用show()函数显示图形
plt.show()
输出结果如下:
极客教程相关文章推荐:
Matplotlib 添加网格
Matplotlib 添加文本
Matplotlib Numpy
Matplotlib Pyplot