|
from __future__ import annotations |
|
|
|
from typing import TYPE_CHECKING |
|
|
|
from wandb.plot.custom_chart import plot_table |
|
|
|
if TYPE_CHECKING: |
|
import wandb |
|
from wandb.plot.custom_chart import CustomChart |
|
|
|
|
|
def line( |
|
table: wandb.Table, |
|
x: str, |
|
y: str, |
|
stroke: str | None = None, |
|
title: str = "", |
|
split_table: bool = False, |
|
) -> CustomChart: |
|
"""Constructs a customizable line chart. |
|
|
|
Args: |
|
table (wandb.Table): The table containing data for the chart. |
|
x (str): Column name for the x-axis values. |
|
y (str): Column name for the y-axis values. |
|
stroke (str):Column name to differentiate line strokes (e.g., for |
|
grouping lines). |
|
title (str):Title of the chart. |
|
split_table (bool): Whether the table should be split into a separate section |
|
in the W&B UI. If `True`, the table will be displayed in a section named |
|
"Custom Chart Tables". Default is `False`. |
|
|
|
Returns: |
|
CustomChart: A custom chart object that can be logged to W&B. To log the |
|
chart, pass it to `wandb.log()`. |
|
|
|
Example: |
|
```python |
|
import math |
|
import random |
|
import wandb |
|
|
|
# Create multiple series of data with different patterns |
|
data = [] |
|
for i in range(100): |
|
# Series 1: Sinusoidal pattern with random noise |
|
data.append([i, math.sin(i / 10) + random.uniform(-0.1, 0.1), "series_1"]) |
|
# Series 2: Cosine pattern with random noise |
|
data.append([i, math.cos(i / 10) + random.uniform(-0.1, 0.1), "series_2"]) |
|
# Series 3: Linear increase with random noise |
|
data.append([i, i / 10 + random.uniform(-0.5, 0.5), "series_3"]) |
|
|
|
# Define the columns for the table |
|
table = wandb.Table(data=data, columns=["step", "value", "series"]) |
|
|
|
# Initialize wandb run and log the line chart |
|
with wandb.init(project="line_chart_example") as run: |
|
line_chart = wandb.plot.line( |
|
table=table, |
|
x="step", |
|
y="value", |
|
stroke="series", # Group by the "series" column |
|
title="Multi-Series Line Plot", |
|
) |
|
run.log({"line-chart": line_chart}) |
|
``` |
|
""" |
|
return plot_table( |
|
data_table=table, |
|
vega_spec_name="wandb/line/v0", |
|
fields={"x": x, "y": y, "stroke": stroke}, |
|
string_fields={"title": title}, |
|
split_table=split_table, |
|
) |
|
|