【Python篇】matplotlib超详细教程-由入门到精通(下篇)1:https://developer.aliyun.com/article/1617468
7.4 自定义图例 (Legend)
除了基本的图例位置、字体大小和样式的设置,matplotlib
还提供了更多的自定义选项,帮助我们进一步控制图例的外观和表现形式。在数据可视化中,合理的图例能够帮助读者快速理解图表中的信息。
7.4.1 更改图例边框与透明度
我们可以通过 framealpha
设置图例的透明度,通过 edgecolor
设置边框颜色。
示例:修改图例边框颜色与透明度
import matplotlib.pyplot as plt # 定义数据 x = [1, 2, 3, 4, 5] y1 = [1, 4, 9, 16, 25] y2 = [2, 3, 5, 7, 11] # 创建图表 plt.plot(x, y1, label='数据 1', color='blue') plt.plot(x, y2, label='数据 2', color='green') # 自定义图例的样式 plt.legend(loc='upper left', fontsize=12, frameon=True, edgecolor='red', framealpha=0.5) # 添加标题 plt.title('自定义图例边框颜色和透明度') # 显示图表 plt.show()
解释:
edgecolor='red'
:将图例的边框设置为红色。framealpha=0.5
:将图例的背景设置为半透明,值越接近 1,透明度越低。
拓展:
- 通过调节
framealpha
,我们可以创建更柔和的图例,避免它遮挡住重要的图表内容。 edgecolor
可以帮助图例在复杂的背景图表中显得更加突出或和谐。
7.4.2 使用多个图例
有时候,我们的图表可能需要使用多个图例来区分不同的数据组。为了实现这一点,我们可以在同一张图表中放置多个图例。
示例:多图例展示
import matplotlib.pyplot as plt # 定义数据 x = [1, 2, 3, 4, 5] y1 = [1, 4, 9, 16, 25] y2 = [2, 3, 5, 7, 11] y3 = [10, 12, 14, 16, 18] # 创建图表 line1, = plt.plot(x, y1, label='数据 1', color='blue') line2, = plt.plot(x, y2, label='数据 2', color='green') # 为第一个图例自定义样式并放置于图表的左上角 plt.legend(handles=[line1, line2], loc='upper left', title='主要数据') # 再添加一个数据和图例 line3, = plt.plot(x, y3, label='数据 3', color='red') # 使用 ax.legend() 来创建第二个图例,并放置于右上角 plt.gca().add_artist(plt.legend(handles=[line1, line2], loc='upper left')) plt.legend(handles=[line3], loc='upper right', title='附加数据') # 添加标题 plt.title('多图例展示示例') # 显示图表 plt.show()
解释:
handles
:指定要展示的线条对象,用于手动选择显示哪些数据系列。add_artist()
:将第一个图例添加到当前的轴 (axes
) 上,这样第二个图例可以独立添加。
拓展:
- 多个图例的使用有助于在一张图表中展示大量数据时,避免混淆,保持数据的清晰和可读性。
- 可以通过
add_artist()
方法将任意自定义的图例或其他元素添加到图表中。
7.4.3 动态更新图例
有时,在动态图表中,数据是动态变化的,图例可能需要根据数据的变化实时更新。我们可以通过动态调整图例的位置、内容和样式,使其与图表内容同步变化。
示例:动态更新图例
import matplotlib.pyplot as plt import numpy as np import time # 初始化图表 plt.ion() # 开启交互模式 fig, ax = plt.subplots() x = np.linspace(0, 2 * np.pi, 100) y = np.sin(x) line, = ax.plot(x, y, label='sin(x)') # 初始图形及图例 legend = ax.legend(loc='upper right') # 初始化图例 # 动态更新图表 for i in range(50): y = np.sin(x + i / 10.0) line.set_ydata(y) # 更新 Y 轴数据 ax.set_title(f"当前帧: {i}") # 更新标题 legend.set_title(f"帧数 {i}") # 动态更新图例标题 fig.canvas.draw() # 重新绘制图表 fig.canvas.flush_events() # 刷新图表显示 time.sleep(0.1) # 模拟数据变化的时间间隔 plt.ioff() # 关闭交互模式 plt.show() # 显示最终图表
解释:
legend.set_title()
:动态更新图例的标题,随时间变化。- 动态图表和图例的更新通过
canvas.draw()
和flush_events()
来实现。
拓展:
- 动态图表在展示时间序列数据、监控数据变化时非常有用。通过图例的动态更新,可以使图表更加直观,帮助观众理解图表中的每一帧数据。
7.5 设置图表的标题、轴标签、注释和样式
matplotlib
提供了全面的定制选项来设置图表的标题、坐标轴标签和注释。通过调整字体、颜色、大小等参数,我们可以让图表更加清晰易懂。
示例:自定义图表标题与坐标轴标签样式
import matplotlib.pyplot as plt # 定义数据 x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25] # 创建图表 plt.plot(x, y) # 自定义标题和坐标轴标签的样式 plt.title('自定义标题', fontsize=20, fontweight='bold', color='purple') plt.xlabel('自定义 X 轴标签', fontsize=14, fontstyle='italic', color='blue') plt.ylabel('自定义 Y 轴标签', fontsize=14, fontstyle='italic', color='red') # 显示图表 plt.show()
解释:
fontsize
:设置字体大小。fontweight
:设置字体的粗细(例如bold
表示加粗)。fontstyle
:设置字体样式(例如italic
表示斜体)。color
:设置字体颜色。
拓展:
- 标题、轴标签和图例的样式定制可以帮助你创建更具个性化的图表,并且可以与企业的品牌风格保持一致。
7.6 多坐标轴图表
在一些数据可视化任务中,我们可能需要在一个图表中显示多种不同类型的数据,而这些数据的数值范围有很大差异。为了让不同数据能够清晰显示,我们可以在图表中使用多坐标轴。
示例:双 Y 轴图表
import matplotlib.pyplot as plt # 定义数据 x = [1, 2, 3, 4, 5] y1 = [1, 4, 9, 16, 25] # 第一组数据 y2 = [100, 200, 300, 400, 500] # 第二组数据 # 创建图表,绘制第一组数据 fig, ax1 = plt.subplots() ax1.plot(x, y1, 'b-') # 蓝色实线表示 y1 数据 ax1.set_xlabel('X 轴') # 设置 X 轴标签 ax1.set_ylabel('Y1 轴', color='b') # 设置 Y 轴标签 ax1.tick_params('y', colors='b') # 设置 Y 轴刻度颜色 # 创建第二个 Y 轴,绘制第二组数据 ax2 = ax1.twinx() ax2.plot(x, y2, 'r--') # 红色虚线表示 y2 数据 ax2.set_ylabel('Y2 轴', color='r') # 设置第二个 Y 轴标签 ax2.tick_params('y', colors='r') # 设置第二个 Y 轴刻度颜色 # 添加标题 plt.title('双 Y 轴图表示例') # 显示图表 plt.show()
解释:
ax1.twinx()
:创建一个共享 X 轴但有独立 Y 轴的图表。tick_params('y', colors='b')
:设置 Y 轴刻度颜色与线条颜色匹配。
拓展:
- 这种多坐标轴图表在展示例如温度和湿度、价格和销量等数据时非常有用。通过不同的 Y 轴,我们可以更直观地查看数据变化趋势。
7.7 绘制 3D 图形
matplotlib
也支持 3D 图形的绘制,通过 mpl_toolkits.mplot3d
模块,我们可以轻松创建 3D 折线图、3D 散点图等。
示例:绘制 3D 折线图
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np # 创建 3D 图形对象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 定义数据 x = np.linspace(-5, 5, 100) y = np.linspace(-5, 5, 100) z = np.sin(np.sqrt(x**2 + y**2)) # 绘制 3D 折线图 ax.plot(x, y, z) # 设置标题和轴标签 ax.set_title('3D 折线图示例') ax.set_xlabel('X 轴') ax.set_ylabel('Y 轴') ax.set_zlabel('Z 轴') # 显示图表 plt.show()
解释:
projection='3d'
:指定绘制 3D 图形。ax.plot(x, y, z)
:在三维坐标系中绘制折线图。set_zlabel()
:设置 Z 轴标签。
拓展:
- 3D 图表适用于展示多维度数据。你可以使用
plot_surface()
来绘制 3D 曲面,或者scatter()
来绘制 3D 散点图。
7.9 创建动画
matplotlib
的 animation
模块可以用来创建简单的动画,特别是在数据动态变化的场景中,动画能够直观展示数据随时间变化的过程。
示例:创建简单动画
import matplotlib.pyplot as plt import numpy as np import matplotlib.animation as animation # 初始化图表 fig, ax = plt.subplots() x = np.linspace(0, 2 * np.pi, 100) line, = ax.plot(x, np.sin(x)) # 动画更新函数 def update(frame): line.set_ydata(np.sin(x + frame / 10.0)) # 更新 y 数据 return line, # 创建动画 ani = animation.FuncAnimation(fig, update, frames=100, interval=50, blit=True) # 显示动画 plt.show()
解释:
FuncAnimation()
:创建动画,frames
表示动画的帧数,interval
表示每帧之间的间隔时间。update()
:动画每一帧的更新函数,用于动态更新图表数据。
以上就是关于【Python篇】matplotlib超详细教程-由入门到精通(下篇)的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️