Seabornで表示しようとしているマルチレベルのインデックス付きデータフレームがあります。プロットはうまく表示されていますが、x軸の値は実際のx値の代わりにテキストラベルとして扱われています。以下のスニペットを作製し、プロットする方法サンプルデータを示していますSeabornでX軸が正しく配置されていない
>>> import numpy, pandas, seaborn
>>> from matplotlib import pyplot
>>> index = pandas.MultiIndex.from_product((list('abc'), [10**x for x in range(4)]), names=['letters', 'powers'])
>>> index
MultiIndex(levels=[['a', 'b', 'c'], [1, 10, 100, 1000]],
labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]],
names=['letters', 'powers'])
>>> df = pandas.DataFrame(numpy.random.randn(12, 2), index=index, columns=['x', 't'])
>>> df
x t
letters powers
a 1 1.764052 0.400157
10 0.978738 2.240893
100 1.867558 -0.977278
1000 0.950088 -0.151357
b 1 -0.103219 0.410599
10 0.144044 1.454274
100 0.761038 0.121675
1000 0.443863 0.333674
c 1 1.494079 -0.205158
10 0.313068 -0.854096
100 -2.552990 0.653619
1000 0.864436 -0.742165
>>> seaborn.factorplot(x='powers', y='t', hue='letters', data=df.reset_index())
>>> pyplot.show()
プロット現れる:
ただし、x軸はテキストラベルとして数値を用いています。私は値から期待される指数関数的な進展を示すようにx軸を望みます(すなわち、1000は100から10倍、100は100から10倍にすべきです)。どうすれば修正できますか?
マルチインデックスは問題とは関係ないと思われますが、解釈されるデータ型は多分重要です。同様の問題がここで起きているようです:seaborn boxplots at desired distances along the x axis。私はそれが重複しているとは思わないが、コミュニティが意見が一致しない場合は、私のケースにそれを適用する方法の簡単な説明に感謝します。
ありがとうございました。これはまさに私が探していたものです。この方法で 'ax.set_ * scale'を自由に適用することができます。あなたが疑問に思っていた場合、私は準対数間隔で取得されたいくつかのデータを持っていますが、通常のプロットでは線形関係を示す必要があります。線形の関係を確認したら、線形のものが不十分な場合は、おそらくあなたの助言を取り、semilogxまたはログログプロットを行います。 –
ところで、私は正しくあなたの部分を読み込んでいますか?シーボーンをインポートすると、その後の正規のmatplotlibプロットのデフォルトが変更されますか? –
これは正しいことです。あなたが 'seabornをインポートする 'ときに、そのセッションのmatplotlibのデフォルトを上書きするか、手動でそれらの設定を変更するまでです。 – Primer