matplotlib プロットセット x_ticks 質問する

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' オブジェクトに属性 'set_xticks' がありません

ここで、plt にはそのようなメソッドがないため、lambda_beta タプルの値を x 軸の各目盛りの値に設定できません。plt でこれを実現するにはどうすればよいでしょうか? matplotlib でヒストグラムを生成するときにこの方法を使用していたため、xticks を使用しました。どなたか助けていただければ幸いです。よろしくお願いします!

ベストアンサー1

set_xticksそしてset_xticklabelsは、モジュール名前空間内の関数ではなく、軸メソッドです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.サブプロット:

それで:

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

axはオブジェクトですAxesAxesメソッドを呼び出すことは、matplotlib を使用するオブジェクト指向のアプローチです。


あるいは、Matlabスタイルのpylabインターフェースを使用して、plt.xticks定義すると

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)]

colorまた、各呼び出しのパラメータ設定を省くax.plotには、ax.set_color_cycle:

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()

おすすめ記事