2016-04-08 17 views
1

2つのPandasデータフレームを1つの図形内にボックスプロットとして表示したい。 2つのデータフレームの値の範囲が異なるため、2つのデータフレームを組み合わせて使用​​したいと考えています。最小限に抑え2つのデータフレームボックスプロットをtwinx図形で結合する

、私は次のことを試してみました:

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

df1 = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) 

df2 = pd.DataFrame(np.random.randint(100,200,size=(100, 2)), columns=list('EF')) 

fig, ax1 = plt.subplots() 
ax2 = ax1.twinx() 

df1.boxplot(ax=ax1) 
df2.boxplot(ax=ax2) 

plt.show() 

結果は、それがどのように見えるか予想通りではありません

enter image description here(実際には、プロット上の6箱があるはずです!)

どうやってボックスプロットを並べることができますか? ax1とax2にいくつかのダミー散乱点を設定しようとしましたが、これは本当に役に立たなかった。

+0

あなたは私たちが実際に実行することができ、ランダムなデータを持つ例を作ることはできますか? – Chiel

+1

完了、ありがとう! – user3017048

答えて

2

プロットするデータフレームを連結し、マスクを使用することをお勧めします。マスクの作成では、dfs == dfs | dfs.isnull()を使用してTrueというフル・マトリックスを作成し、次に'E'または'F'以外のすべての列名を照会します。これは、最初の4つのボックスだけをプロットできる2Dマトリックスを与えます。最後の2つはマスクされています(そのため、ダニが下に表示されます)。逆マスク~maskを使用して、最後の2つを独自の軸にプロットし、最初の4つをマスクします。

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

df1 = pd.DataFrame(np.random.randint( 0,100,size=(100, 4)), columns=list('ABCD')) 
df2 = pd.DataFrame(np.random.randint(100,200,size=(100, 2)), columns=list('EF' )) 

dfs = pd.concat([df1, df2]) 
mask = ((dfs == dfs) | dfs.isnull()) & (dfs.columns != 'E') & (dfs.columns != 'F') 

fig, ax1 = plt.subplots() 
dfs[mask].boxplot() 

ax2 = ax1.twinx() 
dfs[~mask].boxplot() 

plt.show() 

The box plots

+0

ありがとう、それは素晴らしい作品! – user3017048

関連する問題