2016-01-11 4 views
1

Я хотел бы поместить в свой график matplotlib некоторый текст с информацией или напоминаниями типа «stickynotes». Это мой код до сих пор:«Липкие заметки» в matplotlib

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0, 5, 0.1); 
y = np.sin(x) 

plt.text(2 , 0.5, s = "Here´s a note", bbox = dict(facecolor = "red")) 


plt.plot(x, y) 
plt.show() 

Как вы можете видеть, я положил одну «StickyNote», используя один из модулей библиотеки Matplotlib, но то, что я хочу сделать, это поставить «примечание» и вытесняют он использует мышь, вокруг сюжета. Есть ли какой-нибудь модуль, который я мог бы использовать для этого? Как я могу достичь этого?

Благодарим вас за ваше время и ответы.

ответ

2

Посмотрите на перетаскиваемые аннотации.

Как простой пример:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0, 5, 0.1); 
y = np.sin(x) 

fig, ax = plt.subplots() 

ann = ax.annotate("Here's a note", xy=(2, 0.5), bbox=dict(facecolor='yellow')) 
ann.draggable() 

ax.plot(x, y) 
plt.show() 
+0

Спасибо за ваш ответ, это очень помогло мне. Мне удалось перетащить заметку, но вы можете ее только переместить. Но это именно то, что я хотел сделать. Большое спасибо. –

+0

Вы должны иметь возможность перемещать его более одного раза ... Что-то не должно работать правильно. –

+0

Знаете ли вы, есть ли способ, которым я мог бы использовать «QTextEdit» из PyQt4 для записи заметки и получить этот текст для stickynote? Или просто, как получить текст от него? Кстати, это была проблема конфигурации, теперь я могу перемещать ее каждый раз. –

1

В дополнение к ответу Джо, другой проспект должен назначить функцию на «щелчок на холсте» событие, если у вас есть некоторые дополнительные работы, которую вы хотите сделать на на заднем конце:

import numpy as np 
import matplotlib.pyplot as plt 

def click(event): 
    global note 
    note_x = event.xdata 
    note_y = event.ydata 

    # remove your old note 
    note.remove() 
    # add a new one and redraw the figure 
    note = plt.text(note_x , note_y, s = "Here's a note", bbox = dict(facecolor = "red")) 
    plt.draw() 


fig = plt.figure() 
fig.canvas.mpl_connect('button_press_event', click)  


x = np.arange(0, 5, 0.1); 
y = np.sin(x) 


plt.plot(x,y) 
note = plt.text(2 , 0.5, s = "Here's a note", bbox = dict(facecolor = "red")) 
plt.show() 
+0

Этот код не будет работать в его текущей форме - вам нужно перерисовать холст внутри вашего обратного вызова –

+0

Упс, спасибо за уловку. Кодирование в Spyder позволяет вам иногда использовать ярлыки ... Я редактировал, чтобы явно показывать и перерисовывать фигуру. –

Смежные вопросы