How to get shortcut on hatch / stacked hatch in matplotlib?

I have a very simple matplotlib stack chart built into PyQt Canvas. I am trying to get the corresponding bar area label (rectangle) based on the click. But I always get _nolegend _ when I try to print information from an event. Ideally, I would like to see the corresponding label on the panel attached in the code.

For example, when you click on a gray canvas, it should print 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()

Simple stacked bar plot

+4
source share
1 answer

, 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
+2

All Articles