5

我必须使用 matplotlib 库绘制几条“曲线”,每条曲线都由水平线段(甚至点)组成。

一个随机的情节示例。 标记点可以省略

我达到了这个目标,用NaNs分隔各个部分。这是我的示例(工作)代码:

from pylab import arange, randint, hold, plot, show, nan, ylim, legend

n = 6
L = 25
hold(True)
for i in range(n):
    x = arange(L, dtype=float)  # generates a 1xL array of floats
    m = randint(1, L)
    x[randint(1, L, m)] = nan  # set m values as NaN
    y = [n - i] * len(x)  #  constant y value
    plot(x, y, '.-')

leg = ['data_{}'.format(j+1) for j in range(n)]
legend(leg)
ylim(0, i + 2)
show()

(实际上,我从整数列表开始:在缺少整数的地方添加NaN

问题:由于每一行都需要一个长度为L的数组,如果L很大,这个解决方案在内存方面可能会很昂贵,而必要和充分的信息是段的限制。

例如,对于由 2 段限制 (0, 500) 和 (915, 62000) 组成的一条线,最好执行以下操作:

niceplot([(0, 500), (915, 62000)], [(1, 1), (1, 1)])

(注意:这个 - 用plot而不是niceplot ... - 是一个工作代码,但它使其他东西......)

4*2 值而不是 62000*2... 有什么建议吗?

(这是我的第一个问题,请宽容^^)

4

1 回答 1

7

这与您希望实现的目标相似吗?

import matplotlib.pyplot as plt

segments = {1: [(0, 500),
                (915, 1000)],
            2: [(0, 250),
                (500, 1000)]}

colors = {1: 'b', 2: 'r'}

for y in segments:
    col = colors.get(y, 'k')
    for seg in segments[y]:
        plt.plot(seg, [y, y], color=col)

我只是将 y 值定义为键和要在每个 y 值处绘制的线段列表(xlo,xhi)。

于 2012-09-06T00:09:42.670 回答