Visdom是一个灵活的可视化工具,可以实时显示新创建的数据,支持Torch和Numpy,是深度学习框架PyTorch的可视化工具,做出的图像也较为美观,本文总结了Visdom的基础画图操作。
安装方式
在Python3环境下,使用pip直接安装Visdom模块。
pip install visdom
然后命令行启动服务器
python -m visdom.server
一旦启动了服务器后,就可以通过浏览器访问***http://localhost:8097***来访问Visdim,localhost可以替换为Visdom服务器的托管地址。
启动服务器可能,浏览器访问时,可能出现蓝屏现象,这是由于css等文件的缺失,可以参考卡布奇其诺博客来下载css文件并直接替换visdom包中的static文件来正常显示。
1. 显示文字
from visdom import Visdom
vis= Visdom()
vis.text('Hello, world !')
效果:
2. 显示图片
from visdom import Visdom
import numpy as np
vis= Visdom()
# 显示单图片
vis.image(
np.random.rand(3, 256, 256),
opts=dict(title='单图片', caption='图片标题1'),
)
# 显示网格图片
vis.images(
np.random.randn(20, 3, 64, 64),
opts=dict(title='网格图像', caption='图片标题2')
)
效果:
3. 画出散点图
from visdom import Visdom
import numpy as np
vis = Visdom()
# 2D scatterplot with custom intensities (red channel)
vis.scatter(
X = np.random.rand(255, 2),
Y = (np.random.randn(255) > 0) + 1 ,
opts=dict(
markersize=10,
markercolor=np.floor(np.random.random((2, 3)) * 255),
legend=['Men', 'Women']
),
)
效果:
4. 画出线图
from visdom import Visdom
import numpy as np
vis = Visdom()
# line plots
Y = np.linspace(-5, 5, 100)
vis.line(
Y=np.column_stack((Y * Y, np.sqrt(Y + 5))),
X=np.column_stack((Y, Y)),
opts=dict(markers=False),
)
效果:
5. 画茎叶图
from visdom import Visdom
import numpy as np
import math
vis = Visdom()
# stemplot
Y = np.linspace(0, 2 * math.pi, 70)
X = np.column_stack((np.sin(Y), np.cos(Y)))
vis.stem(
X=X,
Y=Y,
opts=dict(legend=['Sine', 'Cosine'])
)
效果:
6. 画热力图
from visdom import Visdom
import numpy as np
import math
vis = Visdom()
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',
)
)
效果:
7. 画普通、堆叠、分组条形图
from visdom import Visdom
import numpy as np
import math
vis = Visdom()
# 单个条形图
vis.bar(X=np.random.rand(20))
# 堆叠条形图
vis.bar(
X=np.abs(np.random.rand(5, 3)),
opts=dict(
stacked=True,
legend=['Sina', '163', 'AliBaBa'],
rownames=['2013', '2014', '2015', '2016', '2017']
)
)
# 分组条形图
vis.bar(
X=np.random.rand(20, 3),
opts=dict(
stacked=False,
legend=['A', 'B', 'C']
)
)
效果:
8. 画数据直方图
from visdom import Visdom
import numpy as np
vis = Visdom()
vis.histogram(X=np.random.rand(10000), opts=dict(numbins=20))
效果:
9. 画箱线图
from visdom import Visdom
import numpy as np
vis = Visdom()
# boxplot
X = np.random.rand(100, 2)
X[:, 1] += 2
vis.boxplot(
X=X,
opts=dict(legend=['Men', 'Women'])
)
效果:
10. 画表面图
from visdom import Visdom
import numpy as np
vis = Visdom()
x = np.tile(np.arange(1, 101), (100, 1))
y = x.transpose()
X = np.exp((((x - 50) ** 2) + ((y - 50) ** 2)) / -(20.0 ** 2))
vis.surf(X=X, opts=dict(colormap='Hot'))
效果:
11. 画轮廓图
from visdom import Visdom
import numpy as np
vis = Visdom()
x = np.tile(np.arange(1, 101), (100, 1))
y = x.transpose()
X = np.exp((((x - 50) ** 2) + ((y - 50) ** 2)) / -(20.0 ** 2))
vis.contour(X=X, opts=dict(colormap='Viridis'))
效果:
12. 画出网格图
from visdom import Visdom
import numpy as np
vis = Visdom()
# mesh plot
x = [0, 0, 1, 1, 0, 0, 1, 1]
y = [0, 1, 1, 0, 0, 1, 1, 0]
z = [0, 0, 0, 0, 1, 1, 1, 1]
X = np.c_[x, y, z]
i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2]
j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6]
Y = np.c_[i, j, k]
vis.mesh(X=X, Y=Y, opts=dict(opacity=0.5))
效果:
13. 绘制SVG对象
from visdom import Visdom
import numpy as np
vis = Visdom()
svgstr = """
<svg height="300" width="300">
<ellipse cx="80" cy="80" rx="50" ry="30"
style="fill:red;stroke:purple;stroke-width:2" />
抱歉,你的浏览器不支持在线显示SVG对象.
</svg>
"""
vis.svg(
svgstr=svgstr,
opts=dict(title='SVG图像')
)