1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import matplotlib.pyplot as plt from matplotlib import transforms
def rainbow_text(x, y, strings, colors, ax=None, **kw): """ Take a list of ``strings`` and ``colors`` and place them next to each other, with text strings[i] being shown in colors[i].
This example shows how to do both vertical and horizontal text, and will pass all keyword arguments to plt.text, so you can set the font size, family, etc.
The text will get added to the ``ax`` axes, if provided, otherwise the currently active axes will be used. """ if ax is None: ax = plt.gca() t = ax.transData canvas = ax.figure.canvas
for s, c in zip(strings, colors): text = ax.text(x, y, s + " ", color=c, transform=t, **kw) text.draw(canvas.get_renderer()) ex = text.get_window_extent() t = transforms.offset_copy( text.get_transform(), x=ex.width, units='dots')
for s, c in zip(strings, colors): text = ax.text(x, y, s + " ", color=c, transform=t, rotation=90, va='bottom', ha='center', **kw) text.draw(canvas.get_renderer()) ex = text.get_window_extent() t = transforms.offset_copy( text.get_transform(), y=ex.height, units='dots')
rainbow_text(0, 0, "all unicorns poop rainbows ! ! !".split(), ['red', 'cyan', 'brown', 'green', 'blue', 'purple', 'black'], size=16)
plt.show()
|