Skip to main content

自定义多线图表

wandb.plot.line_series()的用法和范例
Created on February 18|Last edited on July 12
本报告是作者Stacey Svetlichnaya所写的Custom Multi-Line Plots的翻译

方法:wandb.plot.line_series()

将一个自定义线序列图表记录到本地W&B:
wandb.log({"my_custom_id" : wandb.plot.line_series(
xs=[0, 1, 2, 3, 4],
ys=[[10, 20, 30, 40, 50], [0.5, 11, 72, 3, 41]],
keys=["metric Y", "metric Z"],
title="Two Random Metrics",
xname="x units")})
这一自定义图表在同一个x-y轴坐标系上呈现多条线或者多串不同的x-y坐标对。如下两个示例使用默认设置和随机数据。你可以平移放大图表来查看细节(其中有些线靠得太近,没法区分开来)。

Random data sample
2


基本用法范例

我这里是一个时间序列方面的TensorFlow教程,使用了一个天气数据集,里面有14个特征数据,包括温度、气压和湿度等。完整数据的一个小子集被载入到Pandas数据框,命名为 climate_data
columns = ['T (degC)', 'p (mbar)', 'rho (g/m**3)']
num_steps = 200
xs = [ i for i in range(num_steps) ]
ys= [ climate_data[c][:num_steps] for c in columns ]
wandb.log({"weather_sample" : wandb.plot.line_series(
xs=xs,
ys=ys,
keys=columns,
title="Weather Metrics")})
要注意,x和y的数据必须完全匹配。你可以用一串xs匹配多串ys,或者分别为每串ys提供单独的一串xs。如果这些气温/气压/空气密度测试结果取自不同时间,那么我们可以提供三串不同的x值。点这里查看线序列图表的完整定义。

所遵循的步骤:

  • 对于你要绘制的每个线序列,找到x值和y值,以及每个序列的名称(该项可选)。
  • 按照同样的顺序,把x值列表传入xs,把y值列表传入ys,把可选名称传入keys
  • 把这些参数传递给wandb.plot.line_series()(图表标题和x轴标题可选),从而在指定键下创建图表(上方的键为weather_sample)。为了将多个运行项可视化至同一个图表上,则保持该图表键为常量。要注意,表本身也会被记录到工作区的“Media(媒体)”部分,位于weather_sample_table下面。

Sample time series data
1


自定义用法

利用Vega可视化语法可以轻而易举地自定义线序列图表。此处我在同一个坐标系中比较多个时间片,这样可以更好地观察到数据中的差异。若要查看完整的Vega配置(每个图表的定义),可将鼠标移至图表右上角并点击“眼睛”图标。
一些简单的修改:
  • 切换线型标注方法,使颜色与指标键对应,笔画与记录的时间片对应。切换strokeDash和color下面的field值,使strokeDash包含"field": "name"color包含"field": "${field:lineKey}"。移除条目scale。
  • 编辑主标题、图例和坐标轴,使其更具描述性:在encoding下的相关字段中添加"title": "Your Title"

Randomized time slices
3


更多示例:记录不同的x值

在简单情况下,多串y值映射到一串x值。而此处我以不同的频率采集了三个气压指标,展现一个稍微更高级的场景:对应每一串y值分别传入一串x值。我还把"type" : "line"改为"type" : "point",这样可以比较清楚地区分x值。
在底下一行图表中,左下图根据样本Id为数据着色,右下图根据指标类型为数据着色,通过两图对比,你可以对比可视化效果/感知分组优势。

Vapor pressure data
4


如何编辑预设以绘制自定义图表

  • 从一个现有图表类型开始。鼠标移至右上角,点击自定义图表>铅笔图标>按钮“编辑”,在左上方。
  • 直接编辑这段JSON代码,然后就能看到右侧对应的重新呈现的图形效果。你可以在网上找到很多有用的、启发性的Vega范例
  • 可以选择在右侧下拉菜单中填写自定义标题等文本字段。
  • 对修改满意了之后,可以为自定义图表保存一个副本,以备日后使用。点击左上方的“保存为”,然后为自己的图表类型取一个描述性名称(你可以同时编辑描述内容,这样可以方便以后做参考!),以后想用的时候,就可以在你的用户/团队实体中找到。
  • 好处:当你把修改的“自定义图表”保存为预设之后,就可以直接从Python向其记录数据,即通过wandb.plot_table(vega_spec_name="your_username/your_custom_preset_name")点这里查看更多详细信息和范例。

修改过的Vega配置

该版本的线序列配置为线条着色是根据指标,而不是根据运行项,并且包含指定标题。
{
"$schema": "https://vega.github.io/schema/vega-lite/v4.json",
"description": "A plot for an arbitrary number of lines",
"data": {
"name": "wandb"
},
"title": "Climate Data Sample",
"layer": [
{
"selection": {
"grid": {
"type": "interval",
"bind": "scales"
}
},
"mark": {"type": "line", "interpolate": "linear"},
"encoding": {
"x":{
"field": "${field:step}",
"type": "quantitative",
"title": "Time step of measure"
},
"y": {
"field": "${field:lineVal}",
"title": "Value in indicated units",
"type": "quantitative"
},
"color": {
"type": "nominal",
"field": "${field:lineKey}",
"title" : "Units of measure"
},
"strokeDash": {
"type": "nominal",
"field": "name",
"title" : "Sample id"
}
}
}
]
}

问答

感谢大家阅读!我们希望本文能帮助大家构建独特又引人注目的自定义图表。如有任何问题,请在下方留言。
Iterate on AI agents and models faster. Try Weights & Biases today.