首页 > 编程笔记 > Python笔记 阅读:38

Visdom scatter()绘制散点图(非常详细,附带实例)

Visdom 是 PyTorch 深度学习最常用的模型可视化工具。Visdom 提供了多种绘图函数,可以用于实现数据的可视化。

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:
  • Tensor of size N:表示每个点的单通道颜色强度。0 = black,255 = red;
  • Tensor of size N×3:用三通道表示每个点的颜色。0,0,0 = black,255,255,255 = white;
  • Tensor of size K and 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 三维散点图

相关文章