8000 Merge pull request #26057 from anntzer/rt · matplotlib/matplotlib@449caf7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 449caf7

Browse files
authored
Merge pull request #26057 from anntzer/rt
Further cleanup rainbow_text example.
2 parents 19d93b7 + 41a4c40 commit 449caf7

File tree

1 file changed

+24
-68
lines changed

1 file changed

+24
-68
lines changed
Lines changed: 24 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,31 @@
11
"""
2-
============
3-
Rainbow text
4-
============
5-
6-
The example shows how to string together several text objects.
7-
8-
History
9-
-------
10-
On the matplotlib-users list back in February 2012, Gökhan Sever asked the
11-
following question:
12-
13-
| Is there a way in matplotlib to partially specify the color of a string?
14-
|
15-
| Example:
16-
|
17-
| plt.ylabel("Today is cloudy.")
18-
|
19-
| How can I show "today" as red, "is" as green and "cloudy." as blue?
20-
|
21-
| Thanks.
22-
23-
The solution below is modified from Paul Ivanov's original answer.
2+
====================================================
3+
Concatenating text objects with different properties
4+
====================================================
5+
6+
The example strings together several Text objects with different properties
7+
(e.g., color or font), positioning each one after the other. The first Text
8+
is created directly using `~.Axes.text`; all subsequent ones are created with
9+
`~.Axes.annotate`, which allows positioning the Text's lower left corner at the
10+
lower right corner (``xy=(1, 0)``) of the previous one (``xycoords=text``).
2411
"""
2512

2613
import matplotlib.pyplot as plt
2714

28-
29-
def rainbow_text(x, y, strings, colors, orientation='horizontal',
30-
ax=None, **kwargs):
31-
"""
32-
Take a list of *strings* and *colors* and place them next to each
33-
other, with text strings[i] being shown in colors[i].
34-
35-
Parameters
36-
----------
37-
x, y : float
38-
Text position in data coordinates.
39-
strings : list of str
40-
The strings to draw.
41-
colors : list of color
42-
The colors to use.
43-
orientation : {'horizontal', 'vertical'}
44-
ax : Axes, optional
45-
The Axes to draw into. If None, the current axes will be used.
46-
**kwargs :
47-
All other keyword arguments are passed to plt.text() and plt.annotate(), so you
48-
can set the font size, family, etc.
49-
"""
50-
if ax is None:
51-
ax = plt.gca()
52-
53-
assert orientation in ['horizontal', 'vertical']
54-
if orientation == 'horizontal':
55-
txt = ax.text(x, y, strings[0], color=colors[0], **kwargs)
56-
for s, c in zip(strings[1:], colors[1:]):
57-
txt = ax.annotate(' ' + s, xy=(1, 0), xycoords=txt,
58-
va="bottom", color=c, **kwargs)
59-
60-
elif orientation == 'vertical':
61-
kwargs.update(rotation=90, verticalalignment='bottom')
62-
txt = ax.text(x, y, strings[0], color=colors[0], **kwargs)
63-
for s, c in zip(strings[1:], colors[1:]):
64-
txt = ax.annotate(' ' + s, xy=(0, 1), xycoords=txt,
65-
va="bottom", color=c, **kwargs)
66-
67-
68-
words = "all unicorns poop rainbows ! ! !".split()
69-
colors = ['red', 'orange', 'gold', 'lawngreen', 'lightseagreen', 'royalblue',
70-
'blueviolet']
71-
plt.figure(figsize=(8, 8))
72-
rainbow_text(0.1, 0.05, words, colors, size=18)
73-
rainbow_text(0.05, 0.1, words, colors, orientation='vertical', size=18)
15+
plt.rcParams["font.size"] = 20
16+
ax = plt.figure().add_subplot(xticks=[], yticks=[])
17+
18+
# The first word, created with text().
19+
text = ax.text(.1, .5, "Matplotlib", color="red")
20+
# Subsequent words, positioned with annotate(), relative to the preceding one.
21+
text = ax.annotate(
22+
" says,", xycoords=text, xy=(1, 0), verticalalignment="bottom",
23+
color="gold", weight="bold") # custom properties
24+
text = ax.annotate(
25+
" hello", xycoords=text, xy=(1, 0), verticalalignment="bottom",
26+
color="green", style="italic") # custom properties
27+
text = ax.annotate(
28+
" world!", xycoords=text, xy=(1, 0), verticalalignment="bottom",
29+
color="blue", family="serif") # custom properties
7430

7531
plt.show()

0 commit comments

Comments
 (0)
0