2

在离散时间序列图中,我尝试替换ax.plot(x,y)ax.vlines(x,y)

  • 我得到错误:vlines() missing 1 required positional argument: 'ymax'

但是,我无法ymax事先知道该值。我怎样才能避免这个错误?

我应该通过解析所有要显示的数据来计算这个值吗?有没有办法告诉 matplotlib 自动适应数据?


关于图表的更多细节:

由于绘制了连续曲线,该图并不准确,而我的数据是离散值随时间的分布。这就是为什么我要使用vlines.

这是我创建图表的代码:

(exception_time_series 对象是一个对象,用于计算程序中给定时间给定异常类型的数量)。

fig = figure(1) 

for exception_time_series in exceptions_time_series.list_exception_time_series:

    time_values, series_values = exception_time_series.time_values, exception_time_series.series_values

    ax = fig.add_subplot(111, autoscale_on=True )

    dates = np.array(time_values)
    x = dates 
    y = np.array(series_values)

    ax.plot(x, y, label=exception_time_series.exception) # <=== using plot 
    ax.legend()

show()

这就是我现在得到的图表:

秒级 SEH 异常率

但我想得到这样的东西,(这将反映它随着时间的推移是不规则的分布):

我想要的图表类型

4

2 回答 2

2

在我看来你想要一个bar情节。

ymax是 的上限vlinesvlines(0, 0, 1)在 x=0 处绘制一条从 y=0 到 y=1 的垂直线。

这是一个工作最小的例子:

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import normal

x = np.linspace(0, 10, 100)
y = normal(0, 1, 100)
bar_width = (max(x) - min(x))/len(x)

plt.bar(x, y, bar_width, facecolor='black')
plt.show()

这是结果: 在此处输入图像描述

于 2014-08-01T16:08:59.523 回答
1

这里ymax实际上不是 yrange - 它是您想要的垂直线的最高值。为了使 vline 图类似于您当前的图,我相信您希望将 ymin 设置为一个零数组,将 ymax 设置为您的 y 值。如果 y 中有负值,则应将 ymin 和 ymax 设为 0 和 y 数组的最小值/最大值。

yz = np.zeros(y.shape)
ymin = np.minimum(yz, y)
ymax = np.maximum(yz, y)

ax.vlines(x, ymin, ymax)
于 2014-08-01T16:09:10.240 回答