如何修改Matplotlib折线图中单个缺失数据点的颜色且避免折线落到0值
解决方案
你可以将代表缺失值的0替换为numpy.nan,Matplotlib绘制折线时会自动跳过NaN值,不会产生折线落到0的连线,之后单独对缺失位置做红色标记即可。另外注意你现有代码中point_1、point_2都存在重复赋值的问题,会覆盖第一次定义的数值,可根据实际需求保留对应序列。
修改后的完整代码如下:
import matplotlib.pyplot as plt import numpy as np plt.figure(figsize=(3,2)) no = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 原代码重复赋值point_1,可根据需求保留对应数据,示例保留第二次赋值的数值 point_1 = [88.404, 88.404,88.404, 88.404, 88.404, 88.404, 88.404,88.404, 88.404, 88.404] # 处理point_2的缺失值 point_2 = [72.501, 81.245,76.507,80.989,81.191,77.570,81.817,78.354,82.230,0] # 仅最后一位为缺失值时可以直接赋值:point_2[-1] = np.nan point_2 = [np.nan if val == 0 else val for val in point_2] plt.plot(no, point_1, color='orange', marker='^', linestyle='dashed',label='Measured 1 ') plt.plot(no, point_1, color='orange', marker='*', linestyle='dashed',label='Predicted 1') plt.plot(no, point_2, color='grey', marker='^', linestyle='dashed',label='Measured 2') plt.plot(no, point_2, color='grey', marker='*',linestyle='dashed',label='Predicted 2') # 单独标记缺失的第10个数据点,位置、样式、大小可自行调整 plt.scatter(x=10, y=70, color='red', marker='*', s=50, label='缺失数据') plt.ylim(0, 100) plt.xticks(no,fontsize='8') plt.legend(loc='upper right',prop={'size': 3.5}) plt.xlabel('no.') plt.ylabel('Ms') plt.show()
核心修改说明
- 引入numpy库使用
np.nan替换缺失值标识0,Matplotlib绘制折线时会自动在缺失位置中断,不会出现回落至0的连线 - 新增
plt.scatter单独绘制缺失数据的红色标记,可通过调整x/y参数修改标记位置,marker参数修改标记样式,s参数调整标记大小 - 完全保留原代码的样式配置,仅修改缺失值相关逻辑
内容的提问来源于stack exchange,提问作者abaair davis
相关产品推荐
相关产品推荐

