Filter By
To plot a subset of a table based on a column value, use the filter_by
and required_filter_by
parameters. These parameters accept column(s) denoting variables to filter on in the dataset. The plot shows only the data that matches the filter criteria. filter_by
does not require the input filter or Linker to be set on that column, whereas required_filter_by
does.
Under the hood, the Deephaven query engine performs a partition_by
table operation on the given filter column. This efficient implementation means that plots with many groups can be filtered and redrawn quickly, even with large datasets.
Note
filter_by
works similarly to the one_click
API, although there are some differences in behavior:
In the one_click
API, if filters are provided but not set, then one trace is charted.
In the filter_by
API, if filters are provided but not set, then all values within the filter columns are charted on separate traces.
This provides a consistent experience with by
behavior on dx
charts, but may not be optimal if filtering on numeric columns with many unique values.
Examples
Filter by a categorical variable
To filter on a single column, provide a column to filter_by
. The chart is filtered to match the value of the filter variable from the corresponding input filter or link. If the input filter or link is not set, all groups within the column are shown.
import deephaven.plot.express as dx
stocks = dx.data.stocks() # import the example stocks data set
# specify `x` and `y` columns, as well as additional filter variables with `filter_by`
filtered_line_plot = dx.line(stocks, x="Timestamp", y="Price", filter_by="Sym")
Filter by multiple categorical variables
To filter on multiple columns, provide columns to filter_by
. The chart is filtered to match the values of the filter variables from the corresponding input filters or links. If the input filters or links are not set, all groups of variables are shown.
import deephaven.plot.express as dx
stocks = dx.data.stocks() # import the example stocks data set
# specify `x` and `y` columns, as well as additional filter variables with `filter_by`
filtered_line_plot = dx.line(
stocks, x="Timestamp", y="Price", filter_by=["Sym", "Exchange"]
)
Filter by a required variable
To require a filter on a column, provide a column to required_filter_by
. The chart is filtered to match the value of the filter variable from the corresponding input filter or link. If the input filter or link is not set, no data is shown.
import deephaven.plot.express as dx
stocks = dx.data.stocks() # import the example stocks data set
# specify `x` and `y` columns, as well as additional filter variables with `required_filter_by`
filtered_line_plot = dx.line(stocks, x="Timestamp", y="Price", required_filter_by="Sym")
Filter by optional and required variables
To mix optional and required filters, provide columns to both filter_by
and required_filter_by
. The chart is filtered to match the values of the filter variables from the corresponding input filters or links. If only the required_filter_by
input filter or link is not set, no data is shown. If only the filter_by
input filter or link is not set, all groups within the filter_by
column are shown.
Note
Mixing optional and required filters displays overlays to enter filters for all columns. Only the required_filter_by
filters are actually required and the message is dismissed when all of those are provided.
import deephaven.plot.express as dx
stocks = dx.data.stocks() # import the example stocks data set
# specify `x` and `y` columns, as well as additional filter variables with `filter_by` and `required_filter_by`
filtered_line_plot = dx.line(
stocks, x="Timestamp", y="Price", filter_by="Sym", required_filter_by="Exchange"
)
Filter by and plot by
To mix a filter and plot by, provide columns to both filter_by
and by
. By default, all grouping variables within the columns are shown for by
and filter_by
.
import deephaven.plot.express as dx
stocks = dx.data.stocks() # import the example stocks data set
# specify `x` and `y` columns, as well as additional filter variables with `filter_by`
filtered_line_plot = dx.line(
stocks, x="Timestamp", y="Price", by="Sym", filter_by="Exchange"
)
PartitionedTable
filter by
Providing a PartitionedTable
defaults to a plot by for the key columns on which the table is partitioned. Set filter_by=True
to make the columns filters instead.
import deephaven.plot.express as dx
# import and partition on example stocks data set
stocks = dx.data.stocks()
partitioned_stocks = stocks.partition_by(["Sym", "Exchange"])
# specify `x` and `y` columns, and make "Sym" and "Exchange" filters
filtered_line_plot = dx.line(
partitioned_stocks, x="Timestamp", y="Price", filter_by=True
)
PartitionedTable
required filter by
Providing a PartitionedTable
defaults to a plot by for the key columns on which the table is partitioned. Set required_filter_by=True
to make the columns required filters instead.
import deephaven.plot.express as dx
# import and partition on example stocks data set
stocks = dx.data.stocks()
partitioned_stocks = stocks.partition_by(["Sym", "Exchange"])
# specify `x` and `y` columns, and make "Sym" and "Exchange" required filters
filtered_line_plot = dx.line(
partitioned_stocks, x="Timestamp", y="Price", required_filter_by=True
)
PartitionedTable
filter by and plot by
Providing a PartitionedTable
defaults to a plot by for the key columns on which the table is partitioned. Set filter_by
to a subset of the key columns to make those columns filters instead.
import deephaven.plot.express as dx
# import and partition on example stocks data set
stocks = dx.data.stocks()
partitioned_stocks = stocks.partition_by(["Sym", "Exchange"])
# specify `x` and `y` columns, and make "Sym" a filter, maintaining "Exchange" as a plot by
filtered_line_plot = dx.line(
partitioned_stocks, x="Timestamp", y="Price", filter_by="Sym"
)
Subplot filter by
make_subplots
maintains any filter_by
and required_filter_by
filter columns originally passed into the subplots.
Warning
Using multiple filters with the same name but different types is not currently supported. Rename columns to ensure they are unique, if necessary.
import deephaven.plot.express as dx
stocks = dx.data.stocks() # import the example stocks data set
# specify `x` and `y` columns, as well as additional filter variables with `filter_by`
filtered_sym_line_plot = dx.line(
stocks,
x="Timestamp",
y="Price",
filter_by="Sym",
)
# specify `x` and `y` columns, as well as additional required filter variables with `required_filter_by`
filtered_exchange_line_plot = dx.line(
stocks, x="Timestamp", y="Price", by="Sym", required_filter_by="Exchange"
)
# make subplots, maintaining the filters
filtered_plots = dx.make_subplots(
filtered_sym_line_plot, filtered_exchange_line_plot, rows=2
)