ich habe mir eine Klasse geschrieben, mit der ich Text in der Matplotlib verschieben kann. Das funktioniert auch einwandfrei. Nachfolgen der Code dazu:
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from matplotlib import pylab as p
from matplotlib.text import Text
class DragHandler(object):
def __init__(self, figure=None) :
self.figure = figure
if self.figure is None : self.figure = p.gcf()
self.dragged = None
self.figure.canvas.mpl_connect("pick_event", self.on_pick_event)
#self.figure.canvas.mpl_connect("button_press_event", self.on_press_event)
self.figure.canvas.mpl_connect("button_release_event", self.on_release_event)
self.figure.canvas.mpl_connect("motion_notify_event", self.on_motion)
def on_pick_event(self, event):
if isinstance(event.artist, Text):
self.dragged = event.artist
x0, y0 = self.dragged.get_position()
self.pick_pos = (x0, y0, event.mouseevent.xdata,
event.mouseevent.ydata)
return True
def on_motion(self, event):
if self.dragged is None: return
x0, y0 , xpress, ypress = self.pick_pos
dx = event.xdata - xpress
dy = event.ydata - ypress
tmppos = (x0+dx, y0+dy)
self.dragged.set_position(tmppos)
self.figure.canvas.draw()
def on_release_event(self, event):
if self.dragged is not None :
self.dragged = None
self.figure.canvas.draw()
return True
fig = p.figure()
ax = fig.add_subplot(111)
p.grid()
col = 'black'
props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
p.text(0.05, 0.95, "text", picker= True, color = col,
transform=ax.transAxes,
fontsize=14, verticalalignment='top',
bbox=props)
TextDragH = DragHandler(fig)
p.show()
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from matplotlib import pylab as p
from matplotlib.text import Text
class DragHandler(object):
def __init__(self, figure=None) :
self.figure = figure
if self.figure is None : self.figure = p.gcf()
self.dragged = None
self.figure.canvas.mpl_connect("pick_event", self.on_pick_event)
#self.figure.canvas.mpl_connect("button_press_event", self.on_press_event)
self.figure.canvas.mpl_connect("button_release_event", self.on_release_event)
self.figure.canvas.mpl_connect("motion_notify_event", self.on_motion)
def on_pick_event(self, event):
print("on pick")
if isinstance(event.artist, Text):
self.dragged = event.artist
x0, y0 = self.dragged.get_position()
self.pick_pos = (x0, y0, event.mouseevent.xdata,
event.mouseevent.ydata)
return True
def on_motion(self, event):
if self.dragged is None: return
x0, y0 , xpress, ypress = self.pick_pos
dx = event.xdata - xpress
dy = event.ydata - ypress
tmppos = (x0+dx, y0+dy)
self.dragged.set_position(tmppos)
self.figure.canvas.draw()
def on_release_event(self, event):
if self.dragged is not None :
self.dragged = None
self.figure.canvas.draw()
return True
class PlotBaseClass(object):
def __init__(self, fig):
'''
Constructor
'''
self.figure = fig
self.axes = {}
self.axes['left'] = self.figure.add_subplot(111)
TextDragH = DragHandler(self.figure)
def showText(self,textlist):
self.text = {}
props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
for col, text in textlist:
self.text[col] = self.axes['left'].text(0.05, 0.95,
text, picker= True, color = col,
transform=self.axes['left'].transAxes,
fontsize=14, verticalalignment='top',
bbox=props)
fig = p.figure()
plots = PlotBaseClass(fig)
tlist = [('black', 'Text1')]
plots.showText(tlist)
p.show()
Danke im Voraus