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

使用Ciw时为何可视化图表出现重复节点标签?

Ciw仿真后Pandas柱状图出现重复Node标签的解决方法

你遇到的问题本质是Pandas的plot.bar()默认会为DataFrame的每一行生成一个柱子,而你的slow_df中每个node对应多条记录(每个顾客在该节点的阻塞事件都会生成一行数据),所以x轴会重复显示node标签,尽管node的唯一值只有6个。

验证问题根源

可以先查看slow_df的记录数,确认每个node有多条数据:

print(len(slow_df))  # 结果远大于6,说明每个node对应多条阻塞记录

解决方法:先按Node聚合数据

要让每个node只显示一个柱子,需要先对数据按node分组,计算该节点的总阻塞时间、平均阻塞时间等统计值,再画图。修改后的完整代码如下:

import ciw
import matplotlib.pyplot as plt
import pandas as pd

max_time = 20

# Routing Matrix
R = [[0]*7 for i in range(7)]
R[0][1] = 1
R[1][0] = 1/3
R[1][2] = 1/3
R[1][3] = 1/3
R[2][1] = 1
R[3][1] = 1/2
R[3][5] = 1/2
R[5][3] = 1/3
R[5][4] = 1/3
R[5][6] = 1/3
R[6][5] = 1/2

# Arrival dists
arr_dists = [ciw.dists.Exponential(1/10)] * 3 + [None] * 4

N = ciw.create_network(
    arrival_distributions=arr_dists,
    service_distributions=[ciw.dists.Exponential(1)] * 7,
    routing=R,
    number_of_servers=[1]*7,
    queue_capacities=[1]*7
)

ciw.seed(2018)
Q = ciw.Simulation(N)
Q.simulate_until_max_time(max_time)
slow_df = pd.DataFrame(Q.get_all_records())

# 关键步骤:按node分组,计算总阻塞时间(也可以用mean()计算平均阻塞时间)
grouped_df = slow_df.groupby('node')['time_blocked'].sum().reset_index()

# 绘制柱状图
grouped_df.plot.bar(x='node', y='time_blocked'); plt.show()

补充说明

  • 你之前检查的slow_df.node.unique()仅展示node的唯一值,但不代表每个node只有一条记录,这是导致误解的核心原因。
  • 如果确实需要保留每条记录的柱子但不想x轴重复显示标签,可以手动设置x轴刻度,但这种场景下聚合后展示节点的整体阻塞情况,通常更符合仿真分析的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:29