hiplot.Experiment
¶HiPlot has an XY graph. By default, it will simply display one dot per datapoint.
However, it is possible to make it draw lines or even trees by specifying offspring relationships.
In an hiplot.Experiment
, each point corresponds to a hiplot.Datapoint
, and each hiplot.Datapoint
has a unique uid
.
When a hiplot.Datapoint
has his from_uid
set to a parent’s uid
, the XY graph will connect the parent and the child.
Multiple points can share the same parent - this is especially useful when representing evolving populations.
exp = hip.Experiment()
exp.display_data(hip.Displays.XY).update({
'axis_x': 'generation',
'axis_y': 'loss',
})
for i in range(200):
dp = hip.Datapoint(
uid=str(i),
values={
'generation': i,
'param': 10 ** random.uniform(-1, 1),
'loss': random.uniform(-5, 5),
})
if i > 10:
from_parent = random.choice(exp.datapoints[-10:])
dp.from_uid = from_parent.uid # <-- Connect the parent to the child
dp.values['loss'] += from_parent.values['loss'] # type: ignore
dp.values['param'] *= from_parent.values['param'] # type: ignore
exp.datapoints.append(dp)
It is possible to customize how the data is rendered:
Either globally by attributing a hiplot.ValueType
to columns
exp = hip.fetchers.load_demo("demo") # Let's create a dummy experiment
# Change column type
exp.parameters_definition["optionA"].type = hip.ValueType.NUMERIC_LOG
# Force a column minimum/maximum values
exp.parameters_definition["pct_success"].force_range(0, 100)
# Change d3 colormap (https://github.com/d3/d3-scale-chromatic) for non-categorical columns
exp.parameters_definition["exp_metric"].colormap = "interpolateSinebow"
Or for invididual components with hiplot.Experiment.display_data()
(see Displays reference for all possible values)
# Provide configuration for the parallel plot
exp.display_data(hip.Displays.PARALLEL_PLOT).update({
# Hide some columns in the parallel plot
'hide': ['optionB'],
# Specify the order for others
'order': ['time'], # Put column time first on the left
})
# Provide configuration for the table with all the rows
exp.display_data(hip.Displays.TABLE).update({
# Don't display `uid` and `from_uid` columns to the user
'hide': ['uid', 'from_uid'],
# In the table, order rows by default
'order_by': [['pct_success', 'desc']],
# Specify the order for columns
'order': ['time'], # Put column time first on the left
})
# Provide configuration for the XY graph
exp.display_data(hip.Displays.XY).update({
# Default X axis for the XY plot
'axis_x': 'time',
# Default Y axis
'axis_y': 'lr',
# Configure lines
'lines_thickness': 1.0,
'lines_opacity': 0.1,
# Configure dots
'dots_thickness': 2.0,
'dots_opacity': 0.3,
})
Rendering of the experiment.