2017-03-23 7 views
1

これまでのところうまく動作しているpcolor用のpick_eventを作成しようとしています。しかし、私は基礎となるパンダのDataFrameの列とインデックス名を取得したいと思います。 event.indでは、私はちょうど値を無視してカウントされるように見える1つの値を取得します。Python - Pick_Event for pcolor get pandasカラムとインデックスの値

最終的には、同じインデックスと列の値を持つ別のpandas DataFrameから値を返すために、列名とインデックス名を使用したいと思います。

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

class colormap: 
    def __init__(self): 
     pass 

    def create(self): 
     fig, ax = plt.subplots() 
     data = pd.DataFrame(np.arange(0,12).reshape(3,4), index=['a', 'b', 'c'], columns=['A', 'B', 'C', 'D'], dtype=float) 
     data.set_value('a', 'B', np.nan) 
     data = np.ma.masked_where(np.isnan(data), data) 

     ax.pcolor(data, edgecolors='k', linewidths=0.2, cmap='RdBu', picker=1) 
     fig.canvas.mpl_connect('pick_event', self.onpick) 
     plt.show() 

    def onpick(self, event): 
     self.event = event 
     self.thisline = event.artist 
     ind = event.ind 
     print(ind) 

if __name__ == '__main__': 
    self = colormap() 
    self.create() 

答えて

1

マスクされていない配列で作業することもできます。これは、警告をスローしますが、vminvmaxを使用して、色の制限をpcolorに設定すると、動作します。ナノ値が透明になるためには、colormap.set_under(color)を透明な色に設定する必要があります。このようにして

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

class colormap: 
    def __init__(self): 
     pass 

    def create(self): 
     fig, ax = plt.subplots() 
     self.data = pd.DataFrame(np.arange(0,12).reshape(3,4), index=['a', 'b', 'c'], 
          columns=['A', 'B', 'C', 'D'], dtype=float) 
     self.data.set_value('a', 'B', np.nan) 
     #data = np.ma.masked_where(np.isnan(data), data) 
     cmap = plt.cm.RdBu 
     cmap.set_under((0,0,0,0)) 
     ax.pcolor(self.data, edgecolors='k', linewidths=0.2, cmap=cmap, picker=1, 
        vmin=0, vmax=11) 
     fig.canvas.mpl_connect('pick_event', self.onpick) 
     plt.show() 

    def onpick(self, event): 
     self.event = event 
     self.thisline = event.artist 
     ind = event.ind 
     x,y = np.unravel_index(ind, self.data.shape) 
     x,y = x[0],y[0] 
     print (x,y, self.data.iloc[x,y]) 

if __name__ == '__main__': 
    self = colormap() 
    self.create() 

リターン(n,m, self.data.iloc[n,m])(row, column, data[row,column])です。

+0

ありがとうございます、それはすでに解決策に近づいています。私は、選択されたデータポイントのインデックスと列の値を取得する方法についてはまだ苦労しています。 – Tobias

+0

私はここで質問があります:あなたは常にインデックススケール上にpcolorをプロットしていますか、最終的には異なるスケーリングを使用したいのですか(つまり、軸が0から3または4になると、 )。 – ImportanceOfBeingErnest

+0

スケールは最終的にデータセットに応じて変更されます – Tobias

関連する問題