2017-05-01 6 views
0

私はmatlpotlibにはかなり新しく、ティックのロケータとラベルはわかりにくいので、私に同行してください。私は何時間もグーグルで誓っている。曜日名は、インデックスと平日の番号であるmatplotlib xticksを列に設定し、ラベルを対応するインデックスに設定します

dayofweek sla 
weekday   
Mon  1 0.889734 
Tue  2 0.895131 
Wed  3 0.879747 
Thu  4 0.935000 
Fri  5 0.967742 
Sat  6 0.852941 
Sun  7 1.000000 

が列です:

私はこの(関連する列)のようなデータフレーム「フレーム」を持っています。このフレームにはdatetimeオブジェクトはありません。

私は文字列値では不可能である、後の散布図を追加したいので、私は、数値としての私のx軸を持っている必要がありますplt.figure

fig=plt.figure(figsize=(7,5))  
ax=plt.subplot(111) 

にこれを回します。

x_=frame.dayofweek.values 
anbar=ax.bar(x_,y_an,width=0.8,color=an_c,label='angekommen') 

これはOK xticks are 'dayofweek'

だから基本的に私は私のxticksは「DAYOFWEEK」列とそのラベルが対応するインデックスであることを可能にしたい作品。私は

ax.set_xticklabels(frame.index) 

により手動set_xticklabels場合 は今、ラベルが軸上の位置0から始めます。

enter image description here

私はラベルのリストを並べ替えることによってこの問題を回避することができますが、ロケータまたはフォーマッタを使用するための「正しい」方法があるはずですが、これは私にとって非常に紛らわしいです(上記参照します)。 ラベルをインデックスに対応させる方法を教えてもらえますか?

+0

今後の質問について:例をさらに絞り込むことで、質問の質をさらに高めることができます。この場合、6行のコードで完全な実例を達成することができます。これにより、人々はあなたの質問に答えるのが容易になりますが、同様の問題を抱える他の人のためにあなたの質問をより一般的な参照にします。 –

答えて

3

はまっすぐソリューションだけではなくxticklabelsを設定することであるだけでなく、自分自身ティック:

ax.set_xticks(frame.dayofweek.values) 
ax.set_xticklabels(frame.index) 

、FixedLocatorとFixedFormatterで

ax.xaxis.set_major_locator(matplotlib.ticker.FixedLocator(frame.dayofweek.values)) 
ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(frame.index)) 

を達成することができますが、同じはかなりいるようだがこの単純な作業には不要です。

+0

本当にとてもシンプルで、完璧に動作してくれてありがとう。私はmatplotlibのどこかで、set_xticksは落胆しているので、私はそれを避けて読んだと思います。それにもかかわらず、疑問は将来の誰かのために使うことでしょう。 Cheers – badlands

+0

set_xticksは多くの場合、ScalarFormatterをFixedFormatterに置き換えてしまうことがあるため、しばしば望ましくないことがあります。しかし、ここではそれがまさにあなたが望むものです。 – ImportanceOfBeingErnest

+0

絶対に。私はロケーターと一緒に手を出そうとしましたが、正直言ってそれは私の頭の上にあります。無神経な質問に答えることに感謝します;) – badlands

関連する問題