2017-09-25 22 views
0

私はx軸の値がバーのラベルと正しく相関するようには見えないという点で、Seaborn/matplotlibを使用すると簡単な問題が発生しています。私はこの次のコードを使用してグラフ化する場合matplotlib x軸の開始点を設定する方法は?

hypothesis1_df: 

    revol_util deviation 
20   20 -37.978539 
21   21 -27.313996 
22   22 -23.790328 
23   23 -19.729957 
24   24 -16.115686 
..   ...  ... 
96   96 67.275585 
97   97 91.489382 
98   98 60.967792 
99   99 48.385094 
100   100 77.852812 

が今の問題は次のとおりです。参考のため、私のようなものを私に残し、pandas.DataFrameオブジェクトを持っていたし、データのより詳細な表情を見せた最初の20行を落としました。

import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
import matplotlib.ticker as ticker 

ax = sns.barplot(x='revol_util', y='deviation', data=hypothesis1_df) 
ax.set(xlabel="Revolving Credit Utilization (%)", 
      ylabel="Deviation from Mean (%)", 
      title="Credit Utilization and Likelihood of Late Payments\n(20 - 100%)") 
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%d')) # Format axis ticks as int 
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=10)) # Set tick label frequency = base 

plt.show() 

私はこの取得:

Image1

注x軸の値を、どのように彼らは20から始まるいないがトンですここでティッカーを相殺する方法はありますか?私はax.set_xlim(xmin=20, xmax=100)を試しましたが、それは私のグラフの下部20を切り落とし、20を右側に広げて空白にします。すべての軸の書式設定を削除すると、ラベルは正しく表示されますが、すべてのラベルがリストされているので、あまりにも多忙です。助けてくれてありがとう。

答えて

-1

試してみてください:ax.set_xticklabels(hypothesis1_df.index.tolist()) 手動でx軸ラベルを設定してください。

+0

残念ながらそれは均等に 'MultipleLocator'で使用した場合であるとして、範囲21-29に広がり、私は' MultipleLocator'ラインを削除して、それをしようとした場合ラベルが私を与えるように思われます範囲内のすべての値になります(読み取るにはビジー状態です)。 'ax.set_xticklabels(np.arange(20、100、10)'を使うと、ラベルが与えられますが、最初の8個に割り当てられ、残りの部分は空白になります。 – Brendan

+0

'AxLの後に' MultipleLocator'行を呼び出してみましたか? set_xticklabels(仮説1_df.index.tolist()) '行? –

-1

問題は、海軍の棒グラフでは棒が確かに0,1,...,N-1に配置されていることです。それらのラベルは、データに対応する数字にFixedLocatorで設定されます。

オプションので、可能性があります 我々はseabornのbarplotでダニは常に0から始まることを知っているので、私たちはあなたの最初の値を追加することができ、複数のロケータを使用して、手動で

ax.xaxis.set_major_locator(ticker.MultipleLocator(10)) 
    ax.set_xticklabels(df.index.tolist()[::10]) # take every tenth label from list 
0

ticklabelsを設定の値をmatplotlib.ticker.FuncFormatterの現在のティックに、既存のMultipleLocatorと一緒に入力します。

import numpy as np 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 
import matplotlib.ticker as ticker 

# A fake dataframe 
hypothesis1_df = pd.DataFrame({ 
    'revol_util':np.arange(20, 101, 1), 
    'deviation':np.arange(-40, 81, 1.5) + np.random.rand(81)*10.}) 
hypothesis1_df = hypothesis1_df.set_index('revol_util', drop=False) 

ax = sns.barplot(x='revol_util', y='deviation', data=hypothesis1_df) 
ax.set(xlabel="Revolving Credit Utilization (%)", 
      ylabel="Deviation from Mean (%)", 
      title="Credit Utilization and Likelihood of Late Payments\n(20 - 100%)") 

ax.xaxis.set_major_locator(ticker.MultipleLocator(10)) 
ax.xaxis.set_major_formatter(ticker.FuncFormatter(
    lambda x, pos: '{:g}'.format(x + hypothesis1_df['revol_util'].iloc[0]))) 

plt.show() 

enter image description here

関連する問題