Как распечатать метки отдельных полос диаграммы, нажав на них в Python - PullRequest
0 голосов
/ 25 июня 2019

Я не могу печатать этикетки, нажимая на полоски

Я пробовал использовать метод get_label (), но ярлыки не печатались на полосах нажатия

import matplotlib.pyplot as plt
import numpy as np

def main():
    fig = plt.figure()
    ax = fig.add_subplot(111)
    labels = ['Apple', 'Mango', 'Orange']
    size=[20, 40, 60]
    y_pos=np.arange(len(labels))    
    wedges = ax.bar(y_pos,size)
    plt.xticks(y_pos,labels)
    plt.xlabel("Fruits")
    plt.ylabel("Count")    
    plt.title("Fruits Count")
    make_picker(fig,wedges)
    plt.show()

def make_picker(fig, wedges):
    def onclick(event):
        wedge= event.artist
        label = wedge.get_label()
        print(label)
    for wedge in wedges:
        wedge.set_picker(True)
    fig.canvas.mpl_connect('pick_event', onclick)

if __name__ == '__main__':
    main()

Ожидаемый результат: когда я нажимаю на любую полосу, должна быть напечатана соответствующая метка этой полосы. ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ: когда я нажимаю на панель, то nolegend печатается

1 Ответ

0 голосов
/ 25 июня 2019

Если вы хотите использовать Artist.get_label(), то вам нужно установить метку артиста где-то , используя Artist.set_label(label):

def main():
    fig = plt.figure()
    ax = fig.add_subplot(111)
    labels = ['Apple', 'Mango', 'Orange']
    size=[20, 40, 60]
    y_pos=np.arange(len(labels))
    wedges = ax.bar(y_pos,size)
    # Assign a label to each of the artist to be retrieved later
    for w,l in zip(wedges, labels):
        w.set_label(l)
    plt.xticks(y_pos,labels)
    plt.xlabel("Fruits")
    plt.ylabel("Count")
    plt.title("Fruits Count")
    make_picker(fig,wedges)
    plt.show()
...