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

基于matplotlib绘制多属性机器任务耗时图表的技术问询

多维度效率数据可视化方案(Matplotlib新手友好)

嘿,作为matplotlib新手,想要把包含machine、weights、sets和time的多维度数据可视化,选对图表类型就成功一半啦!我给你几个实用的方案,附带可直接运行的代码示例,你可以根据自己的需求调整~

1. 分组条形图(最推荐:直观对比同参数下的机器效率)

这个图表能把相同(weights, sets)参数组合下,不同机器的耗时放在同一组对比,谁快谁慢一目了然,完全匹配你的数据场景。

代码示例:

import matplotlib.pyplot as plt
import pandas as pd

# 把你的原始数据转成DataFrame(新手友好的格式)
efficiency = [
    {'weights': '25', 'sets': '5', 'time': '8.48', 'machine': 'a'},
    {'weights': '100', 'sets': '25', 'time': '7.43', 'machine': 'a'},
    {'weights': '25', 'sets': '5', 'time': '8.70', 'machine': 'b'},
    {'weights': '100', 'sets': '25', 'time': '7.73', 'machine': 'b'},
    {'weights': '25', 'sets': '5', 'time': '7.14', 'machine': 'c'},
    {'weights': '100', 'sets': '25', 'time': '8.38', 'machine': 'c'},
    {'weights': '25', 'sets': '5', 'time': '6.11', 'machine': 'd'}
]
df = pd.DataFrame(efficiency)
# 把time转成数值类型(不然没法绘图)
df['time'] = df['time'].astype(float)
# 生成参数组合标签(比如"25kg - 5组")
df['param'] = df['weights'] + 'kg - ' + df['sets'] + ' sets'

# 获取所有参数组合和机器列表
params = df['param'].unique()
machines = df['machine'].unique()
bar_width = 0.2  # 每组内条形的宽度
x = range(len(params))  # 参数组合的x轴位置

# 绘制分组条形
plt.figure(figsize=(10, 6))
for i, machine in enumerate(machines):
    # 筛选当前机器的数据
    machine_data = df[df['machine'] == machine]
    # 按参数组合排序,保证x轴对齐
    machine_data = machine_data.set_index('param').reindex(params)
    # 绘制条形
    plt.bar([pos + i*bar_width for pos in x], machine_data['time'], width=bar_width, label=f'Machine {machine}')

# 设置图表细节
plt.xlabel('Parameter Combination', fontsize=12)
plt.ylabel('Time (minutes)', fontsize=12)
plt.title('Task Time by Machine & Parameters', fontsize=14)
plt.xticks([pos + bar_width*(len(machines)-1)/2 for pos in x], params, fontsize=10)
plt.legend()
plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

2. 折线图(适合观察参数变化时的效率趋势)

如果你的数据后续会补充更多参数组合(比如不同重量/组数的测试),折线图能清晰展示同一机器在不同参数下的耗时变化趋势,也能对比不同机器的趋势差异。

代码示例:

import matplotlib.pyplot as plt
import pandas as pd

# 同样先转成DataFrame
df = pd.DataFrame(efficiency)
df['time'] = df['time'].astype(float)
# 把weights转成数值,方便按顺序排序
df['weights'] = df['weights'].astype(int)
df['sets'] = df['sets'].astype(int)

# 按weights和sets排序
df = df.sort_values(['weights', 'sets'])

plt.figure(figsize=(10, 6))
# 遍历每个机器,绘制折线+数据点
for machine in df['machine'].unique():
    machine_data = df[df['machine'] == machine]
    # 用"weights-sets"作为x轴标签
    x_labels = [f"{w}kg-{s}sets" for w, s in zip(machine_data['weights'], machine_data['sets'])]
    plt.plot(x_labels, machine_data['time'], marker='o', label=f'Machine {machine}')

plt.xlabel('Parameter Combination', fontsize=12)
plt.ylabel('Time (minutes)', fontsize=12)
plt.title('Efficiency Trend Across Parameters by Machine', fontsize=14)
plt.legend()
plt.grid(alpha=0.3)  # 添加网格,方便读数
plt.tight_layout()
plt.show()

3. 热力图(适合快速定位最优/最差组合)

如果你的数据量比较大,热力图可以用颜色深浅直观展示不同机器+参数组合的耗时高低,红色代表耗时久(效率低),蓝色代表耗时短(效率高)。

代码示例:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame(efficiency)
df['time'] = df['time'].astype(float)
df['param'] = df['weights'] + 'kg - ' + df['sets'] + ' sets'

# 把数据转成透视表(适合画热力图的格式)
heatmap_data = df.pivot(index='machine', columns='param', values='time')

plt.figure(figsize=(10, 6))
# 绘制热力图,添加数值标注
sns.heatmap(heatmap_data, annot=True, cmap='coolwarm', fmt='.2f', cbar_kws={'label': 'Time (minutes)'})
plt.title('Task Time Heatmap (Machine vs Parameters)', fontsize=14)
plt.tight_layout()
plt.show()

小提示:

  • 如果某个参数组合下某台机器没有数据(比如你的示例里machine d没有100kg-25sets的数据),绘图时会自动留白或显示NaN,不影响整体效果;
  • 可以根据需求调整颜色主题(比如把cmap='coolwarm'改成'viridis');
  • 新手可以先从分组条形图入手,代码逻辑简单,效果直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:46