「Matplotlib tips」の版間の差分
提供: Eospedia
(→オブジェクト指向インターフェイス) |
|||
行70: | 行70: | ||
<pre> | <pre> | ||
plt.close(fig) | plt.close(fig) | ||
+ | </pre> | ||
+ | |||
+ | == 画像ファイルを開いて表示 == | ||
+ | === Pillow === | ||
+ | * ドキュメント | ||
+ | ** https://pillow.readthedocs.io/en/stable/reference/Image.html | ||
+ | <pre> | ||
+ | from PIL import Image | ||
+ | |||
+ | im = Image.open('hoge.png') | ||
+ | im.show() | ||
</pre> | </pre> |
2020年11月4日 (水) 12:51時点における版
目次
参考文献(全般)
JupyterLabでインタラクティブプロット
- 下準備
- ipympl( https://github.com/matplotlib/ipympl )をインストール
- 使い方
- ノートブックの冒頭で以下のマジックコマンドをたたく
%matplotlib widget
始めにinlineにしておいて途中からwidgetに変えるとかは無理。最初から冒頭でwidgetにしておく必要あり。
複数プロット
参考文献
具体例1
- 縦に3つのグラフを並べて、x軸の目盛りとラベルは一番下のみに表示
fig, ax = plt.subplots(nrows=3, ncols=1, figsize=figsize, dpi=dpi, sharex=True) ax[0].plot(epoch, gen_loss) ax[0].set_ylabel('Generator loss') ax[1].plot(epoch, kld) ax[1].set_ylabel('KLD') ax[2].plot(epoch, total_loss) ax[2].set_ylabel('Total loss') ax[2].set_xlabel('Epoch')
3Dプロット
Axes3D
- インポート
from mpl_toolkits.mplot3d import Axed3D import matplotlib.pyplot as plt
- 使い方
fig = plt.figure() ax = fig.add_subplot(111, projection='3d')
- axはAxes3Dというクラスのインスタンスになっていて、3Dプロット用のメソッドを持っている。
- %matplotlib widget と一緒に使うと、3Dプロットの回転とかがマウスドラッグで可能。
プロットの保存
オブジェクト指向インターフェイス
matplotlib.figure.Figureオブジェクト (fig) に対し、
fig.savefig('hoge.png', bbox_inches='tight')
- bbox_inches='tight' を付けない場合、例えばfigが 10x7inch@100dpiであれば 1000x700 pixelで画像が保存されるが、図によってはかなりの余白ができてしまう。
- bbox_inches='tight' を付けると、図の中のコンテンツをできるだけタイトに囲むバウンディングボックスでもって図が保存される。画素数はその分減少するけど無駄な余白が無い。
windowsのダークテーマとか使っていて、標準のフォトアプリとかで保存画像を開くと、軸やラベルの部分が背景が透明化されていて見づらいかもしれない。その場合は
fig.savefig('hoge.png', bbox_inches='tight', facecolor='w')
としてfigを白くすればよい。
ループ回して大量に保存するとかならfigはcloseして消すべし?
plt.close(fig)
画像ファイルを開いて表示
Pillow
from PIL import Image im = Image.open('hoge.png') im.show()