Tutorial: Use custom charts
Tutorial of using the custom charts feature in the W&B UI
8 minute read
Create custom charts in your W&B project. Log arbitrary tables of data and visualize them exactly how you want. Control details of fonts, colors, and tooltips with the power of Vega.
wandb.plot_table()
.If you do not see the expected data, the column you are looking for might not be logged in the selected runs. Save your chart, go back out to the runs table, and verify selected runs using the eye icon.
W&B has a number of builtin chart presets that you can log directly from your script. These include line plots, scatter plots, bar charts, histograms, PR curves, and ROC curves.
wandb.plot.line()
Log a custom line plot—a list of connected and ordered points (x,y) on arbitrary axes x and y.
A line plot logs curves on any two dimensions. If you plot two lists of values against each other, the number of values in the lists must match exactly (for example, each point must have an x and a y).
See an example report or try an example Google Colab notebook.
wandb.plot.scatter()
Log a custom scatter plot—a list of points (x, y) on a pair of arbitrary axes x and y.
You can use this to log scatter points on any two dimensions. Note that if you’re plotting two lists of values against each other, the number of values in the lists must match exactly (for example, each point must have an x and a y).
See an example report or try an example Google Colab notebook.
wandb.plot.bar()
Log a custom bar chart—a list of labeled values as bars—natively in a few lines:
You can use this to log arbitrary bar charts. Note that the number of labels and values in the lists must match exactly (for example, each data point must have both).
See an example report or try an example Google Colab notebook.
wandb.plot.histogram()
Log a custom histogram—sort list of values into bins by count/frequency of occurrence—natively in a few lines. Let’s say I have a list of prediction confidence scores (scores
) and want to visualize their distribution:
You can use this to log arbitrary histograms. Note that data
is a list of lists, intended to support a 2D array of rows and columns.
See an example report or try an example Google Colab notebook.
wandb.plot.pr_curve()
Create a Precision-Recall curve in one line:
You can log this whenever your code has access to:
predictions
) on a set of examplesground_truth
) for those exampleslabels=["cat", "dog", "bird"...]
if label index 0 means cat, 1 = dog, 2 = bird, etc.)See an example report or try an example Google Colab notebook.
wandb.plot.roc_curve()
Create an ROC curve in one line:
You can log this whenever your code has access to:
predictions
) on a set of examplesground_truth
) for those exampleslabels=["cat", "dog", "bird"...]
if label index 0 means cat, 1 = dog, 2 = bird, etc.)See an example report or try an example Google Colab notebook.
Tweak a builtin preset, or create a new preset, then save the chart. Use the chart ID to log data to that custom preset directly from your script. Try an example Google Colab notebook.
You can log the following data types from your script and use them in a custom chart:
wandb.config
at the start of your training. For example: wandb.config.learning_rate = 0.0001
wandb.log({"val_acc" : 0.8})
. If you write to this key multiple times during training via wandb.log()
, the summary is set to the final value of that key.history
fieldwandb.Table()
to save that data, then query it in your custom panel.historyTable
in your custom chart panel. Each time you call wandb.Table()
or log a custom chart, you’re creating a new table in history for that step.Use wandb.Table()
to log your data as a 2D array. Typically each row of this table represents one data point, and each column denotes the relevant fields/dimensions for each data point which you’d like to plot. As you configure a custom panel, the whole table will be accessible via the named key passed to wandb.log()
(custom_data_table
below), and the individual fields will be accessible via the column names (x
, y
, and z
). You can log tables at multiple time steps throughout your experiment. The maximum size of each table is 10,000 rows. Try an example a Google Colab.
Add a new custom chart to get started, then edit the query to select data from your visible runs. The query uses GraphQL to fetch data from the config, summary, and history fields in your runs.
Select a Chart in the upper right corner to start with a default preset. Next, select Chart fields to map the data you’re pulling in from the query to the corresponding fields in your chart.
The following image shows an example on how to select a metric then mapping that into the bar chart fields below.
Click Edit at the top of the panel to go into Vega edit mode. Here you can define a Vega specification that creates an interactive chart in the UI. You can change any aspect of the chart. For example, you can change the title, pick a different color scheme, show curves as a series of points instead of as connected lines. You can also make changes to the data itself, such as using a Vega transform to bin an array of values into a histogram. The panel preview will update interactively, so you can see the effect of your changes as you edit the Vega spec or query. Refer to the Vega documentation and tutorials .
Field references
To pull data into your chart from W&B, add template strings of the form "${field:<field-name>}"
anywhere in your Vega spec. This will create a dropdown in the Chart Fields area on the right side, which users can use to select a query result column to map into Vega.
To set a default value for a field, use this syntax: "${field:<field-name>:<placeholder text>}"
Apply any changes to a specific visualization panel with the button at the bottom of the modal. Alternatively, you can save the Vega spec to use elsewhere in your project. To save the reusable chart definition, click Save as at the top of the Vega editor and give your preset a name.
Tutorial of using the custom charts feature in the W&B UI
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.