visdomはFacebook AI Researchが公開しているオープンソースの可視化ライブラリ,Torchとnumpyに対応している.
Visdom aims to facilitate visualization of (remote) data with an emphasis on supporting scientific experimentation.
Install
pip install visdom
使い方
- CLIからvisdomコマンドで起動
- デフォルトはhttp://localhost:8097でアクセスできる
$ visdom
プロット
- 以下のようにコンストラクタを呼んだ後,プロットをしていく
vis = visdom.Visdom()
vis.text
- 文字列を表示
# text vis.text('Hello, world!')
vis.image
- 画像を表示
# image img = cv2.imread("../images/cavy.jpg", 0) vis.image(img)
vis.matplot
- matplotlibの出力結果を表示
# matplotlib plt.plot([1, 23, 2, 4]) plt.ylabel('some numbers') vis.matplot(plt)
vis.video
- 動画を表示
# video video = np.empty([256, 250, 250, 3], dtype=np.uint8) for n in range(256): video[n, :, :, :].fill(n) vis.video(tensor=video)
vis.scatter
- 散布図を表示
- 指定できるオプションは以下のようなものがある
- legend: 凡例
- xtickmin, xtickmax: x軸の範囲
- ytickmin, ytickmax: y軸の範囲
- xtickstep: x軸のメモリの間隔
- markersymbol: マーカーに用いる記号
# scatter Y = np.random.rand(100) old_scatter = vis.scatter( X=np.random.rand(100, 2), Y=(Y[Y > 0] + 1.5).astype(int), opts=dict( legend=['Didnt', 'Update'], xtickmin=-1, xtickmax=1, xtickstep=0.5, ytickmin=-1, ytickmax=1, ytickstep=0.5, markersymbol='cross-thin-open', ), )
- z軸についての指定をすることで3次元プロットも可能
# 3D scatter vis.scatter( X=np.random.rand(100, 3), Y=(Y + 1.5).astype(int), opts=dict( legend=['Men', 'Women'], markersize=5, xtickmin=0, xtickmax=2, xlabel='Arbitrary', xtickvals=[0, 0.75, 1.6, 2], ytickmin=0, ytickmax=2, ytickstep=0.5, ztickmin=0, ztickmax=1, ztickstep=0.5, ) )
vis.bar
- bar plotを表示
- 指定できるオプションは以下のようなものがある
- legend: 凡例
- stacked: 棒グラフを積み上げる
- rownames: x軸の名前
# bar vis.bar( X=np.abs(np.random.rand(5, 3)), opts=dict( stacked=True, legend=['Facebook', 'Google', 'Twitter'], rownames=['2012', '2013', '2014', '2015', '2016'] ) )
vis.histogram
- ヒストグラムの表示
vis.histogram(X=np.random.rand(10000), opts=dict(numbins=20))
vis.heatmap
- ヒートマップの表示
vis.heatmap( X=np.outer(np.arange(1, 6), np.arange(1, 11)), opts=dict( columnnames=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], rownames=['y1', 'y2', 'y3', 'y4', 'y5'], colormap='Electric', ) )
vis.contour
- 等高線の表示
vis.heatmap( X=np.outer(np.arange(1, 6), np.arange(1, 11)), opts=dict( columnnames=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], rownames=['y1', 'y2', 'y3', 'y4', 'y5'], colormap='Electric', ) )
vis.surf
- サーフェスプロットの表示
vis.surf(X=X, opts=dict(colormap='Hot'))
vis.line
- 折れ線グラフの表示
vis.line(Y=np.random.rand(10), opts=dict(showlegend=True))
全部表示
- 今回試したものを全部表示させると以下のようになる
- 各カードごとに,レイアウト変更やリサイズなどのインタラクティブな操作ができる