Pynote

Python、機械学習、画像処理について

Jupyter Notebook - インラインで画像や matplotlib の図などのメディアを表示させる方法

概要

Jupyter Notebook で画像や SVG などのメディアをインラインで表示する方法について紹介する。

画像

ファイル

from IPython.display import Image, display
Image('test.jpg')


numpy 配列

import cv2
from IPython.display import Image, display

img = cv2.imread('test.jpg')
img = cv2.imencode('.png', img)[1]

display(Image(img))

PIL Image

import cv2
from IPython.display import Image, display
from PIL import Image as pilImage

img = pilImage.open('test.jpg')
img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
img = cv2.imencode('.png', img)[1]

display(Image(img))

SVG

from IPython.display import SVG, display

svg = '''<svg>
<rect x="10" y="10" height="100" width="100"
 style="stroke:#ff0000; fill: #0000ff"/>
</svg>'''

display(SVG(svg))


Pandas データフレーム

そのまま表示できる。

import seaborn as sns

iris = sns.load_dataset('iris')
iris


matplotlib

インタラクティブでない図

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def f(x, y):
    return x**2 + y**2 + x * y

X, Y = np.mgrid[-3:3, -3:3]
Z = f(X, Y)

fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)

インタラクティブな図

%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def f(x, y):
    return x**2 + y**2 + x * y

X, Y = np.mgrid[-3:3, -3:3]
Z = f(X, Y)

fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)

アニメーション

%matplotlib nbagg
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import ArtistAnimation

x = np.linspace(0, np.pi * 4, 100)

fig, ax = plt.subplots(figsize=(4, 4))
frames = []
for delta in np.linspace(0, np.pi, 30):
    y = np.sin(x + delta)

    artists = ax.plot(x, y, c='b')
    frames.append(artists)

# アニメーションを作成する。
anim = ArtistAnimation(fig, frames, interval=500)