TraceColumns
Trace Columns enable you to reuse query elements as columns throughout multiple different areas within the trace.
Tip
Using Trace Columns can help reduce copy and paste code!
Trace Columns perform the same basic service that the query()
function does- allowing you to define sql select statements.
Example
- name: Simple Line
model: ref(test-table)
props:
type: bar
x: query(x)
y: query(y)
marker:
color: query( case when x >= 5 then '#713B57' else 'grey' end )
line:
color: query( case when x >= 5 then '#713B57' else 'grey' end )
pattern:
shape: query( case when x = 5 then '/' when x = 6 THEN 'x' else '' end )
line:
width: query( Case when x in (5,6) then 2.5 else null end)
- name: Simple Line
model: ref(test-table)
columns:
x_data: x
y_data: y
color: case when x >= 5 then '#713B57' else 'grey' end
shape: case when x = 5 then '/' when x = 6 THEN 'x' else '' end
width: case when x in (5,6) then 2.5 else null end
props:
type: bar
x: column(x_data)
y: column(y_data)
marker:
color: column(color)
line:
color: column(color)
pattern:
shape: column(shape)
line:
width: column(width)
Slicing & Indexing Column Arrays
Trace Columns support slicing and indexing, enabling you to pull out sub-arrays or specific values from a given column array.
Indexing
Some trace configurations require numbers or strings as inputs. For example indicator traces require a single number to represent as the
big value in the card. Since the query()
and column()
functions always return arrays, indexing allows you to grab a single value
from the array to use in configurations that require a single value.
You can index columns by using the following syntax:
column(column_name)[index]
index
is a zero-based index that represents the position in the array you want to pull out. Negative indexes are also supported,
allowing you to count from the end of the array. The last value in the array is represented by -1, the second to last by -2, and so on.
Example
A great example of a situation where you would want to use Column indexing are indicator traces.
- name: Indicator Trace
model: ref(csv)
columns:
x_data: x
y_data: y
props:
type: "indicator"
mode: "number+delta"
value: column(y_data)[0]
number:
prefix: "$"
delta:
position: "top"
reference: column(y_data)[1]
column(y_data)[0]
is pulling the first item in the array as the value and comparing its delta to the second item in the column y_data array.
Slicing
Slicing allows you to pull out a sub-array from a given column array. This is useful when you only want to use a portion of the array in a given configuration, but don't want to filter the whole trace.
You can slice columns by using the following syntax:
column(column_name)[start:stop]
start
and stop
values are zero-based indexes that represent the start and end of the slice you want to pull out.
Negative indexes are also supported, allowing you to count from the end of the array. The last value in the array is represented
by -1, the second to last by -2, and so on.
If you omit the stop value, the slice will continue to the end of the array. If you omit the start value, the slice will start at the beginning of the array.
Example
Surface plots can be a really useful place to utilize slicing.
- name: Surface Trace
model: ref(csv)
columns:
x_data: x
y_data: y
props:
type: surface
z:
- column(x_data)
- column(x_data)[0:5]
- column(x_data)[5:10]
- column(y_data)
- column(y_data)[0:5]
- column(x_data)[5:10]
Attributes
Field | Type | Default | Description |
---|---|---|---|