无法播放?请 点击这里 跳转到Youtube
切换视频源:

上一章学习了坐标轴(范围Lim,记号Tick)和边框(Spines),本章接着学习图例 (Legend) 和标注 (Text, Annotate) 相关的内容。

首先导入相关的库和用来创建图表的数据:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-4, 4, 100)
y1 = 2 * x
y2 = x ** 2

图例 Legend

图例用于对图表数据进行更具体的说明,能够帮助我们更好地理解数据。图例通常集中于图中一角或一侧,可以使用不同符号和颜色的组合表示。

在legend() 函数中传入一个list,其中定义好数据的注明,图例会默认出现在右下角,标注不同颜色的线所代表的内容:

plt.plot(x, y1)
plt.plot(x, y2)
plt.legend(['line1', 'line2'])
plt.show()

我们可以在使用plot()函数时显性定义label的内容,然后直接使用legend()画出图例:

plt.plot(x, y1, label = "line 1") # legend需要label才能展示
plt.plot(x, y2, label = 'line 2')
plt.legend()
plt.show()

如果想要移动图例的位置,可以通过设定loc参数进行操作:

plt.plot(x, y1, label = "line 1") 
plt.plot(x, y2, label = 'line 2')
plt.legend(loc = "upper right") # 其他loc参数: upper right, upper left, lower right, lower left, ...
plt.show()

除了位置之外,我们还可以设置其他的参数对图例进行自定义:

plt.plot(x, y1, label = "linear line") # legend需要label才能展示
plt.plot(x, y2, label = "line 2")
plt.legend(loc = 0, title = "legend title", shadow=True, ncol = 2, facecolor = "#F5F5F5")
plt.show()

标注

Matplotlib中有两种标注,一种是无指向性标注text,另一种是指向性注释annotate。

Text 无指向型标注

文本标注可以放置在轴域的任意位置,最常用的用例是标注绘图的某些特征。text()用于实现文本标注:

plt.plot(x, y1)
plt.plot(x, y2)
plt.text(-0.5, 5, "two functions") # 在x为-0.5,y为5的区域开始文本标注
plt.show()

我们也可以通过设置不同的参数,对文本标注进行更多样的操作:

plt.plot(x, y1)
plt.plot(x, y2)
plt.text(-1, 5, "two functions", family="Times New Roman", fontsize=18, fontweight="bold", color='red', 
         bbox=dict(boxstyle="round", fc="none", ec="black"))
plt.show()

Annotate 指向型注释

Annotate 称为指向型注释,标注不仅包含注释的文本内容还包含箭头指向。

annotate()函数用于注释,xy参数代表箭头指向的点,xytext代表文本标注开始的点:

plt.plot(x, y1, label = "line1")
plt.plot(x, y2, label = "line2")
plt.annotate("y = 2x", xy = (1, 2), xytext= (2, 0), arrowprops = dict(arrowstyle="->"))
plt.legend()
plt.show()

指向型标注中有很多不同的自定义设置,比如在文本标注上加上方形外框:

plt.plot(x, y1, label = "line1")
plt.plot(x, y2, label = "line2")
plt.annotate("y = 2x", xy = (1, 2), xytext= (2, 0), 
             arrowprops = dict(arrowstyle="->"),
             bbox=dict(boxstyle="round", fc="none", ec="gray")) # boxstyle方形外框: facecolor, edgecolor
plt.legend()
plt.show()

又或者使用linestyle和connectionstyle改变线的种类和弯曲程度:

plt.plot(x, y1, label = "line1")
plt.plot(x, y2, label = "line2")
plt.annotate("y = 2x", xy = (1, 2), xytext= (2, 0), 
             arrowprops = dict(arrowstyle="->", linestyle="--", connectionstyle="arc3,rad=-.5"), # arc3只控制弯曲程度, rad代表箭头弯曲程度, +-定义弯的方向
             bbox=dict(boxstyle="round", fc="none", ec="gray"))
plt.legend()
plt.show()

以上就是关于图例和标注的基本内容啦,只要大家掌握上面提到的设置,就能为图表加入更丰富的信息!