如何在Matplotlib同图中为多拟合曲线设置统一图例标签
解决方法
要把所有拟合曲线的图例合并为单个“Fit”项,有两种简单可行的方式:
方法一:仅首次循环添加拟合曲线的图例标签
在循环中,只在第一次迭代时给拟合曲线设置label='Fit',后续迭代不设置label参数。这样matplotlib只会为第一条拟合线生成图例项,而所有拟合线样式一致,完全可以代表整体:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(1, 6, 10) plt.figure() for i in range(10): T = i + 20 Fit = 4 * x - (2 + i) noise = np.random.normal(loc=0, scale=1.0, size=len(Fit)) data_exp = Fit + noise/5 plt.scatter(x, data_exp, marker='o', label=f'Experimental data T = {T}°C') # 仅第一次循环添加拟合线的图例标签 if i == 0: plt.plot(x, Fit, 'k-', label='Fit') else: plt.plot(x, Fit, 'k-') plt.xlabel('Optical power (mW)') plt.ylabel('Current (mA)') plt.legend() plt.grid(True) plt.show()
方法二:手动创建自定义图例
如果需要更灵活的控制,可以手动创建图例元素,把所有拟合曲线映射到同一个图例条目:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(1, 6, 10) plt.figure() # 先绘制所有曲线,不添加拟合线的label for i in range(10): T = i + 20 Fit = 4 * x - (2 + i) noise = np.random.normal(loc=0, scale=1.0, size=len(Fit)) data_exp = Fit + noise/5 plt.scatter(x, data_exp, marker='o', label=f'Experimental data T = {T}°C') plt.plot(x, Fit, 'k-') # 创建自定义图例项:黑色实线对应"Fit" from matplotlib.lines import Line2D custom_lines = [Line2D([0], [0], color='k', linestyle='-')] # 获取现有散点的图例项,再合并自定义项 handles, labels = plt.gca().get_legend_handles_labels() handles.extend(custom_lines) labels.extend(['Fit']) plt.legend(handles=handles, labels=labels) plt.xlabel('Optical power (mW)') plt.ylabel('Current (mA)') plt.grid(True) plt.show()
两种方法都能实现图例精简,第一种更简洁高效,适合样式统一的场景;第二种适合需要对图例做更多自定义调整的情况。
内容的提问来源于stack exchange,提问作者Camille
相关产品推荐
相关产品推荐

