如何优化Ping时间散点图:移除0值点并添加最值水平线
Ping耗时散点图优化方案
问题背景
我编写的Python代码从EDS4008_2023_04_12.txt文件提取数据绘制散点图,X轴为测试运行时间(分钟),Y轴为成功Ping命令的耗时(ms)。当前图表存在两个问题:
- 存在Y轴数值为0的无效数据点;
- 缺少Y轴读数最大值和最小值的水平参考线,不符合预期样式。
修改后的代码
import matplotlib.pyplot as plt # 读取文件数据 with open("EDS4008_2023_04_12.txt", 'r') as data: lines = data.readlines() # 提取有效数据,过滤无效值 time = [] ping_time = [] index = 0 for string in lines: index += 1 if " time" in string and " bytes" in string: var1 = string.split(' ')[8] if "=" in var1: t = float(var1.split("=")[1].split("m")[0]) ping_time.append(t) time.append(index / 60) elif "<" in var1: t = float(var1.split("<")[1].split("m")[0]) ping_time.append(t) time.append(index / 60) else: print("解析错误,跳过该数据") # 直接跳过不符合条件的行,不添加无效0值 # 二次过滤确保无0值数据 valid_time = [] valid_ping = [] for t, pt in zip(time, ping_time): if pt > 0: valid_time.append(t) valid_ping.append(pt) # 绘制散点图 plt.scatter(valid_time, valid_ping) # 添加最大值、最小值水平参考线 ping_max = max(valid_ping) ping_min = min(valid_ping) plt.axhline(y=ping_max, color='red', linestyle='--', label=f'最大值: {ping_max:.2f} ms') plt.axhline(y=ping_min, color='green', linestyle='--', label=f'最小值: {ping_min:.2f} ms') # 配置图表标签与标题 plt.xlabel('测试运行时间(分钟)') plt.ylabel('Ping耗时(ms)') plt.title('Ping耗时随时间变化趋势') plt.legend() plt.show()
关键修改说明
1. 移除无效数据点
- 取消给无效行添加
0值的操作,直接跳过不符合格式的行; - 将提取的Ping耗时转为
float数值类型,便于后续数值校验; - 增加二次过滤步骤,确保所有Y轴数值>0的有效数据才被用于绘图。
2. 添加水平参考线
- 计算有效Ping数据的最大值和最小值;
- 使用
plt.axhline()绘制两种颜色的虚线参考线,并通过图例标注具体数值,直观展示耗时极值。
图表效果对比
- 修改前:图表底部存在大量Y轴为0的无效点,遮挡有效数据趋势;
- 修改后:仅显示有效Ping耗时点,同时红色虚线标注最大耗时、绿色虚线标注最小耗时,数据趋势清晰直观。
内容的提问来源于stack exchange,提问作者H A
相关产品推荐
相关产品推荐

