2

次のプロットを検討してください。

ここに画像の説明を入力

この関数によって生成されます:

def timeDiffPlot(dataA, dataB, saveto=None, leg=None):
    labels = list(dataA["graph"])
    figure(figsize=screenMedium)
    ax = gca()
    ax.grid(True)
    xi = range(len(labels))
    rtsA = dataA["running"] / 1000.0 # running time in seconds
    rtsB = dataB["running"] / 1000.0 # running time in seconds
    rtsDiff = rtsB - rtsA
    ax.scatter(rtsDiff, xi, color='r', marker='^')
    ax.scatter
    ax.set_yticks(range(len(labels)))
    ax.set_yticklabels(labels)
    ax.set_xscale('log')
    plt.xlim(timeLimits)
    if leg:
        legend(leg)
    plt.draw()
    if saveto:
        plt.savefig(saveto, transparent=True, bbox_inches="tight")

ここで重要なのは、 に対する値の正または負の差ですx = 0。これをより明確に視覚化するとよいでしょう。

  • x=0 軸を強調する
  • x=0 からプロット マーカーまで線を引く

これはmatplotlibで行うことができますか? どのコードを追加する必要がありますか?

4

2 に答える 2

4

Rutger Kassiesが指摘しているように、実際には、他の回答から「手動」メソッドを自動化する「ステム」機能がいくつかあります。水平ステムラインの機能は次のとおりですhlines()vlines()垂直ステムバー用):

import numpy
from matplotlib import pyplot

x_arr = numpy.random.random(10)-0.5; y_arr = numpy.arange(10)

pyplot.hlines(y_arr, 0, x_arr, color='red')  # Stems
pyplot.plot(x_arr, y_arr, 'D')  # Stem ends
pyplot.plot([0, 0], [y_arr.min(), y_arr.max()], '--')  # Middle bar

ドキュメントhlines()MatplotlibのWebサイトにあります。

水平ステムバーでプロット

于 2013-02-19T13:27:14.463 に答える
1

(より迅速な解決策については、私の他の回答を参照してください。)

Matplotlib は垂直の「ステム」バーを提供します: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.stem。ただし、 の水平方向の同等物が見つかりませんstem()

plot()それでもなお、呼び出しを繰り返すことで (ステムごとに 1 つ) 、水平のステム バーを非常に簡単に描画できます。ここに例があります

import numpy
from matplotlib.pyplot import plot

x_arr = numpy.random.random(10)-0.5; y_arr = numpy.arange(10)

# Stems:
for (x, y) in zip(x_arr, y_arr):
    plot([0, x], [y, y], color='red')
# Stem ends:
plot(x_arr, y_arr, 'D')
# Middle bar:
plot([0, 0], [y_arr.min(), y_arr.max()], '--')

次の結果が得られます。

水平ステム バーを使用したプロット

ただし、David Zwicker が指摘したように、x = 0 は x 軸の左側に無限にあるため、x が対数スケールの場合、x = 0 からバーを描画しても意味がありません。

于 2013-02-19T12:45:38.867 に答える