Nota
Fare clic qui per scaricare il codice di esempio completo
Artista nell'artista #
Sovrascrivi i metodi di base in modo che un artista possa contenere un altro artista. In questo caso, la riga contiene un'istanza Text per etichettarla.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.lines as lines
import matplotlib.transforms as mtransforms
import matplotlib.text as mtext
class MyLine(lines.Line2D):
def __init__(self, *args, **kwargs):
# we'll update the position when the line data is set
self.text = mtext.Text(0, 0, '')
super().__init__(*args, **kwargs)
# we can't access the label attr until *after* the line is
# initiated
self.text.set_text(self.get_label())
def set_figure(self, figure):
self.text.set_figure(figure)
super().set_figure(figure)
def set_axes(self, axes):
self.text.set_axes(axes)
super().set_axes(axes)
def set_transform(self, transform):
# 2 pixel offset
texttrans = transform + mtransforms.Affine2D().translate(2, 2)
self.text.set_transform(texttrans)
super().set_transform(transform)
def set_data(self, x, y):
if len(x):
self.text.set_position((x[-1], y[-1]))
super().set_data(x, y)
def draw(self, renderer):
# draw my label at the end of the line with 2 pixel offset
super().draw(renderer)
self.text.draw(renderer)
# Fixing random state for reproducibility
np.random.seed(19680801)
fig, ax = plt.subplots()
x, y = np.random.rand(2, 20)
line = MyLine(x, y, mfc='red', ms=12, label='line label')
line.text.set_color('red')
line.text.set_fontsize(16)
ax.add_line(line)
plt.show()
Riferimenti
L'uso delle seguenti funzioni, metodi, classi e moduli è mostrato in questo esempio: