An Automatic Way of Adding Text in Matplotlib
September 6, 2020 ยท View on GitHub
- If you need any help or have any suggestion/feedback ping me here.
Content
Overview
-
soccerplotspackage now comes with a utility function that can help users to add and modify text without the need of usingtext()method. -
plot_text()is the method which can be used to add and modify text as per the users need. -
Here, we will cover the documentation of
plot_text()method with some examples to show how one can add and modify text.
soccerplots.utils.plot_text
soccerplots.utils.plot_text(x, y, text, text_dict, ax, color_rest='k', align="left", fontsize=None, **kwargs)
| No. | Parameter | About Parameter |
|---|---|---|
| 1. | x | (float) x-coodrinate value for text. |
| 2. | y | (float) y-coodrinate value for text. |
| 3. | text | (str) the text that will be added. |
| 4. | text_dict | (dict) contains words that the user wants to format. |
| 5. | ax | (ax.Axes) axis object. |
| 6. | color_rest | (str, optional) color for the text. Defaults to 'k'. |
| 7. | align | (str, optional) alignment of boxes. Defaults to "left". |
| 8. | fontsize | (float, optional) size of the text. Default to None. |
| 9. | **kwargs(optional) | all other keyword arguments are passed on to matplotlib.axes.Axes.text. |
| No. | Returns | About |
|---|---|---|
| 1. | ax | (axes.Axes)axis object |
Examples
-
Here we will look into some of the examples that can help in adding text using
soccerplots.utils.plot_text()method. -
Examples Content:
Adding text with colors
-
Here, we will add a text saying
Hello World!!! This is Python Programmingand will colorPythonwithgreencolor andProgrammingwithcrimsoncolor. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Hello World!!! This is Python Programming"
## addition info about text
text_dict = dict(
Python = dict(color="green"), ## Python color is "green"
Programming = dict(color="crimson") ## Programming color is "crimson"
)
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

Add Fontstyle
-
We will add a text saying
Hello World!!! Matplotlib is Loveand will additalicfontstyle toHello World!!!and colorMatplotlibandLove. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Hello World!!! Matplotlib is Love"
## addition info about text
text_dict = {
"Hello": dict(fontstyle="italic"), ## Hello is italic
"World!!!": dict(fontstyle="italic"), ## World!!! is italic
"Matplotlib": dict(color="#897941"), ## color to Matplotlib
"Love": dict(color="crimson") ## color to Love
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

-
There is an alternative way of doing this.
-
Since we can see that in the above text
HelloandWorld!!!are coming together. So without passing them as multiple keys we can pass them as a single key, for that we have to change thetexta bit. -
The
textwill now look like:Hello_World!!! Matplotlib is Loveand then we will passignore=Trueto the dictionary for theHello_World!!!key intext_dict.(see code-snippet below) -
_(underscore) will tell the method that we are combining these two words and the modification will come for both these words,ignore=Truewill tell the method to ignore the_sign in the text and replace it with(space). -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Hello_World!!! Matplotlib is Love" ## _ has been added
## addition info about text
text_dict = {
"Hello_World!!!": dict(fontstyle="italic", ignore=True), ## ignore_last has been set to True
"Matplotlib": dict(color="#897941"), ## color to Matplotlib
"Love": dict(color="crimson") ## color to Love
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

Coloring consecutive words
-
Our text here is the same as above
Hello World!!! Matplotlib is Loveand we will colorHello World!!!also making it italic. -
Again, we will change the text a bit adding
_betweenHelloandWorld!!!and will passignore=Trueand some color-value to the dictionary. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Hello_World!!! Matplotlib is Love" ## added underscore
## addition info about text
text_dict = {
"Hello_World!!!": dict(fontstyle="italic", color="#3524A6", ignore=True), ## added color
"Matplotlib": dict(color="#897941"), ## color to Matplotlib
"Love": dict(color="crimson") ## color to Love
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

Fontweight
-
The text is:
Hello World!!! Matplotlib is Love. -
Here we will add
fontweight="bold"forMatplotlibandLoveandHello World!!!will remain italic and will add some color too. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Hello_World!!! Matplotlib is Love"
## addition info about text
text_dict = {
"Hello_World!!!": dict(fontstyle="italic", color="#3524A6", ignore=True), ## italic and color
"Matplotlib": dict(color="#897941", fontweight="bold"), ## bold and color
"Love": dict(color="crimson", fontweight="bold") ## bold and color
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

Changing size of words
-
Here we will see how to change the size of words in a text.
-
Our text is
This word is small and this word is largeand we will add color towordand make itboldand changefontsizeforsmallandlarge. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "This word is small and this word is large"
## addition info about text
text_dict = {
"word": dict(fontweight="bold", color="#897941"), ## bold and color
"small": dict(fontsize="small"), ## fontsize is "small", can pass a floating value as well
"large": dict(fontsize="large") ## fontsize is "large", can pass a floating value as well
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

Changing fontsize of the whole text
-
Our text here is:
Computer Programming is just awesome -
And we will increase the fontsize for our whole string also adding color to
awesomeand makingComputer Programmingitalic. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Computer_programming is just awesome"
## addition info about text
text_dict = {
"awesome": dict(fontweight="bold", color="#897941"), ## bold with color
"Computer_programming": dict(fontstyle="italic", ignore=True) ## italic
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax, fontsize=15 ## increased fontsize
)
- Output:

Changing fontstyle
-
We will now see how to change fontstyle, the text is the same as above.
-
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "Computer_programming is just awesome"
## addition info about text
text_dict = {
"awesome": dict(fontweight="bold", color="#897941"),
"Computer_programming": dict(fontstyle="italic", ignore=True)
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax, fontfamily="Purisa" ## added fontstyle
)
- Output:

Add multiple lines with colors and styles
- Here we will add two lines:
This is Line Number 01
And This is Line Number 02
-
We will add color, italic fontstyle and bold fontweight to
Number 01, and will add color, oblique fontstyle and roman fontweight toNumber 02. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = "This is Line Number_01\nAnd This is Line Number_02"
## addition info about text
text_dict = {
"Number_01": dict(color="crimson", fontstyle="italic", fontweight="bold", ignore=True), ## added modifications
"Number_02": dict(color="#897941", fontstyle="oblique", fontweight="roman", ignore=True) ## added modifications
}
## create subplot
fig, ax = plt.subplots()
## plot the text
ax = plot_text(
x = 0.5, y = 0.5,
text = text, text_dict = text_dict, ax = ax
)
- Output:

- Note: You can pass
textfor multiple line strings like this as well:
text = """This is Line Number_01
And This is Line Number_02"""
ignore_last
-
Let's say we have
Corners, Crosses, Freekicks and Passesas our text and we want to colorCornersandCrossesbut we don't want to color the,that are included in those words, what we will do is pass another argumentignore_last=True, this will ignore the last character of a word and make the required changes. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = """How are the best creators in Europe's top 5 league making chances
through Corners, Crosses, Indirect_Freekicks and Open_Play_Passes?"""
## addition info about text
## ignore_last will ignore the last word
text_dict = {
"Corners,": dict(color="skyblue", ignore_last=True),
"Crosses,": dict(color="gold", ignore_last=True),
"Indirect_Freekicks": dict(color="grey", ignore=True),
"Open_Play_Passes?": dict(color="crimson", ignore=True, ignore_last=True)
}
## create subplot
fig, ax = plt.subplots(facecolor="#121212")
ax.set_facecolor("#121212")
ax.set(xlim=(-2, 2))
ax.axis("off")
## plot the text
ax = plot_text(
x = 0., y = 0.6,
text = text, text_dict = text_dict, ax = ax,
color_rest="#F0FFF0", fontsize=9
)
- Output:

Different fontsize for different lines
- Let's say we have the following text:
text = """La Liga 2019/20: Expected Performance
Rolling average comparison between goal difference & expected goal difference"""
-
And now we want to have larger fontsize for the first line and a smaller one for the second. We can do this by passing a list of fontsizes to
plot_textmethod. -
Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## text to be plotted
text = """La Liga 2019/20: Expected Performance
Rolling average comparison between goal_difference & expected_goal_difference"""
## text dict
text_dict = {
"goal_difference": dict(color="skyblue", ignore=True),
"expected_goal_difference": dict(color="gold", ignore=True)
}
## create subplot
fig, ax = plt.subplots(facecolor="#121212")
ax.set_facecolor("#121212")
ax.set(xlim=(-2, 2))
ax.axis("off")
## plot the text
ax = plot_text(
x = 0., y = 0.6,
text = text, text_dict = text_dict, ax = ax,
color_rest="#F0FFF0", fontsize=[13, 9], va="top" ## list of fontsize and
## va="top" to reduce distance between first and second line
)
- Output:

Quote
- Code Snippet:
import matplotlib.pyplot as plt
from soccerplots.utils import plot_text
## file at http://bit.do/johantxt
with open("johan.txt", "r") as ofile:
text = ofile.read()
text_dict = {
"youth_teams": dict(color="#00FF00", fontstyle="italic", ignore=True),
"first_team.": dict(color="#F5F5F5", fontstyle="italic",
fontweight="semibold", ignore=True, ignore_last=True),
"emhasis": dict(color="gold", fontweight="demibold"),
"learning.": dict(color="#00FFFF", ignore_last=True),
"suspicion": dict(color="#F04D4D", fontweight="roman"),
"youth_coaches": dict(color="#00FF00", fontstyle="italic", ignore=True),
"winning.": dict(color="crimson", ignore_last=True),
"reputation.": dict(color="#008080", fontweight="bold", ignore_last=True),
"club.": dict(color="gold", ignore_last=True),
"talent": dict(color="#C674C6"),
"learn,": dict(color="#00FFFF", fontweight="bold", ignore_last=True),
"point?": dict(color="lime", ignore_last=True),
"developing": dict(color="#32CD32"),
"Johan_Cruyff": dict(color="#FFA500", ignore=True, fontsize=15)
}
## create subplot
fig, ax = plt.subplots(figsize=(12, 4), facecolor="#121212")
ax.set_facecolor("#121212")
ax.axis("off")
ax = plot_text(0.5, 0.5, text, text_dict, ax=ax, color_rest="#FFFAFA",
fontsize=12, fontfamily="Norasi")
- Output:
