・お題:散布図を描いたところ、画像をデータとして反映させたくなった。矢印で散布図に対応する画像を表示させたい。
・画像はIcooonmonoから拝借した。png画像として落とし、ワーキングディレクトリに保存した。
・画像情報を矢印で追加するのは、matplotlibの機能で見つかったので、これを参考に設定したい。
・とりあえず、プロットするならこんな感じ。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
fig, ax = plt.subplots()
#エビ画像
# ポジション設定
xy = (1, 2)
ax.plot(xy[0], xy[1], ".r")#".r"を付けないと、プロットされないっぽい。
・画像を読み込む
arr_img = plt.imread("エビ.png", format='png')
・ちなみに、読み込んだ画像を確認するとこんな感じ。
fig, ax = plt.subplots()
ax.imshow(arr_img)
plt.show()
・次に、OffsetImageで、画像を格納
imagebox = OffsetImage(arr_img, zoom=0.2)
・次に、矢印で示すオブジェクトを作成して、グラフに追加する。
ab = AnnotationBbox(imagebox, xy=(0,0),
xybox=(50, -50),
xycoords='data',
boxcoords="offset points",
arrowprops=dict(arrowstyle="->"))
ax.add_artist(ab)
・最後に、表示する。
plt.show()
・これを全部くっつけて、エビとピザを表示できるようにすると、以下のような感じ。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
fig, ax = plt.subplots()
#エビ画像
# ポジション設定
xy = (1, 2)
ax.plot(xy[0], xy[1], ".r")
#表示する画像を作成
arr_img = plt.imread("エビ.png", format='png')
imagebox = OffsetImage(arr_img, zoom=0.2)
#画像を表示
ab = AnnotationBbox(imagebox, xy=(0,0),
xybox=(50, -50),
xycoords='data',
boxcoords="offset points",
arrowprops=dict(arrowstyle="->"))
ax.add_artist(ab)
#ピザ画像
# ポジション設定
xy = (2, 3)
ax.plot(xy[0], xy[1], ".r")
#表示する画像を作成
arr_img = plt.imread("ピザ.png", format='png')
imagebox = OffsetImage(arr_img, zoom=0.2)
#画像を表示
ab = AnnotationBbox(imagebox, xy=(0,0),
xybox=(50, -50),
xycoords='data',
boxcoords="offset points",
arrowprops=dict(arrowstyle="->"))
ax.add_artist(ab)
ax.set_xlim(0, 3)
ax.set_ylim(1, 4)
plt.show()
・プロットと画像が被らなければこれでも良いかも。
おわり