web-dev-qa-db-ja.com

matplotlibプロットセットx_ticks

インデックス1、2、3 .... nのx_axisラベルを別の値にするにはどうすればよいですか。

lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
     j=0
     for chunk in chunks:
        plt.plot([hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)],[i for i,item in enumerate(lam_beta)],color=j%len(color))
        j+=1

     plt.set_xticks([i for i,item in enumerate(lam_beta)])
     plt.set_xticklabels([item for item in lam_beta],rotation='vertical')
     plt.show()

エラー:

AttributeError: 'module' object has no attribute 'set_xticks'

ここで、pltにはそのようなメソッドがないと言うので、lambda_betaタプルの値をx軸の各ティックの値に設定できません。 pltでこれをどのように達成できますか?これは、matplotlibでヒストグラムを生成するときに行った方法であるため、xticksを使用しました。任意の助けいただければ幸いです。前もって感謝します!

11
anonuser0428

set_xticks および set_xticklabels はAxesメソッドであり、pltモジュール名前空間。これは、エラーメッセージ'module' object has no attribute 'set_xticks'の意味です。

また、

[i for i,item in enumerate(lam_beta)]

に簡略化できます

range(len(lam_beta))

そして

[item for item in lam_beta]

に簡略化できます

lam_beta

axesを手に入れる便利な方法は、 plt.subplots を呼び出すことです。

そう:

fig, ax = plt.subplots()
...
ax.set_xticks(range(len(lam_beta)))
ax.set_xticklabels(lam_beta, rotation='vertical')

axAxesオブジェクトです。 Axesメソッドの呼び出しは、matplotlibを使用するためのオブジェクト指向のアプローチです。


または、 plt.xticks を呼び出して、Matlabスタイルのpylabインターフェイスを使用することもできます。定義すると

loc = range(len(lam_beta))
labels = lam_beta

その後

plt.xticks(loc, labels, rotation='vertical')

に相当

fig, ax = plt.subplots()
ax.set_xticks(loc)
ax.set_xticklabels(labels, rotation='vertical')

plt.xticksは、目盛りの位置とラベルを現在の座標軸に設定します。


リストの理解

[hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)]

に簡略化できます

hr_values_per_chunk[chunk][:len(lam_beta)]

また、 ax.set_color_cycle を使用して、ax.plotを呼び出すたびにcolorパラメータの設定を回避できます。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
ax.set_color_cycle(colors)

for chunk in chunks:
    vals = hr_values_per_chunk[chunk][:len(lam_beta)]
    ax.plot(vals, range(len(lam_beta)))

ax.set_xticks(range(len(lam_beta)))
ax.set_xticklabels(lam_beta, rotation='vertical')
plt.show()
20
unutbu