[Matplotlib] テキストの表示と書式設定

[Matplotlib] テキストの表示と書式設定

テキストの表示と書式設定

テキストの表示

 Axes.text() を使って Axes にテキスト を表示できます。

Axes.text(x, y, s, fontdict=None, withdash=False, **kwargs)

 必須引数は x, y, s で、それぞれ x 座標、y 座標、表示するテキスト (文字列) です。**kwargs で fontfamily や size, color などを設定できます。

 (0.4, 0.4) の位置に "Python" をサイズ 30 で表示させてみます。

# MATPLOTLIB_TEXT_01

# In[1]

# Matplotlibをインポート
import matplotlib.pyplot as plt

# FigureとAxes
fig, ax = plt.subplots(figsize=(6, 6))

# 目盛線を描画
ax.grid()

# 座標(0.4, 0.4)にテキストを表示する
ax.text(0.4, 0.4, "Python", size=30)

plt.show()

Python テキスト (ax.text)

 デフォルトでは指定座標にテキストの左下隅を合わせるように設定されていますが、horizontalalignment や verticalalignment で設定を変更できます。それぞれ、水平方向と垂直方向の位置を調整します。たとえば、指定座標にテキストの中央下を合わせる場合は horizontalalignment に "center" を指定します。

# In[2]

# テキストを削除
del fig.gca().texts[0]

# (0.4,0.4)の位置にテキストを表示する
# テキストの中央下を指定座標に合わせる
ax.text(0.4, 0.4, "Python", size=30, horizontalalignment="center")

# Figureを再表示
fig

Matplotlib テキストの表示 (horizontalalignment="center")

 指定座標にテキストの中央を合わせたいときは、horizontalalignment と verticalalignment の両方に "center" を指定します。

# In[3]

del fig.gca().texts[0]

# (0.4,0.4)の位置にテキストを表示する
# テキスト中央を指定座標に合わせる
ax.text(0.4, 0.4, "Python", size=30,
        horizontalalignment="center", verticalalignment="center")

fig

Matplotlib テキスト (verticalalignment="center")

 color でテキストの色を指定できます。

# In[4]

del fig.gca().texts[0]

# 座標(0.5,0.5)にテキストを表示する
# テキストの色を赤にする
ax.text(0.5, 0.5, "Python", size=40, color="red")

fig

Matplotlib Axes.text (color でテキストの色を指定)

 fontfamily でテキストのフォントの種類を設定できます。

# In[5]

del fig.gca().texts[0]

# (0.4,0.4)にテキストを表示する
# フォントに"Impact"を指定
ax.text(0.4, 0.4, "Python", fontsize=50, fontfamily="Impact")

fig

Matplotlib フォントの種類に "Impact" を指定

 fontstyle でフォントのスタイルを指定できます。たとえば、テキストを斜体にしたいときには、fontstyle に "italic" を指定します。

# In[6]

del fig.gca().texts[0]

# 座標(0.4,0.4)にテキストを表示する
# 文字を斜体にする
ax.text(0.4, 0.4, "Python", fontsize=50, fontstyle="italic")

fig

Maplotlib fontstyle でテキストを斜体にする

 fontweight で文字の太さを変えられます。数値またはキーワードで指定します。

# In[7]

del fig.gca().texts[0]

# 座標(0.4,0.4)にテキストを表示する
# テキストを太字にする
ax.text(0.4, 0.4, "Python", fontsize=40, fontweight="bold")

#fig.savefig("text_07", bbox_inches = "tight")

fig

Matplotlib fontweight="bolde" でテキストを太字にする

 rotation でテキスト全体を回転できます。

# In[8]

del fig.gca().texts[0]

# 座標(0.4,0.4)にテキストを表示する
# 文字を反時計周りに45度回転する
ax.text(0.4, 0.4, "Python", fontsize=40, rotation=45)

fig

Matplotlib テキストを回転させる

 Axes.text() メソッドは、デフォルトではデータに関連付けた座標で位置を指定するようになっています。つまり、x 軸と y 軸の目盛に合わせて座標を指定します。インスタンス引数を敢えて明示的に記述するなら、transform = Axes.transData となっています。transform には他に Axes.transAxes と Figure.transFigure を指定できます。その意味を理解するために、次のコードを実行してください。

# In[9]

# FigureとAxes
fig, ax = plt.subplots(figsize=(6, 6), facecolor="lightgray")

# x軸とy軸の範囲を0~2に設定
ax.set(xlim=(0, 2), ylim=(0, 2))
ax.grid()

# データに関連付けてテキストを表示
ax.text(0.4, 0.4, "Data", fontsize=18)

# Axesに関連付けてテキストを表示
ax.text(0.4, 0.4, "Axes", fontsize=18, transform=ax.transAxes)

# Figureに関連付けてテキストを表示
ax.text(0.4, 0.4, "Figure", fontsize=18, transform=fig.transFigure)

plt.show()

Matplotlib transform=transData, transAxes, transFigure

 位置関係がわかりやすいように、Figure は灰色で塗り潰してあります。デフォルトの状態で表示させた "Data" は (x, y) = (0.4, 0.4) の位置にあります。transform に Axes.transAxes を渡して表示させた "Axes" は図の白い部分の縦と横の大きさに対する比率で (0.4, 0.4) の位置にあります。"Figure" は "Axes" と少しだけずれた位置にあります。transform に Figure.transFigure を渡した場合、Figure (灰色部分を含めた領域) に対する比率で位置を指定することになるからです。

 テキスト設定の詳細については記事末の matplotlib.text.Textクラスのインスタンス引数 を参照してください。
 

フォント辞書による書式設定

 フォント辞書を作成して Axes.text() の引数に渡すこともできます。

# MATPLOTLIB_TEXT_02

# Matplotlibをインポート
import matplotlib.pyplot as plt

# Figureを設定
fig = plt.figure(figsize =(6, 6))

# Axesを追加
ax = fig.add_subplot(111)

# 目盛線を描画
ax.grid()

# フォント辞書の作成
fdic = {
    "family" : "Georgia",
    "style" : "italic",
    "size" : 50,
    "color" : "darkblue",
    "weight" : "heavy"
}

# Axesにテキストを追加
ax.text(0.2, 0.4, "Python", fontdict=fdic)

 Python Matplotlib フォント辞書
 

Pythonデータサイエンスハンドブック ―Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習

新品価格
¥4,536から
(2019/10/24 18:17時点)

bbox

 Axes.text() の引数に bbox を渡すこともできます。
 bbox はテキストを囲む図形のスタイルを設定する辞書です。辞書の中で "boxstyle" が指定されると matplotlib.patches.FancyBboxPatchクラスのインスタンス(特殊な形をした図形)が呼び出されることになります。"boxstyle" が指定されない場合は、matplotlib.patches.Rectangleクラスのインスタンス(普通の長方形)が作られます。

# MATPLOTLIB_TEXT_03

# Matplotlibをインポート
import matplotlib.pyplot as plt

# Figureを設定
fig = plt.figure(figsize =(6, 6))

# Axesを追加
ax = fig.add_subplot(111)

# 目盛線を描画
ax.grid()

# bboxの作成
boxdic = {
    "facecolor" : "lightgreen",
    "edgecolor" : "darkred",
    "boxstyle" : "Round",
    "linewidth" : 2
}

# Axesにテキストを追加
ax.text(0.2, 0.4, "Python", size=40, bbox=boxdic)

 Python Matplotlib bbox
 

行間隔の設定

 Axes.text() の引数に linspacing を渡して改行したときの行間隔(スペース)を設定することができます。

# MATPLOTLIB_TEXT_04

# Matplotlibをインポート
import matplotlib.pyplot as plt

# Figureを設定
fig = plt.figure(figsize =(6, 6))

# Axesを追加
ax = fig.add_subplot(111)

# 目盛線を描画
ax.grid()

# 行間隔を変えてテキストを表示
ax.text(0.2, 0.8, "linespacing=1\nPython", size=20, linespacing=1)
ax.text(0.2, 0.5, "linespacing=2\nPython", size=20, linespacing=2)
ax.text(0.2, 0.1, "linespacing=3\nPython", size=20, linespacing=3)

 Python Matplotlib 行間(ラインスペース)の設定
 

matplotlib.text.Textクラスのインスタンス引数

引数 記述方法
alpha float
backgroundcolor color
bbox patches.FancyBboxPatchオブジェクトのプロパティ辞書
color color
fontfamily FONTNAME
fontproperties font_manager.FontProperties
fontsize {数値, "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large"}
fontstretch {0-1000の数値, "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"}
fontstyle {"normal", "italic", "oblique"}
fontweight {0-1000の数値, "ultralight", "light", "normal", "regular", "book", "medium", "roman", "semibold", "demibold", "demi", "bold", "heavy", "extra bold", "black"}
horizontalalignment {"center", "right", "left"}
in_layout bool
linespacing float (fontsizeに対する倍率)
position (float, float)
rotation {度数単位の角度, "vertical", "horizontal"}
rotation_mode {None, "default", "anchor"}
url str
verticalalignment {"center", "top", "bottom", "baseline", "center_baseline"}