Я использую Matplotlib для построения гистограммы с накоплением и хочу отобразить метку данных, по которым щелкнули.
Я написал код для отображения меток для простого линейного графика.Когда я пытаюсь сделать то же самое с гистограммой, и это не работает.Ниже приведен код, который работает с линейным графиком.
import numpy as np
import matplotlib.pyplot as plt
# plots port counts per address as a stacked bar graph
fig=plt.figure()
ax=fig.add_subplot(111)
text=ax.text(0,0, '', va='baseline', ha='left')
# plot
y=np.array([[1,2,3],[4,5,6]])
for i in range(2):
ax.plot(y[i, :], gid=i)
def on_click(event):
for curve in ax.get_lines():
if curve.contains(event)[0]: gid=curve.get_gid()
text.set_text('Class %s' % gid)
fig.canvas.mpl_connect('button_press_event', on_click)
Когда я щелкаю линию, отображается ее метка (gid), как показано на рисунке ниже.
Следующий код работает при рисовании гистограммы с накоплением, но не отображает метки.Хотя сообщение об ошибке не возвращается, метка не может быть получена и отображена.
# plots port counts per address as a stacked bar graph
fig=plt.figure()
ax=fig.add_subplot(111)
text=ax.text(0,0, '', va='baseline', ha='left')
bottom=np.array([0,0,0])
# plot
x_pos=np.arange(3)
y=np.array([[1,2,3],[1,3,5]])
for i in range(2):
ax.bar(x_pos, y[i, :], align='center', bottom=bottom, alpha=0.5, gid=i)
# update the bar bases for the next iteration
bottom=np.add(bottom,y[i, :] )
def on_click(event):
gid='-'
for curve in ax.get_lines():
gid='TEST'
if curve.contains(event)[0]:
gid=curve.get_gid()
text.set_text('Class %s' % gid)
fig.canvas.mpl_connect('button_press_event', on_click)
Я предполагаю, что ax.bar
не создает строки для повторной настройки get_lines
, следовательно, он выходит из цикла for curve in ax.get_lines()
с0 итераций, из-за того, как задан текст при нажатии на диаграмму, как показано на рисунке ниже.
Я хотел бы знать, как я могуотобразить метку, щелкнув столбчатую диаграмму с накоплением.