5

matplotlibライブラリを使用して、それぞれが水平セグメント(またはポイント)で構成されるいくつかの「曲線」をプロットする必要があります。

プロットのランダムな例。 マーカーポイントは省略できます

NaNによってセグメントを分離するというこの目標を達成しました。これは私の例の(動作する)コードです:

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が大きい場合、このソリューションはメモリの点でコストがかかる可能性がありますが、必要十分な情報はセグメントの制限です。

たとえば、制限(0、500)と(915、62000)の2つのセグメントで構成される1つの行の場合、次のようにすると便利です。

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

(注:これは-代わりにplotを使用してniceplot ...-は機能するコードですが、他のものを作成します...)

62000*2の代わりに4*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 値をキーとして定義し、線分 (xlo、xhi) のリストを各 y 値にプロットするだけです。

于 2012-09-06T00:09:42.670 に答える