【发布时间】:2022-01-16 18:03:51
【问题描述】:
我正在使用 SIPp 工具进行 sip 呼叫,它为我提供了一个 csv 统计文件(我配置每 5 秒生成新行),其中包含当前呼叫(整数)列,例如 0,5,12,25,45 ,60,60,60,59,60,60,45,32,25,15,5,0.
-
以上是每秒 5 次调用,最大调用限制为 60(请忽略两者之间的缺失值)。所以,这将是我的 y 轴值。
-
对于 x 轴(这是我的另一个挑战 :( .. ),因为通话时间可以是 30 秒甚至 2 小时。csv 文件以这种格式为我提供时间戳“2021-12-14 01 :11:41.574282 1639424501.574282"。为此(尽我所能,我将所有这些时间戳转换为连续值的差异列表,即 5 使用以下:
T=[] for t in time: tvalue= t.split("\t")[2] T.append(int(float(tvalue))) t_interval = [j-i for i, j in zip(T[:-1], T[1:])]
t_interval 给我 [5, 5, 5, 5, 5...等等]
如果我画一个线性图,那将是一个曲线图(从 0 开始,平线,以 0 结束),我想绘制类似“当第一次达到最大呼叫限制时(即 60)并且在我的总通话持续时间之后说 120 秒(也可能会有所不同),当通话开始结束时,即最后 60 秒(直到这一点)“ 注意:- 在某个时间之间可能会有 58/59 之类的值。 metaplot 或任何 python 绘图模块有没有办法轻松做到这一点?
综上所述,我可以使用下面的方法绘制捕获所有值但不捕获线(对于最大调用应该是平的)的东西:
calls_tup = tuple(zip(list(calls),list(failedcalls)))
x= np.linspace(0,sum(t_interval),len(calls))
y= np.array(calls_tup)
fig, ax = plt.subplots()
ax.plot(x,y)
- Failedcalls 是我图表中要显示的另一条线。这不是问题。 :)
【问题讨论】:
-
你能添加一个例子的草图来展示你到底需要什么吗?您是否还可以添加一些最少的代码以使其更易于沟通?
plt.plot将在连续点之间绘制直线。plt.step会将其绘制为阶梯函数。如果你只想要一条直线,你可以试试plt.axhline(max(values))。 -
为什么要标记 gnuplot?您在寻找 gnuplot 解决方案吗?你想绘制一条 60 的线还是一般的最大值(在你的例子中是 60)?所以,我明白,只有当你在直接序列中多次获得你的值(60)时,你才想要绘制一条线。如果你只有一次 60 怎么办?绘制一个点? x 值应该是多少?数字的索引?与您的示例数据相对应的草图会很有帮助。
-
@theozh,我的错误是我删除了 gnuplot 标签。我也尽力用更多信息编辑问题。希望对您有所帮助,并感谢您的宝贵时间。
标签: python matplotlib graph sipp