[matplotlib] グラフにテキストを追加する。

x軸、y軸のラベル及びタイトルを設定する

import matplotlib.pyplot as plt
import numpy as np

values = 33.73 * np.random.randn(10000) + 170.69
fig, ax = plt.subplots(1, 1)
ax.hist(values, bins=50)

plt.xlabel("height (cm)")
plt.ylabel("frequency")
plt.title("stature distribution")

plt.show()

テキスト

px などの尺度ではなく、グラフ上の座標で位置を指定します。

import matplotlib.pyplot as plt
import numpy as np

values = 33.73 * np.random.randn(10000) + 170.69
fig, ax = plt.subplots(1, 1)
ax.hist(values, bins=50)

plt.text(50, 300, "Text!")

plt.show()

アノテーション

テキストでアノテーションする

annotate() はグラフのある場所をテキストでアノテーションするのに使われる。
s に文字列、xy にアノテーションをする座標を指定します。

import matplotlib.pyplot as plt
import numpy as np


xs = np.arange(-5.0, 5.0, 0.1)
ys = np.sin(xs)

fig, ax = plt.subplots(1, 1)
ax.plot(xs, ys)
ax.set_ylim(-2,2)

ax.annotate('local max', xy=(2, 1))

plt.show()

テキストと矢印でアノテーションする

まず xytext でテキストの位置、xy でアノテーション対象の位置を指定します。
そして arrowprops 引数を与えることで、始点が xytext で終点が xy である矢印が描写されます。

shrink

xytext ~ xy のうち、矢印を描写する割合

import matplotlib.pyplot as plt
import numpy as np

xs = np.arange(-5.0, 5.0, 0.1)
ys = np.sin(xs)

fig, [ax1, ax2, ax3] = plt.subplots(3, 1, sharey=True)
ax1.set_ylim(-2,2)

ax1.plot(xs, ys)
ax1.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(shrink=0.1))

ax2.plot(xs, ys)
ax2.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(shrink=0.5))

ax3.plot(xs, ys)
ax3.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(shrink=0.9))

plt.show()

width

矢印の太さを pt で指定する。

import matplotlib.pyplot as plt
import numpy as np

xs = np.arange(-5.0, 5.0, 0.1)
ys = np.sin(xs)

fig, [ax1, ax2] = plt.subplots(2, 1, sharey=True)
ax1.set_ylim(-2,2)

ax1.plot(xs, ys)
ax1.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(width=10))

ax2.plot(xs, ys)
ax2.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(width=30))

plt.show()

headwidth

矢印の先の太さを pt で指定する。

import matplotlib.pyplot as plt
import numpy as np

xs = np.arange(-5.0, 5.0, 0.1)
ys = np.sin(xs)

fig, [ax1, ax2] = plt.subplots(2, 1, sharey=True)
ax1.set_ylim(-2,2)

ax1.plot(xs, ys)
ax1.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(headwidth=10))

ax2.plot(xs, ys)
ax2.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(headwidth=30))

plt.show()

headlength

矢印の先の長さを pt で指定する。

import matplotlib.pyplot as plt
import numpy as np

xs = np.arange(-5.0, 5.0, 0.1)
ys = np.sin(xs)

fig, [ax1, ax2] = plt.subplots(2, 1, sharey=True)
ax1.set_ylim(-2,2)

ax1.plot(xs, ys)
ax1.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(headlength=10))

ax2.plot(xs, ys)
ax2.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(headlength=30))

plt.show()

コメントを残す

メールアドレスが公開されることはありません。