You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中创建含线条与不同填充样式标记的图例?

在Matplotlib中实现线条+无填充标记的组合显示及正确图例

要实现图中线条与无填充标记的组合效果,同时让图例正确显示两者的组合,可以通过以下方式实现:

核心参数说明

要制作无填充标记,只需在设置标记时添加以下参数之一:

  • markerfacecolor='none':指定标记内部无填充,仅保留边框
  • fillstyle='none':另一种实现无填充标记的等效方式

方法1:直接绘图并自动生成图例

这种方式最简洁,绘制时同时指定线条和标记属性,图例会自动同步显示线条+无填充标记的组合:

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
x = np.linspace(0, 10, 15)
y_fit = 2 * x + 1  # 最佳拟合线数据
y_data = y_fit + np.random.randn(15) * 2  # 带噪声的原始数据

fig, ax = plt.subplots()

# 绘制最佳拟合线:实线 + 无填充圆形标记
ax.plot(x, y_fit, color='darkred', linestyle='-', marker='o',
        markerfacecolor='none', markersize=8, label='最佳拟合线')

# 绘制原始数据:无线条 + 无填充方形标记
ax.plot(x, y_data, color='steelblue', linestyle='', marker='s',
        markerfacecolor='none', markersize=8, label='原始数据')

# 添加图例
ax.legend()

plt.show()

方法2:自定义图例条目(灵活控制样式)

如果需要单独定义图例的样式(比如绘图样式和图例样式不一致时),可以用mlines.Line2D创建自定义图例项,同样设置无填充标记参数:

import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import numpy as np

x = np.linspace(0, 10, 15)
y_fit = 2 * x + 1

fig, ax = plt.subplots()
# 绘制带无填充标记的拟合线
ax.plot(x, y_fit, color='darkred', linestyle='-', marker='o',
        markerfacecolor='none', markersize=8)

# 自定义图例条目,同时包含线条和无填充标记
fit_legend = mlines.Line2D([], [], color='darkred', linestyle='-', marker='o',
                           markerfacecolor='none', markersize=8, label='最佳拟合线')
ax.legend(handles=[fit_legend])

plt.show()

额外技巧

如果需要单独设置标记边框的颜色,可以添加markeredgecolor参数,例如:

ax.plot(x, y_fit, color='red', linestyle='-', marker='o',
        markerfacecolor='none', markeredgecolor='blue', markersize=8)

内容的提问来源于stack exchange,提问作者Idieh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:18:11