Implementations of UpSet

The basic idea of UpSet has been implemented many times. Here we list the available implementations and describe their main benefits and drawbacks.

We distinguish between three-types of implementations:

  • Interactive Tools that are meant for uploading data and customizing the plot dynamically, without programming.

  • Plotting Libraries that are designed to be customized in a programming language, e.g., in R or Python and can be used as part of a computational notebook, or can be integrated in a larger system. Some of these tools also have interactive wrappers, using e.g., R-Shiny so that they can be used without programming.

  • Sample Implementations demonstrate how to implement an UpSet plot in a framework (e.g., Tableau) but are not libraries and hence typically don’t have data loading capabilities and are tested only with a single dataset. It’s usually possible to copy a template and customize it to work with your own data.

Interactive Tools

The original UpSet

The original UpSet screenshot

The original UpSet, developed to go with the original paper, as an interactive web application. This version supports most advanced features. It lacks simple data upload functionality, so that it either has to be hosted locally, or pointed to a globally visible data file. Unfortunately, the original UpSet is no longer actively maintained.

 Website     Source Code     Documentation     Publication   

 License: MIT License   

 Language: JavaScript   

 Author(s): Alexander Lex, Nils Gehlenborg, Hendrik Strobelt, Romain Vuillemot, and Hanspeter Pfister   

UpSet 2

UpSet 2 screenshot

A re-implementation of the original UpSet. Key new featuresa re undo/redo functionality, embedding, and being able to download sets of items in a csv file.

 Website     Source Code     Publication   

 License: MIT   

 Language: TypeScript   

 Author(s): Kiran Gadhave, Alexander Lex   

Plotting Libraries

Web Libraries


UpSet.js screenshot

UpSet.js is a JavaScript re-implementation of UpSetR. The core library is written in JavaScript using React. In addition, UpSet.js also supports classical Venn diagrams between two and five sets. A demo application highlights library features along with import and export features. Adapters on top of the library exists for R/RShiny/RMarkdown, Python Jupyterlab, PowerBI, Tableau, and Observable HQ. UpSet.js is released under the GNU AGPLv3 version to be used for private and academic purposes. In case of a commercial use, please get in touch at regarding a commercial license.

 Website     Source Code     Documentation   

 License: GNU AGPLv3 (private, academic) + Commercial License Available   

 Language: JavaScript, Python, R, PowerBI, Tableau, ObservableHQ   

 Author(s): Samuel Gratzl   

R Libraries

The UpSet R Version

The UpSet R Version screenshot

Many scientists use R as part of their analysis workflow. The goal of the R version of UpSet is to allow those analysts to easily produce high-resolution figures of set intersections within their workflow that can be used in publications. This version was developed by members of the original team. UpSetR has many of the features of our interactive UpSet plots, specifically it comes with various ways to sort and filter intersections and can plot attributes about the elements in the various sets. The layout is slightly adapted - intersections are plotted horizontally instead of vertically, which is beneficial for the typical aspect ratios found in papers. UpSetR does not include the aggregation features of UpSet, does not provide summary statistics about the intersections in line with the set cardinality, and does not provide access to the individual items.

To learn more about UpSetR visit the source code repository which includes documentation on usage, or check out the released versions on CRAN, or try the UpSetR shiny app.

 Website     Source Code     Publication   

 Author(s): Jake Conway, Alexander Lex, Nils Gehlenborg   

Complex Upset

Complex Upset screenshot

An advanced R version of UpSet

 Website     Source Code   

UpSet in ComplexHeatmap

UpSet in ComplexHeatmap screenshot

An implementation in the ComplexHeatmap package for R.

 Website     Source Code     Documentation     Publication   

 License: MIT License   

 Language: R   

 Author(s): Zuguang Gu   

Python Libraries


pyUpSet screenshot

pyUpSet has a similar use case to UpSetR but is developed for Python.

 Source Code   


UpSetPlot screenshot

An alternative implementation in Python that tries to provide a simple interface backed by an extensible, object-oriented design. It supports several input formats, horizontal and vertical orientations, and the ability to add Seaborn catplots for attribute visualization.

 Website     Source Code   

 License: BSD 3-clause   

 Language: Python   

 Author(s): Joel Nothman   

Sample Implementations

UpSet Altair

UpSet Altair screenshot

This is an implementation of an UpSet Plot in Altair. Based on the interactive features in Altair, this UpSet plot allows filtering sets of interest using color legends or seeing detailed information with tooltips. It also supports various customization options, such as sorting exclusive sets in different ways and changing colors and sizes of individual visual components. Users can create this plot on Jupyter Notebook or embed the plot on a web page after conversion to a Vega visualization.

 Website     Source Code   

 License: MIT License   

 Language: Python   

 Author(s): Sehi L’Yi, Nils Gehlenborg   

UpSet Tableau

UpSet Tableau screenshot

This isn’t technically an “implementation” in Tableau, but an instruction on how to make an UpSet Plot plus a template to help you get started.


UpSet Observable

UpSet Observable screenshot

A simple from-scratch implementation in JavaScript on Observable. Supports basic customization.


 Author(s): Torsten Sprenger