我正在尝试为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()
答案 0 :(得分:1)
一种选择是使用非掩码数组。如果您使用null
和pcolor
在vmin
中设置颜色限制,则会发出警告但仍然有效。为了使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])
。