annotate matplotlib
1. 基本用法
在Matplotlib中,annotate()函数是用来在图形上添加注释的。可以选择在图中的任何位置添加注释,包括指定的坐标点、数据点或者箭头指向的位置。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.annotate('This point', (3, 9), xytext=(2, 10),
arrowprops=dict(facecolor='black', shrink=0.05))
plt.show()
Output:
运行结果会在图中添加一个指向坐标(3, 9)的注释,注释内容为”This point”,并且有箭头指向。
2. 指定箭头属性
在annotate()函数中,可以通过arrowprops参数来指定箭头的属性,如颜色、箭头的起始点和终点位置、箭头的长度等。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.annotate('This point', (3, 9), xytext=(2, 10),
arrowprops=dict(arrowstyle='->', connectionstyle='angle,angleA=0,angleB=90,rad=10', color='red'))
plt.show()
Output:
运行结果会在图中添加一个指向坐标(3, 9)的注释,注释内容为”This point”,箭头按照指定属性进行绘制。
3. 使用文本框
除了在annotate()函数中指定注释的内容外,还可以添加一个文本框来显示更多信息。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.annotate('This point', (3, 9), xytext=(2, 10),
bbox=dict(boxstyle='round,pad=0.5', fc='cyan', ec='black', lw=2))
plt.show()
Output:
运行结果会在图中添加一个指向坐标(3, 9)的注释,注释内容为”This point”,并且有一个带有圆角的文本框。
4. 添加多个注释点
在Matplotlib中,可以添加多个注释点来标注图形的不同部分,例如多个数据点、特定区域等。
示例代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
for i, txt in enumerate(['Point1', 'Point2', 'Point3', 'Point4']):
plt.annotate(txt, (x[i], y[i]), xytext=(x[i]+0.5, y[i]+1),
arrowprops=dict(facecolor='black', shrink=0.05))
plt.show()
Output:
运行结果会在图中添加四个注释点,分别标注”Point1″、”Point2″、”Point3″、”Point4″。
5. 控制文本的字体和样式
可以通过设置字体大小、颜色、样式等属性来控制注释部分的外观。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.annotate('This point', (3, 9), xytext=(2, 10),
fontdict={'family': 'serif', 'color': 'blue', 'weight': 'bold', 'size': 12})
plt.show()
运行结果会在图中添加一个指向坐标(3, 9)的注释,注释内容为”This point”,并且字体大小为12,颜色为蓝色,加粗。
6. 添加注释文本的旋转
有时候需要控制注释文本的旋转角度,可以通过设置rotation属性来实现。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.annotate('This point', (3, 9), xytext=(2, 10),
rotation=45)
plt.show()
Output:
运行结果会在图中添加一个指向坐标(3, 9)的注释,注释内容为”This point”,并且旋转角度为45度。
7. 在不同坐标系中添加注释
除了在图形坐标系中添加注释外,还可以在不同坐标系中添加注释,例如数据坐标系、指定坐标系等。
示例代码:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [1, 4, 9, 16])
bbox_props = dict(boxstyle='rarrow,pad=0.3', fc='cyan', ec='b', lw=2)
t = ax.annotate('Data point', (3, 9), (2, 10), arrowprops=dict(arrowstyle='->'), bbox=bbox_props)
plt.show()
Output:
运行结果会在图中添加一个指向数据点(3, 9)的注释,注释内容为”Data point”。
8. 使用自定义箭头样式
除了Matplotlib提供的默认箭头样式外,还可以使用自定义的箭头样式来标注图形。
示例代码:
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
arr = FancyArrowPatch(posA=(2, 8), posB=(4, 12), arrowstyle='fancy',
mutation_scale=15, color='orange')
plt.gca().add_patch(arr)
plt.show()
Output:
运行结果会在图中添加一个自定义样式的箭头,箭头起始点为(2, 8),终点为(4, 12),颜色为橙色。
9. 在图中添加多个箭头
除了添加单个箭头外,还可以在图形中添加多个箭头,以标注图形的不同部分。
示例代码:
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
arr1 = FancyArrowPatch(posA=(1, 1), posB=(3, 9), arrowstyle='->',
mutation_scale=15, color='green')
plt.gca().add_patch(arr1)
arr2 = FancyArrowPatch(posA=(2, 4), posB=(4, 16), arrowstyle='->',
mutation_scale=15, color='blue')
plt.gca().add_patch(arr2)
plt.show()
Output:
运行结果会在图中添加两个箭头,分别连接(1, 1)至(3, 9)和(2, 4)至(4, 16)。
10. 控制箭头的长度和风格
可以通过设置mutation_scale参数来控制箭头的长度,箭头的风格可以通过mutation_scale参数来调整。
示例代码
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
arr1 = FancyArrowPatch(posA=(1, 1), posB=(3, 9), arrowstyle='fancy',
mutation_scale=20, color='red')
plt.gca().add_patch(arr1)
arr2 = FancyArrowPatch(posA=(2, 4), posB=(4, 16), arrowstyle='simple',
mutation_scale=30, color='purple')
plt.gca().add_patch(arr2)
plt.show()
Output:
运行结果会在图中添加两个箭头,一个箭头风格为fancy,长度为20,颜色为红色,另一个箭头风格为simple,长度为30,颜色为紫色。
11. 控制箭头的透明度
可以通过设置alpha参数来控制箭头的透明度,使得箭头在图形中更加自然。
示例代码:
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
arr = FancyArrowPatch(posA=(1, 1), posB=(3, 9), arrowstyle='fancy',
mutation_scale=15, color='green', alpha=0.5)
plt.gca().add_patch(arr)
plt.show()
Output:
运行结果会在图中添加一个半透明的箭头,连接(1, 1)至(3, 9),颜色为绿色。
12. 在3D图形中添加注释
除了在2D图形中添加注释外,Matplotlib也支持在3D图形中添加注释,可以标注不同数据点的位置。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.array([1, 2, 3, 4])
y = np.array([1, 2, 3, 4])
z = np.array([1, 4, 9, 16])
ax.plot(x, y, z)
for i, txt in enumerate(['Point1', 'Point2', 'Point3', 'Point4']):
ax.text(x[i], y[i], z[i], txt, color='red')
plt.show()
Output:
运行结果会在3D图形中添加四个注释点,分别标注”Point1″、”Point2″、”Point3″、”Point4″。
13. 添加带有自定义箭头样式的3D注释
在3D图形中也可以添加带有自定义箭头样式的注释,以标识图形的不同部分。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.patches import FancyArrowPatch
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.array([1, 2, 3, 4])
y = np.array([1, 2, 3, 4])
z = np.array([1, 4, 9, 16])
arr = FancyArrowPatch((2,2,4), (4,4,16), arrowstyle='-|>', mutation_scale=15, color='purple')
for i in range(len(x)):
ax.text(x[i], y[i], z[i], f'Point{i+1}', color='blue')
ax.add_patch(arr)
plt.show()
运行结果会在3D图形中添加四个注释点,分别标注”Point1″、”Point2″、”Point3″、”Point4″,同时添加一个连接(2, 2, 4)至(4, 4, 16)的自定义箭头。
14. 控制3D注释的字体样式和大小
在3D图形中添加注释时,也可以控制注释文本的字体样式和大小,以使得注释更加清晰。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.array([1, 2, 3, 4])
y = np.array([1, 2, 3, 4])
z = np.array([1, 4, 9, 16])
for i, txt in enumerate(['Point1', 'Point2', 'Point3', 'Point4']):
ax.text(x[i], y[i], z[i], txt, color='green', fontsize=12, style='italic')
plt.show()
Output:
运行结果会在3D图形中添加四个注释点,分别标注”Point1″、”Point2″、”Point3″、”Point4″,并且字体为斜体绿色。
15. 在图中添加文本
除了添加箭头和注释外,还可以直接在图中添加文字来标识图形的不同部分。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.text(2, 8, 'Text Example', fontsize=12, color='blue')
plt.show()
Output:
运行结果会在图中添加一个文本”Text Example”,位置在坐标(2, 8),字体大小为12,颜色为蓝色。
16. 添加多个文本
在图中可以添加多个文本信息,用于标记不同的数据点或者图形。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.text(1, 1, 'Point1', fontsize=10, color='red')
plt.text(2, 4, 'Point2', fontsize=10, color='blue')
plt.text(3, 9, 'Point3', fontsize=10, color='green')
plt.text(4, 16, 'Point4', fontsize=10, color='purple')
plt.show()
Output:
运行结果会在图中添加四个文本,分别标注”Point1″、”Point2″、”Point3″、”Point4″。
17. 控制文本的对齐方式
可以通过设置horizontalalignment和verticalalignment参数来控制文本的对齐方式,使得文本在图形中居中或者左右对齐等。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.text(2, 8, 'Centered Text', fontsize=12, color='blue',
horizontalalignment='center', verticalalignment='center')
plt.show()
Output:
运行结果会在图中添加一个居中对齐的文本”Centered Text”,位置在坐标(2, 8)。
18. 在图中添加带有背景框的文本
在Matplotlib中,可以在文本周围添加一个带有背景框的文本框,以突出显示文本信息。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.text(2, 8, 'Framed Text', fontsize=12, color='red', bbox=dict(facecolor='yellow', alpha=0.5))
plt.show()
Output:
运行结果会在图中添加一个带有黄色背景框的文本”Framed Text”,位置在坐标(2, 8),颜色为红色。
19. 在图中添加图例
当图中包含多条曲线时,可以添加图例来说明各个曲线代表的含义,以便更好地理解图形。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], label='Line 1')
plt.plot([1, 2, 3, 4], [2, 3, 5, 8], label='Line 2')
plt.legend()
plt.show()
Output:
运行结果会在图中添加一个图例,分别标注”Line 1″和”Line 2″代表的曲线。
20. 控制图例的位置和样式
可以通过设置loc参数来控制图例的位置,使得图例可以放置在图形的任意位置。
示例代码:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16], label='Line 1')
plt.plot([1, 2, 3, 4], [2, 3, 5, 8], label='Line 2')
plt.legend(loc='upper left', fontsize='large', fancybox=True, shadow=True)
plt.show()
Output:
运行结果会在图中添加一个图例,位置在左上角,字体大小为大号,带有阴影效果。