【问题标题】:is there way to plot graph only for constant data out of mixed data in python?有没有办法只为python中混合数据中的常量数据绘制图表?
【发布时间】: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.

  1. 以上是每秒 5 次调用,最大调用限制为 60(请忽略两者之间的缺失值)。所以,这将是我的 y 轴值。

  2. 对于 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)
  1. Failedcalls 是我图表中要显示的另一条线。这不是问题。 :)

【问题讨论】:

  • 你能添加一个例子的草图来展示你到底需要什么吗?您是否还可以添加一些最少的代码以使其更易于沟通? plt.plot 将在连续点之间绘制直线。 plt.step 会将其绘制为阶梯函数。如果你只想要一条直线,你可以试试plt.axhline(max(values))
  • 为什么要标记 gnuplot?您在寻找 gnuplot 解决方案吗?你想绘制一条 60 的线还是一般的最大值(在你的例子中是 60)?所以,我明白,只有当你在直接序列中多次获得你的值(60)时,你才想要绘制一条线。如果你只有一次 60 怎么办?绘制一个点? x 值应该是多少?数字的索引?与您的示例数据相对应的草图会很有帮助。
  • @theozh,我的错误是我删除了 gnuplot 标签。我也尽力用更多信息编辑问题。希望对您有所帮助,并感谢您的宝贵时间。

标签: python matplotlib graph sipp


【解决方案1】:

这是一种搜索具有相等连续值的数组位置的方法。然后从该位置绘制一条长度为 1 的水平线。

import matplotlib.pyplot as plt
import numpy as np

values = [0, 5, 12, 25, 45, 60, 60, 60, 59, 60, 60, 45, 32, 25, 15, 5, 0]
values = np.array(values)
pos_equal = np.argwhere(values[:-1] == values[1:]).squeeze()
x = np.vstack([pos_equal, pos_equal + 1, np.full_like(pos_equal, np.nan, dtype=float)]).T.ravel()
y = np.repeat(values[pos_equal], 3)
plt.plot(x, y, ls='-', lw=3, color='r')
plt.plot(values, ls=':', lw=0.5, color='b')
plt.show()

x 和 y 数组如下所示:

x: [ 5.,  6., nan,  6.,  7., nan,  9., 10., nan]
y: [ 60,  60,  60,  60,  60,  60,  60,  60,  60]

nan 值会导致行中断。

【讨论】:

  • 是的,我可以像你建议的那样画画。我在想,因为我总是知道我的 max_call 值的第一次和最后一次出现(在这种情况下为 60),我应该删除所有值并将该列表用作 y-axis input 的新值。虽然 x 轴动态缩放仍然是我需要考虑的事情。我将运行更长时间的测试并检查我的逻辑是否有效..非常感谢 JohanC :)
猜你喜欢
  • 1970-01-01
  • 2021-01-20
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多