使用Pandas和Matplotlib绘制Lex等人提出的UpSet图
项目描述
这是Lex等人UpSet图的另一种Python实现。[Lex2014]。UpSet图用于可视化集合重叠;类似于维恩图,但更易于阅读。文档在https://upsetplot.readthedocs.io。
这个upsetplot库试图提供一个简单的接口,背后是可扩展的、面向对象的设计。
数据分类有许多表示方法,如我们数据格式指南所述。
我们的内部输入格式使用包含对应于子集大小的计数的
>>> from upsetplot import generate_counts
>>> example = generate_counts()
>>> example
cat0 cat1 cat2
False False False 56
True 283
True False 1279
True 5882
True False False 24
True 90
True False 429
True 1957
Name: value, dtype: int64
然后
>>> from upsetplot import plot >>> plot(example) # doctest: +SKIP >>> from matplotlib import pyplot >>> pyplot.show() # doctest: +SKIP
使得
您可以将图像保存为各种格式
>>> pyplot.savefig("/path/to/myplot.pdf") # doctest: +SKIP
>>> pyplot.savefig("/path/to/myplot.png") # doctest: +SKIP
此图显示了在我们数据中看到的所有类别组合的基数。最左侧的列计算任何类别中缺失的项目。接下来的三列分别计算仅存在于cat1、cat2和cat3中的项目。接下来的几列显示每个恰好两个命名集合的组合中的项目的基数。最右侧的列计算所有三个集合中的项目。
旋转
我们称上述绘图样式为“水平”,因为类别交集是从左到右呈现的。垂直图也支持!
分布
使用DataFrame而不是Series作为输入,可以使我们更直观地绘制每个子集变量的分布。
加载数据集
虽然上述数据集是随机生成的,但你也可以为upsetplot准备自己的数据集。一个有用的工具是from_memberships,它允许我们通过指示每个数据点的类别成员资格来重建上述示例。
>>> from upsetplot import from_memberships
>>> example = from_memberships(
... [[],
... ['cat2'],
... ['cat1'],
... ['cat1', 'cat2'],
... ['cat0'],
... ['cat0', 'cat2'],
... ['cat0', 'cat1'],
... ['cat0', 'cat1', 'cat2'],
... ],
... data=[56, 283, 1279, 5882, 24, 90, 429, 1957]
... )
>>> example
cat0 cat1 cat2
False False False 56
True 283
True False 1279
True 5882
True False False 24
True 90
True False 429
True 1957
dtype: int64
还可以参考from_contents,另一种描述分类数据的方式,以及from_indicators,它允许通过数据框(或列数据的函数,如是否存在缺失值)中的列来指示每个类别。
安装
要安装库,您可以使用pip
$ pip install upsetplot
安装需要
pandas
matplotlib >= 2.0
seaborn 以使用 UpSet.add_catplot
然后应该可以在Python中
>>> import upsetplot
。
为什么是py-upset的替代品?
可能是因为一些微不足道的原因。py-upset似乎没有维护。其输入格式未经文档记录,效率低下,我认为不合适。它不支持Python 2。我决定构建一个更干净的版本,而不是修复它。
参考文献
Alexander Lex,Nils Gehlenborg,Hendrik Strobelt,Romain Vuillemot,Hanspeter Pfister,UpSet: Visualization of Intersecting Sets,IEEE Transactions on Visualization and Computer Graphics (InfoVis ‘14),vol. 20,no. 12,pp. 1983–1992,2014。doi: doi.org/10.1109/TVCG.2014.2346248