[英]How to get the label on bar plot/stacked bar plot in matplotlib?
我在PyQt Canvas中嵌入了一個非常簡單的堆疊matplotlib條形圖。 我試圖根據點擊獲得條形區域(矩形)的相應標簽。 但是當我嘗試從事件中打印信息時,我總是會得到_nolegend_ 。 理想情況下,我希望在代碼中附加條形圖上看到相應的標簽。
例如,當您單擊灰色條時,它應該打印a2
import sys
import matplotlib.pyplot as plt
from PyQt4 import QtGui
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
def on_pick(event):
print event.artist.get_label()
def main():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
w.resize(640, 480)
w.setWindowTitle('Pick Test')
fig = Figure((10.0, 5.0), dpi=100)
canvas = FigureCanvas(fig)
canvas.setParent(w)
axes = fig.add_subplot(111)
# bind the pick event for canvas
fig.canvas.mpl_connect('pick_event', on_pick)
p1 = axes.bar(1,6,picker=2,label='a1')
p2 = axes.bar(1,2, bottom=6,color='gray',picker=1,label='a2')
axes.set_ylim(0,10)
axes.set_xlim(0,5)
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
這有點棘手,因為bar
是一個復雜的繪圖對象,它實際上由多個組件組成。
您可以使用get_legend_handles_labels
獲取軸的所有藝術家和標簽。 然后您可以查看當前藝術家所屬的組。
所以你的回調可能看起來像這樣。
def on_pick(event)
rect = event.artist
# Get the artists and the labels
handles,labels = rect.axes.get_legend_handles_labels()
# Search for your current artist within all plot groups
label = [label for h,label in zip(handles, labels) if rect in h.get_children()]
# Should only be one entry but just double check
if len(label) == 1:
label = label[0]
else:
label = None
print label
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.