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

Python绘制多进程存活/空闲折线图遇格式错误问题求助

解决Matplotlib绘制进程存活/空闲状态折线图的错误

嘿,你的代码报错的核心原因是用错了plt.plot()的参数顺序和用法!

你把进程名"process1"直接放在了第二个参数的位置,但Matplotlib的plt.plot()函数里,第二个参数是用来传y轴数据的,而不是进程标签或者格式字符串。而且"process1"这种字符串会被当成绘图格式代码解析,里面的字母会被误认为是标记符号(比如'p'代表点标记,'r'代表红色),这就触发了ValueError: Illegal format string "process1"; two marker symbols这个错误。

要实现你想要的「折线段代表存活时长,间隔代表空闲时长」的效果,我们需要给每个进程分配一个固定的y轴位置(比如process1在y=1的水平线上),然后分别绘制存活阶段的实线和空闲阶段的虚线。下面是修正后的完整代码:

import matplotlib.pyplot as plt

# 给每个进程分配y轴位置,方便区分
process_y = {"process1": 1, "process2": 2, "process3": 3}
alive_duration = 6  # 进程存活时长
sleep_duration = 2  # 进程空闲时长

# 逐个绘制每个进程的状态
for name, y_pos in process_y.items():
    # 存活阶段:用实线绘制,x从0到存活时长,y固定为进程对应的位置
    plt.plot([0, alive_duration], [y_pos, y_pos], color='darkblue', linewidth=3, label=name if y_pos == 1 else "")
    # 空闲阶段:用虚线绘制,x从存活结束到空闲结束
    plt.plot([alive_duration, alive_duration + sleep_duration], [y_pos, y_pos], color='darkblue', linestyle='--', linewidth=3)

# 美化图表,让可读性更强
plt.yticks(list(process_y.values()), list(process_y.keys()))  # 把y轴数值替换成进程名
plt.xlabel("时间")
plt.ylabel("进程")
plt.title("进程存活与空闲状态展示")
plt.legend()
plt.xlim(0, alive_duration + sleep_duration)
plt.grid(axis='x', linestyle='--', alpha=0.6)
plt.show()

如果你的进程是反复存活-空闲循环的,比如要展示2个周期的状态,可以用下面的代码:

import matplotlib.pyplot as plt

process_y = {"process1": 1, "process2": 2, "process3": 3}
alive_dur = 6
sleep_dur = 2
cycle_count = 2  # 循环次数

for name, y_pos in process_y.items():
    current_time = 0
    for _ in range(cycle_count):
        # 绘制存活段
        plt.plot([current_time, current_time + alive_dur], [y_pos, y_pos], color='darkblue', linewidth=3)
        # 绘制空闲段
        plt.plot([current_time + alive_dur, current_time + alive_dur + sleep_dur], [y_pos, y_pos], color='darkblue', linestyle='--', linewidth=3)
        current_time += alive_dur + sleep_dur

plt.yticks(list(process_y.values()), list(process_y.keys()))
plt.xlabel("时间")
plt.ylabel("进程")
plt.title("多周期进程存活与空闲状态")
plt.xlim(0, cycle_count * (alive_dur + sleep_dur))
plt.grid(axis='x', linestyle='--', alpha=0.6)
plt.show()

这样就能清晰地展示每个进程的存活(实线)和空闲(虚线)时间段啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:53