0

1. X-ticklabels が機能しない

Matplotlib を使用して、いくつかの測定値からヒストグラムを生成しています。

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as pyplot
...
fig = pyplot.figure()
ax = fig.add_subplot(1,1,1,)
n, bins, patches = ax.hist(measurements, bins=50, range=(graph_minimum, graph_maximum), histtype='bar')

ax.set_xticklabels([n], rotation='vertical')


for patch in patches:
    patch.set_facecolor('r')

pyplot.title='Foobar'
#pyplot.grid(True)
pyplot.xlabel('X-Axis')
pyplot.ylabel('Y-Axis')
pyplot.savefig(output_filename)

2 つの問題を除いて、結果として得られる PNG は適切に見えます。

  1. タイトル (「Spam and Ham」) が PNG にありません。x 軸と y 軸のラベルは両方とも存在します (ただし、以下のサンプルではオンにしませんでした)。
  2. x-tick-lables は完全に壊れているように見えます。すべてのバーの下に沿って表示されるのではなく、グラフの左下の下に 1 行の数字としてレンダリングされ、切り取られています。また、Y 軸のラベルが無効になっているようです。

xticklabels が壊れたヒストグラム

2. 単位と SI プレフィックス

注意: Matplotlib 固有ではありません。

ヒストグラムには、x 軸に沿った時間測定値があります。これらは、マイクロ秒の範囲からミリ秒および秒の範囲までの範囲です。現時点では、グラフは x 軸のラベルを標準表記の秒としてレンダリングしています。

x 軸に沿った秒単位の時間

わかりやすい形式にしたいのですが、時間をミリ秒/マイクロ秒の値で指定し、単位を表示します。つまり、SIプレフィックスを認識して、時間値をわかりやすい形式にしたいということです。

実際、これはおそらく次のサンプル プログラムと非常によく似ています。

http://diveintopython3.org/your-first-python-program.html

ユニットを処理する Python ライブラリがいくつかあることに気付きました。

  1. http://juanreyero.com/open/magnitude/index.html
  2. http://home.scarlet.be/be052320/Unum.html
  3. http://pypi.python.org/pypi/units/

ただし、私が読んだことから、上記のいずれも SI 接頭辞を処理したり、この種のわかりやすい書式設定を行ったりしていないようです。提案/代替案はありますか?

4

2 に答える 2

3

1.1: PNG にタイトル (「Spam and Ham」) がありません。

あなたが書いた

pyplot.title='Foobar'

あなたがしたい

pyplot.title("Spam and Ham")

pyplot.title='Foobar' は、タイトル関数を文字列に置き換えるだけです。

1.2: x-tick-lables が完全に壊れているようです

n はあなたが考えているものではないと思うので、 ISTMax.set_xticklabels([n], rotation='vertical')はおそらくあなたがやりたいことではありません。測定値 [1,2,3,4] の場合、次のようになります。

>>> n, bins, patches = ax.hist([1,2,3,4])
>>> n
array([1, 0, 0, 1, 0, 0, 1, 0, 0, 1])
>>> bins
array([ 1. ,  1.3,  1.6,  1.9,  2.2,  2.5,  2.8,  3.1,  3.4,  3.7,  4. ])
>>> patches
<a list of 10 Patch objects>

n は、ビンの位置ではなく、ビン内のカウントを含む配列です。x軸ではなくy軸です。さらに、それはすでにリストであるため、 [n] を使用する必要はありませんでした。何をしたいのかわかりませんが、ビンから文字列ラベルを作成することもできます (たくさんの数字が必要でない限り!) または、xtick ラベルのみを垂直にしたい場合は、次を使用できます

for label in ax.get_xticklabels():
    label.set_rotation('vertical')

残念ながら、ユニット ライブラリについては何も知りません。

于 2011-06-14T12:23:58.703 に答える