Python - 用于pcolor的Pick_Event获取pandas列和索引值

时间:2017-03-23 12:55:24

标签: python pandas matplotlib

我正在尝试为pcolor创建一个pick_event,到目前为止工作正常。但是,我想获得底层pandas DataFrame的列和索引名称。 使用event.ind,我只得到一个值,似乎忽略了nan值。

最后我想使用列和索引名称从另一个具有相同索引和列值的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 个答案:

答案 0 :(得分:1)

一种选择是使用非掩码数组。如果您使用nullpcolorvmin中设置颜色限制,则会发出警告但仍然有效。为了使nan值变为透明,需要将vmax设置为透明颜色。

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])