2017-10-26 14 views
1

私は同じ軸上に一連のボックスプロットをプロットしており、それらを識別するために凡例を追加したいと考えています。 は非常に単純化され、私のスクリプトは次のようになります。Pandas DataFrameボックスに凡例を追加

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
df={} 
bp={} 
positions = [1,2,3,4] 
df[0]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D']) 
df[1]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D']) 
colour=['red','blue'] 
fig, ax = plt.subplots() 
for i in [0,1]: 
    bp[i] = df[i].plot.box(ax=ax, 
          positions = positions, 
          color={'whiskers': colour[i], 
           'caps': colour[i], 
           'medians': colour[i], 
           'boxes': colour[i]} 
         ) 
plt.legend([bp[i] for i in [0,1]], ['first plot', 'second plot']) 
fig.show() 

プロットは罰金ですが、伝説が描かれていないと私は追加する際に前

UserWarning: Legend does not support <matplotlib.axes._subplots.AxesSubplot object at 0x000000000A7830F0> instances. 
A proxy artist may be used instead. 

は(私はこの警告を持っていたこの警告を取得散布図の伝説ですが、伝説はまだ描かれているので、無視することができます)。

Here is a link to a description of proxy artistsしかし、これをスクリプトにどのように適用するかは明確ではありません。助言がありますか?

答えて

1

'pandas'プロットは、凡例を生成するために使用できないAxesSubplotオブジェクトを返します。あなたは代わりにproxy artistを使用して独自の凡例を生成する必要があります。私はあなたのコードを変更した:

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.patches as mpatches 
df={} 
bp={} 
positions = [1,2,3,4] 
df[0]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D']) 
df[1]= pd.DataFrame (np.random.rand(4,4),columns =['A','B','C','D']) 
colour=['red','blue'] 
fig, ax = plt.subplots() 
for i in [0,1]: 
    bp[i] = df[i].plot.box(ax=ax, 
          positions = positions, 
          color={'whiskers': colour[i], 
           'caps': colour[i], 
           'medians': colour[i], 
           'boxes': colour[i]} 
         ) 

red_patch = mpatches.Patch(color='red', label='The red data') 
blue_patch = mpatches.Patch(color='blue', label='The blue data') 
plt.legend(handles=[red_patch, blue_patch]) 

plt.show() 

結果を以下に示す:

enter image description here

関連する問題