Is your feature request related to a problem? Please describe.
Understanding relationships between sets is an important analysis task. The major challenge in this context is the combinatorial explosion of the number of set intersections if the number of sets exceeds a trivial threshold.
Venn (and Euler) Diagrams doesn’t scale beyond three or four sets (with four sets requiring ellipses instead of circles to show all possible intersections.
UpSet plots are a method for showing set data with more than three intersecting sets. UpSet shows intersections in a matrix, with the rows of the matrix corresponding to the sets, and the columns to the intersections between these sets (or vice versa). The size of the sets and of the intersections are shown as bar charts.
Example (from the UpSet plot Wikipedia article):

More information:
Describe the solution you'd like
I'd like for HoloViews (and hvPlot) to have support for creating UpSet plot.
This, I think, could be done in a similar manner to how .hist() method works: the new UpSet plot command or method it would create the matrix showing intersections, and then create bar charts counting number of elements in specific subset or set, and adjoin the resulting bar charts to the matrix plot.
Describe alternatives you've considered
There exist a few implementations of UpSet plots in Python.
- with matplotlib as a backend:
- pyUpSet (repo, pypi) (2015) - not actively developed
- UpSetPlot (repo, docs, pypi) (2023) - not actively developed; there are forks that attempt to solve problems with it when used with Pandas 3+ and NumPy 2.4+
- Marsilea (repo, docs, pypi) (2026) - with similar approach to composing complex graph to HoloViews
- with Plotly as a backend:
- UpSetPlotly (repo, pypi) (2021)
- plotly-upset-hd (repo no longer exists - there is one for plotly-upset upstream project (2023), pypi (2025))
- upset-plot-plotly (no repo, pypi) (2026)
- upsetty (repo, pypi) (2024)
- with Altair-Vega as a backend:
I have not found similar library with Bokeh backend.
Additional context
Projects mentioned above each implement different set of features and extensions. Those are nice to have.
One such issue is the type of input:
- 0/1 valued integer column, or True/False valued boolean column, with column corresponding to a base set (indicator matrix, a subset of a dataframe)
- True/False valued multi-level index, similar to the result of
.value_counts() method in Pandas when done for multiple columns (this index being an indicator matrix)
- listing the memberships for each object (list valued column, or delimited string valued column), often to be converted
- listing the contents of each category (with some kind of object identifiers), often to be converted
Next is the issue of controlling the selection, limiting which subsets are displayed
- many libraries have an option to not display empty subsets
- option (or default) to show which variables are missing together (empty subset, with no categories in it)
- some can filter out subset with small number of elements (
min_subset_size or min_cardinality - given as number or as a percentage), or with large amount of elements, or leave only a given number of subsets
- some have option to select sets / categories / columns to be used
It would be nice to be able to simply switch from horizontal layout (like shown in the example image), to the vertical layout (orientation="vertical" or orient="v").
There are also various options for controlling the look of the plot:
- show values and/or percentages over the bars in the bar chart parts
- sorting of subsets
- sort by ‘cardinality’, where subsets are listed from largest to smallest - like in the example plot
- sort by ‘degree’, where subsets are listed in order of the number of categories intersected
- sort by subset size within degree
- use set / category order within degree
- sort by 'input' / unsorted, where the order subsets appear in the data input is used
- sorting of sets / categories
- sort by 'cardinality', where categories are sorted by total cardinality, that is, how many times given category appears in data
- sort by 'input', where categories are in the same order as input data’s provided order (order of index levels, or order of columns)
- highlighting categories or subsets (rows or columns) - choosing them by index or by value (range of values)
- shade or edge a category with color, or style a bar for a category
- style subset marker (color, border) and the bar in the bar chart
Some libraries also support adding plots of selected feature, showing either sum or the distribution of values over given subset, as ‘bar’, ‘box’, ‘boxen’, ‘violin’, ‘point’, ‘strip’, ‘swarm’, ‘stack_bar’, ‘number’. Examples:


Is your feature request related to a problem? Please describe.
Understanding relationships between sets is an important analysis task. The major challenge in this context is the combinatorial explosion of the number of set intersections if the number of sets exceeds a trivial threshold.
Venn (and Euler) Diagrams doesn’t scale beyond three or four sets (with four sets requiring ellipses instead of circles to show all possible intersections.
UpSet plots are a method for showing set data with more than three intersecting sets. UpSet shows intersections in a matrix, with the rows of the matrix corresponding to the sets, and the columns to the intersections between these sets (or vice versa). The size of the sets and of the intersections are shown as bar charts.
Example (from the UpSet plot Wikipedia article):
More information:
Describe the solution you'd like
I'd like for HoloViews (and hvPlot) to have support for creating UpSet plot.
This, I think, could be done in a similar manner to how
.hist()method works: the new UpSet plot command or method it would create the matrix showing intersections, and then create bar charts counting number of elements in specific subset or set, and adjoin the resulting bar charts to the matrix plot.Describe alternatives you've considered
There exist a few implementations of UpSet plots in Python.
I have not found similar library with Bokeh backend.
Additional context
Projects mentioned above each implement different set of features and extensions. Those are nice to have.
One such issue is the type of input:
.value_counts()method in Pandas when done for multiple columns (this index being an indicator matrix)Next is the issue of controlling the selection, limiting which subsets are displayed
min_subset_sizeormin_cardinality- given as number or as a percentage), or with large amount of elements, or leave only a given number of subsetsIt would be nice to be able to simply switch from horizontal layout (like shown in the example image), to the vertical layout (
orientation="vertical"ororient="v").There are also various options for controlling the look of the plot:
Some libraries also support adding plots of selected feature, showing either sum or the distribution of values over given subset, as ‘bar’, ‘box’, ‘boxen’, ‘violin’, ‘point’, ‘strip’, ‘swarm’, ‘stack_bar’, ‘number’. Examples: