2017-09-09 17 views
0

私は、バス停などの2つのポイント間の関係を示すデータセットを扱っています。たとえば、バス停A、B、C、Dがあります。python - seaborn:共有Xラベルが正常に動作しない

ヒストグラムプロットを作成して、バス停ごとに3つのバス停に行くまでの所要時間を示します。

明らかに、AからAまでの時間はないので、空白にする必要があります。

プロットすると、最初の行がB C Dを示し、2番目の行がA、C、Dなどを示していることがわかります。列の位置がずれるため、色が各行の同じ列を表しません。

sharex = Trueを追加すると、各軸のxラベルが削除されます。それは明らかに私がここで見たいものではありません。

私はA、B、C、Dの順に4つの列を見るのが好きです。AからAのときは空白にし、色は一貫していなければなりません。

誰でもこれを達成する方法を知っていますか?文字列のリスト、
でカテゴリレベルをプロットする 注文オプション、それ以外のレベル:

import pandas as pd 
import numpy as np 
import seaborn as sns 
%matplotlib inline 

time=np.random.randn(1000) 
point1 = ['A','B','C','D'] * 250 
point2 = ['A'] * 250 + ['B'] * 250 + ['C'] * 250 + ['D'] * 250 

df_time = pd.DataFrame(
    {'point1': point1, 
    'point2': point2, 
    'time': time 
    }) 
df_time=df_time[df_time['point1']!=df_time['point2']] ##cannot sell to another 

fig, ax = plt.subplots(nrows=4, sharey=True) 
fig.set_size_inches(12, 16) 
for point1i, axi in zip(point1, ax.ravel()): 
    sns.boxplot(data=df_time[df_time['point1']==point1i], x='point2', y='time', ax=axi) 

the documentationから分かるようにenter image description here

答えて

1

sns.boxplotはargumen order

orderhue_orderを持っていますデータオブジェクトから推論される。

sns.boxplot(..., order=['A','B','C','D']) 

のようにこれを使用すると、あなたの希望のプロットを与えるだろう。

完全なコード:

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

time=np.random.randn(1000) 
point1 = ['A','B','C','D'] * 250 
point2 = ['A'] * 250 + ['B'] * 250 + ['C'] * 250 + ['D'] * 250 

df_time = pd.DataFrame(
    {'point1': point1, 
    'point2': point2, 
    'time': time 
    }) 
df_time=df_time[df_time['point1']!=df_time['point2']] ##cannot sell to another 

fig, ax = plt.subplots(nrows=4, sharey=True) 

for point1i, axi in zip(point1, ax.ravel()): 
    sns.boxplot(data=df_time[df_time['point1']==point1i], x='point2', y='time', 
       ax=axi, order=['A','B','C','D']) 

plt.tight_layout()  
plt.show() 

enter image description here

関連する問題