Visdom scatter()绘制散点图(非常详细,附带实例)
Visdom 是 PyTorch 深度学习最常用的模型可视化工具。Visdom 提供了多种绘图函数,可以用于实现数据的可视化。
scatter() 函数用来画 2D 或 3D 数据的散点图。它需要输入 N×2 或 N×3 的张量 X 来指定 N 个点的位置。一个可供选择的长度为 N 的向量用来保存 X 中的点对应的标签(1 到 K)。标签可以通过点的颜色反映出来。
scatter() 支持下表中的选项:
生成普通散点图,代码如下:
输出如下图所示:

图 1 普通散点图
生成带着文本标签的散点图,代码如下:
输出如下图所示:

图 2 带着文本标签的散点图
生成三维散点图,代码如下:
输出如下图所示:

图 3 三维散点图
scatter() 函数用来画 2D 或 3D 数据的散点图。它需要输入 N×2 或 N×3 的张量 X 来指定 N 个点的位置。一个可供选择的长度为 N 的向量用来保存 X 中的点对应的标签(1 到 K)。标签可以通过点的颜色反映出来。
scatter() 支持下表中的选项:
选项 | 说明 |
---|---|
opts.markersymbol | 标记符号 (string; default = 'dot')。 |
opts.markersize | 标记大小 (number; default = '10')。 |
opts.markercolor | 每个标记的颜色 (torch.*Tensor; default = nil)。 |
opts.legend | 包含图例名字的 table。 |
opts.textlabels | 每一个点的文本标签(list: default = None)。 |
opts.layoutopts | 图形后端为布局接受的任何附加选项的字典,比如 layoutopts={'plotly':{'legend': {'x':0, 'y':0}}}。 |
opts.traceopts | 将跟踪名称或索引映射到 plotly 为追踪接受的附加选项的字典,比如 traceopts= {'plotly': {'myTrace': {'mode': 'markers'}}}。 |
opts.webgl | 使用 WebGL 绘图(布尔值,default= false)。WebGL 可以为 HTML5 Canvas 提供硬件 3D 加速渲染,这样 Web 开发人员就可以借助系统显卡在浏览器中更流畅地展示 3D 场景和模型,还能创建复杂的导航和数据可视化。 |
options.markercolor |
是一个包含整数值的 Tensor。Tensor 的形状可以是 N 或 N×3、K 或 K×3:
|
生成普通散点图,代码如下:
# 导入相关库 import visdom import numpy as np # 创建 Visdom 可视化对象 vis = visdom.Visdom() # 生成一个包含 100 个随机数的数组 Y Y = np.random.rand(100) # 使用 Visdom 的 scatter 函数绘制散点图。 # 传入 X 轴和 Y 轴的数据,并设置一些配置选项,如图例、坐标轴范围和刻度步长等 old_scatter = vis.scatter( X=np.random.rand(100, 2), # X 轴数据,随机生成 100 行 2 列 Y=(Y[Y > 0] + 1.5).astype(int), # Y 轴数据:大于 0 的值加 1.5 并转为 int opts=dict( legend=['Didnt', 'Update'], # 图例标签 xtickmin=-50, # X 轴刻度最小值 xtickmax=50, # X 轴刻度最大值 xtickstep=0.5, # X 轴刻度步长 ytickmin=-50, # Y 轴刻度最小值 ytickmax=50, # Y 轴刻度最大值 ytickstep=0.5, # Y 轴刻度步长 markersymbol='cross-thin-open' # 标记符号 ) ) # 使用 update_window_opts 更新之前绘制的散点图的配置选项 # 这里更新了图例、坐标轴范围和刻度步长等 vis.update_window_opts( win=old_scatter, # 要更新的窗口 opts=dict( legend=['2019年', '2020年'], # 更新后的图例标签 xtickmin=0, # 更新后的 X 轴最小值 xtickmax=1, # 更新后的 X 轴最大值 xtickstep=0.5, # 更新后的 X 轴步长 ytickmin=0, # 更新后的 Y 轴最小值 ytickmax=1, # 更新后的 Y 轴最大值 ytickstep=0.5, # 更新后的 Y 轴步长 markersymbol='cross-thin-open' # 更新后的标记符号 ) )这段代码主要使用 Visdom 进行数据可视化操作。通过以上代码可以绘制一幅散点图,并根据需要更新其配置选项,以实现数据的可视化展示。Visdom 提供了一种方便的方式来实时观察和交互数据。
输出如下图所示:

图 1 普通散点图
生成带着文本标签的散点图,代码如下:
# 导入相关库 import visdom import numpy as np # 使用 visdom 库绘制散点图 vis.scatter( # 定义 X 轴数据,随机生成 6 行 2 列的数据 X=np.random.rand(6, 2), # 定义配置选项,这里使用字典来指定一些配置 opts=dict( # 设置每个散点的文本标签,标签内容为 'Label%d' % (i+1), # 其中 %d 表示数字,i 的取值范围为 0~5 textlabels=['Label %d' % (i + 1) for i in range(6)] ) )执行这段代码后,将会在 Visdom 界面中显示一个带有文本标签的散点图。每个散点都会显示对应的文本标签。这样方便对不同的散点进行标识和区分。
输出如下图所示:

图 2 带着文本标签的散点图
生成三维散点图,代码如下:
# 导入相关库 import visdom import numpy as np # 调用 visdom 的 scatter 方法来绘制散点图 vis.scatter( # X 轴数据,随机生成 100 行 3 列的数据 X=np.random.rand(100, 3), # Y 轴数据,对 Y 加 1.5 后转换为整数 Y=(Y + 1.5).astype(int), # 配置选项 opts=dict( # 图例标签 legend=['男性', '女性'], # 标记大小 markersize=5, # X 轴刻度的最小值 xtickmin=0, # X 轴刻度的最大值 xtickmax=2, # X 轴标签 xlabel='数量', # X 轴刻度值 xtickvals=[0, 0.75, 1.5, 2], # Y 轴刻度的最小值 ytickmin=0, # Y 轴刻度的最大值 ytickmax=2, # Y 轴刻度的步长 ytickstep=0.5, # Z 轴刻度的最小值 ztickmin=0, # Z 轴刻度的最大值 ztickmax=1, # Z 轴刻度的步长 ztickstep=0.5 ) )这段代码使用 Visdom 库绘制了一幅带有特定配置的散点图。通过配置可以定制散点图的外观和显示细节。执行代码后,将在 Visdom 界面中显示带有图例、标记大小、坐标轴标签和刻度等的散点图。这样可以根据需要进行数据可视化和分析。
输出如下图所示:

图 3 三维散点图