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

Visdom line()绘制线型图(非常详细,附带实例)

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

line() 函数用来画一条线。它接受一个 N 或 N×M 张量 Y 作为输入,指定连接 N 个点的 M 条线的值。它还接受一个可选的 X 张量,指定相应的 X 轴值。X 可以是一个 N 张量(在这种情况下,所有的线都有相同的 X 轴值),或者和 Y 大小相同。

下表是该函数支持的选项:

选项 说明
opts.fillarea 填满线下区域 (boolean)。
opts.markers 显示标记 (boolean; default = false)。
opts.markersymbol 标记符号 (string; default = 'dot')。
opts.markersize 标记大小 (number; default = '10')。
opts.linecolor 线颜色 (np.array; default = None)。
opts.dash 每一行的破折号类型 (np.array; default = 'solid'),实线、破折号、虚线或破折号中的一个,其大小应与所画线的数目相匹配。
opts.legend 包含图例名称的表。
opts.layoutopts 图形后端为布局接受的任何附加选项的字典,比如 layoutopts = {'plotly':{'legend': {'x':0, 'y':0}}}。
opts.traceopts 将跟踪名称或索引映射到 plot.ly 为追踪接受的附加选项的字典,比如 traceopts= {'plotly': {'myTrace': {'mode': 'markers'}}}。
opts.webgl 用于指定是否使用 WebGL 进行绘图。它是一个布尔值,默认为 false。当图包含大量点时,使用 WebGL 可以加快绘图速度。但是需要注意,由于浏览器限制,在一个页面上不允许同时存在多个 WebGL 上下文,因此应谨慎使用此选项。

下面是一个绘制线型图的例子,代码如下:
# 导入相关库
import visdom
import numpy as np
# 生成一个在 -5~5 等间距的数组,包含 100 个元素
Y = np.linspace(-5, 5, 100)
# 使用 Visdom 库的line方法来绘制线型图
vis.line(
   # Y 轴数据,将 Y 的平方和 Y+5 的平方根组合成一个 2 列的矩阵
   Y=np.column_stack((Y * Y, np.sqrt(Y + 5))),
   # X 轴数据,将 Y 自身重复两次组成一个 2 列的矩阵
   X=np.column_stack((Y, Y)),
   # 配置选项,设置不显示标记
   opts=dict(markers=False),
)
执行以上代码后,将会在 Visdom 界面中显示一幅线型图,其中 X 轴和 Y 轴的数据分别由上述设置确定。通过这种方式,可以使用 Visdom 进行数据可视化,并观察线型图的特征。

输出如下图所示:


图 1 线型图

实现实线、虚线等不同线的代码如下:
# 导入相关库
import visdom
import numpy as np

# 创建一个 visdom 窗口,并使用 vis.line 绘制线条
win = vis.line(
    # X 轴数据:将三个在 0 和 10 之间的等差数列组合成一个 3 列的矩阵
    X=np.column_stack((
        np.arange(0, 10),
        np.arange(0, 10),
        np.arange(0, 10),
    )),
    # Y 轴数据:将三个在 5 和 10 之间的线性插值数列分别加上 5、10 后组合成一个 3 列的矩阵
    Y=np.column_stack((
        np.linspace(5, 10, 10),
        np.linspace(5, 10, 10) + 5,
        np.linspace(5, 10, 10) + 10,
    )),
    # 配置选项
    opts=dict{
        # 线条样式:一个包含 'solid'、'dash'、'dashdot' 的 NumPy 数组
        dash=np.array(['solid', 'dash', 'dashdot']),
        # 线条颜色:一个包含三种颜色值的 NumPy 数组
        linecolor=np.array([
            [0, 191, 255],
            [0, 191, 255],
            [255, 0, 0],
        ]),
        # 窗口标题
        title='不同类型的线'
    }
)

# 在之前创建的窗口 win 上继续绘制线条
vis.line(
    # X 轴数据:在 0 和 10 之间的等差数列
    X=np.arange(0, 10),
    # Y 轴数据:在 5 和 10 之间的线性插值数列加上 15
    Y=np.linspace(5, 10, 10) + 15,
    # 使用之前创建的窗口 win
    win=win,
    # 线条名称
    name='4',
    # 更新方式为插入
    update='insert',
    # 配置选项
    opts=dict{
        # 线条颜色:只包含红色的 NumPy 数组
        linecolor=np.array([
            [255, 0, 0],
        ]),
        # 线条样式:只包含点的 NumPy 数组
        dash=np.array(['dot'])
    }
)
通过上述代码可以在 Visdom 窗口中绘制多条具有不同样式和颜色的线条,并进行相应的配置。

输出如下图所示:


图 2 实线和虚线

堆叠区域,代码如下:
# 导入相关库
import visdom
import numpy as np

# 生成一个在 0 和 4 之间等间距的 200 个点的数列
Y = np.linspace(0, 4, 200)

# 使用 Visdom 库绘制堆积面积图
win = vis.line(
    # Y 轴数据:将 Y 数列分别进行平方根运算和加 2 运算,并堆叠在一起
    Y=np.column_stack((np.sqrt(Y), np.sqrt(Y) + 2)),
    # X 轴数据:与 Y 数列相同
    X=np.column_stack((Y, Y)),
    # 图表选项
    opts=dict(
        fillarea=True,          # 填充区域
        showlegend=False,       # 不显示图例
        width=380,              # 宽度
        height=330,             # 高度
        ytype='log',            # Y 轴类型为对数
        title='堆积面积图',     # 图表标题
        marginleft=30,          # 左边距
        marginright=30,         # 右边距
        marginbottom=80,        # 底部边距
        margintop=30            # 顶部边距
    )
)
输出如下图所示:


图 3 堆叠区域

相关文章