Matplotlib标注子图后出现蓝色粗线问题的代码修改方案
问题原因
加粗蓝色线条是同位置同色图形叠印导致的,和添加图例的操作无关:
- 代码先调用
ax.plot()绘制了默认样式的蓝色连续折线 - 之后又调用
ax.scatter()在完全一致的坐标点上绘制了同色系散点 - 散点沿折线紧密排布,和底层折线完全重叠,视觉上就会呈现出线条异常加粗的效果。

修改方案
根据实际可视化需求选一种即可:
方案1:需要折线+数据点标记(最常用)
删除单独的scatter调用,直接在plot()方法中通过marker参数配置点样式,从根源避免叠印,同时直接在绘图时设置label,简化图例调用:
import numpy as np import matplotlib.pyplot as plt def plot_en(filename): data_0 = np.loadtxt(f"{filename[0]}.en") data_1 = np.loadtxt(f"{filename[1]}.en") fig, (ax0, ax1) = plt.subplots(1, 2) plt.subplots_adjust(top=1, bottom=0.08, left=1.5, right=3.5, hspace=0.25, wspace=0.35) # 同时绘制折线和点标记,直接绑定图例文本 ax0.plot(data_0[:, 0], data_0[:, 1], marker='o', label="Admitted") ax1.plot(data_1[:, 0], data_1[:, 1], marker='o', label="Not_Admitted") ax0.set(xlabel="step", ylabel="time") ax1.set(xlabel="step", ylabel="time") ax0.legend() ax1.legend() plot_en(["forward0-on", "forward1-on"])
方案2:需要独立设置折线和散点样式
如果要对折线和散点做差异化样式(比如点线不同色、点带边缘),给散点设置区别于折线的颜色,同时调高散点的图层优先级让点浮在线上方,避免同色叠印:
import numpy as np import matplotlib.pyplot as plt def plot_en(filename): data_0 = np.loadtxt(f"{filename[0]}.en") data_1 = np.loadtxt(f"{filename[1]}.en") fig, (ax0, ax1) = plt.subplots(1, 2) plt.subplots_adjust(top=1, bottom=0.08, left=1.5, right=3.5, hspace=0.25, wspace=0.35) # 绘制折线 ax0.plot(data_0[:, 0], data_0[:, 1], color="#1f77b4", linewidth=1.5) # 绘制差异化样式的散点,zorder调高让点显示在线上层 ax0.scatter( data_0[:, 0], data_0[:, 1], color="white", edgecolor="#1f77b4", s=30, zorder=2, label="Admitted" ) ax1.plot(data_1[:, 0], data_1[:, 1], color="#1f77b4", linewidth=1.5) ax1.scatter( data_1[:, 0], data_1[:, 1], color="white", edgecolor="#1f77b4", s=30, zorder=2, label="Not_Admitted" ) ax0.set(xlabel="step", ylabel="time") ax1.set(xlabel="step", ylabel="time") ax0.legend() ax1.legend() plot_en(["forward0-on", "forward1-on"])
如果只需要展示散点、不需要折线,直接删除两行
ax.plot()相关代码即可。
内容的提问来源于stack exchange,提问作者amirre
相关产品推荐
相关产品推荐

