绘制图形的工具比较多,常用的有matplotlib,plotly,以及pytorch的visdom。matplotlib用的比较多,功能也十分强大也比较底层。可以设置的参数也多,用起来比较麻烦。相反visdom使用更加简便,也提供了足够的功能。两者最大的区别是,visdom是运行于云端的,自身也提供了存储,适合简单地分析使用。而matplotlib能绘制更加复杂,个性化的图。因此我打算在项目运行中使用visdom,这样我可以在云端实时监控训练状态。在论文中,如果需要更复杂的图就使用matplotlib。而plotly制作的图形更加强大,也提供云端访问和数据编辑功能,作为企业级的数据展示更加合理。
建议使用半天时间掌握visdom,和几类基本图形。再花半天时间理解matplotlib的概念和用法,毕竟很多代码是使用这个的且与matlab类似,要能读懂。编写项目展示的时候使用plotly,这个比较专业,最好是团队中有专人掌握,一般没必要精通。
visdom
基本概念: window,env,state,filter,view
env->window - view
window
window是承载内容的主体,其数据存储在state中(.visdom目录下会创建json文件)。他是一个UI组件,可以显示plots, images, and text。还可以注册callback
来监听用户的操作。
environment
所有windowy以env为一组进行组织。
当有大量数据需要实时绘制时。如果需要对比他们,最好放在同一个env下。多个env会消耗大量资源
filter
filter使用正则表达式来匹配window的title。
view
view是window的排列方式
使用
Visdom实例
visdom
Arguments- server
- port
- offline 启用时将数据存在本地
- log_to_filename
绘图
- vis.image :
CxHxW
,显示一张图片。但是可以存储一组store_history
- vis.images :
B x C x H x W
- vis.text : 可以嵌入 HTML
- vis.properties : 输入组件,
Callback
- vis.audio : audio
- vis.video : videos
- vis.svg : SVG object
- vis.matplot : matplotlib plot
- vis.image :
Plotly
使用plotly提供常用数据的可视化,推荐使用这种方式。这种方式存储数据,而不是图像。- vis.scatter : 2D or 3D scatter plots
- vis.line : line plots
- vis.stem : stem plots
- vis.heatmap : heatmap plots
- vis.bar : bar graphs
- vis.histogram : histograms
- vis.boxplot : boxplots
- vis.surf : surface plots
- vis.contour : contour plots
- vis.quiver : quiver plots
- vis.mesh : mesh plots
扩展,可以传入一个字典结构opts - opts.title : figure title
- opts.width : figure width
- opts.height : figure height
- opts.showlegend : show legend (true or false)
- opts.xtype : type of x-axis (‘linear’ or ‘log’)
- opts.xlabel : label of x-axis
- opts.xtick : show ticks on x-axis (boolean)
- opts.xtickmin : first tick on x-axis (number)
- opts.xtickmax : last tick on x-axis (number)
- opts.xtickvals : locations of ticks on x-axis (table of numbers)
- opts.xticklabels : ticks labels on x-axis (table of strings)
- opts.xtickstep : distances between ticks on x-axis (number)
- opts.xtickfont : font for x-axis labels (dict of font information)
- opts.ytype : type of y-axis (‘linear’ or ‘log’)
- opts.ylabel : label of y-axis
- opts.ytick : show ticks on y-axis (boolean)
- opts.ytickmin : first tick on y-axis (number)
- opts.ytickmax : last tick on y-axis (number)
- opts.ytickvals : locations of ticks on y-axis (table of numbers)
- opts.yticklabels : ticks labels on y-axis (table of strings)
- opts.ytickstep : distances between ticks on y-axis (number)
- opts.ytickfont : font for y-axis labels (dict of font information)
- opts.marginleft : left margin (in pixels)
- opts.marginright : right margin (in pixels)
- opts.margintop : top margin (in pixels)
opts.marginbottom: bottom margin (in pixels)
自定义绘图 将数据和参数传入Plotly1
2
3
4
5
6
7
8
9import visdom
vis = visdom.Visdom()
trace = dict(x=[1, 2, 3], y=[4, 5, 6], mode="markers+lines", type='custom',
marker={'color': 'red', 'symbol': 104, 'size': "10"},
text=["one", "two", "three"], name='1st Trace')
layout = dict(title="First Plot", xaxis={'title': 'x1'}, yaxis={'title': 'x2'})
vis._send({'data': [trace], 'layout': layout, 'win': 'mywin'})注意data中必须添加
type='custom'
才能生效。而且一些内容无法显示。如果有大量内容需要使用这个功能,不如直接使用plotly。
matplotlib
基本概念
figure表示一张图,Axes表示一个绘图元素,一个figure可以包含多个axes。axis表示轴,可以设置刻度,标签,范围等。
在内部matplotlib有一个状态机来存储当前的figure与axes,默认情况下plot
会自动创建一个新的或者重复使用上一个axes。subplot
在当前figure下创建多个axes.subplots
创建新的figure和axes。
Call signatures:: subplot(nrows, ncols, index, **kwargs) subplot(pos, **kwargs) subplot(ax)
而且subplot(3,2,1)
等价于subplot(321)
,其中index选中的axes可以用plt.plot
来绘图。也可以用返回值fig,ax=subplot(321)
来绘图。
交互模式
1 |
|
plotly
这篇文章很不错,介绍了plotly的offline,graph,trace,layout。
进阶需要参考官方文档