来自实际集合的 UpSetPlot
UpSetPlot from actual sets
鉴于我拥有的实际集合,我想使用 UpSetPlot,但我找不到任何示例以这种方式使用它。标准示例是这样的:
from upsetplot import generate_counts, plot
example = generate_counts()
plot(example, orientation='vertical')
其中生成的 example
是一个 Series
,如下所示。
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
有没有办法从类别 cat0
、cat1
和 cat2
中的实际元素自动生成这种计数结构?
对我来说它看起来像是 pandas 的产品:
import numpy as np
import pandas as pd
from upsetplot import generate_counts, plot
example = generate_counts()
type(example)
pandas.core.series.Series
example.index
MultiIndex([(False, False, False),
(False, False, True),
(False, True, False),
(False, True, True),
( True, False, False),
( True, False, True),
( True, True, False),
( True, True, True)],
names=['cat0', 'cat1', 'cat2'])
所以如果你的数据框是这样的:
df = pd.DataFrame(np.random.choice([True,False],(100,3)),
columns=['cat0','cat1','cat2'])
你可以这样做:
example = df.groupby(['cat0','cat1','cat2']).size()
plot(example, orientation='vertical')
我认为限制是 cat0、cat1、cat2 中的元素必须是布尔值。
使用@StupidWolf 在另一个答案中的提示,这是我自己的问题的答案。给定 3 组
set1 = {0,1,2,3,4,5}
set2 = {3,4,5,6,10}
set3 = {0,5,6,7,8,9}
这里是为这三个集合绘制扰乱图的代码:
import pandas as pd
from upsetplot import plot
set_names = ['set1', 'set2', 'set3']
all_elems = set1.union(set2).union(set3)
df = pd.DataFrame([[e in set1, e in set2, e in set3] for e in all_elems], columns = set_names)
df_up = df.groupby(set_names).size()
plot(df_up, orientation='horizontal')
第 4 行和第 5 行更改为将上面的代码概括为集合列表,比如 sets = [set1, set2, set3]
:
all_elems = list(set().union(*sets))
df = pd.DataFrame([[e in st for st in sets] for e in all_elems], columns = set_names)
集合可用于表示类别成员资格的方式有多种。为了帮助将集翻译成 upsetplot
所需的格式,您会找到帮助者 from_memberships
, from_contents
and from_indicators
.
鉴于我拥有的实际集合,我想使用 UpSetPlot,但我找不到任何示例以这种方式使用它。标准示例是这样的:
from upsetplot import generate_counts, plot
example = generate_counts()
plot(example, orientation='vertical')
其中生成的 example
是一个 Series
,如下所示。
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
有没有办法从类别 cat0
、cat1
和 cat2
中的实际元素自动生成这种计数结构?
对我来说它看起来像是 pandas 的产品:
import numpy as np
import pandas as pd
from upsetplot import generate_counts, plot
example = generate_counts()
type(example)
pandas.core.series.Series
example.index
MultiIndex([(False, False, False),
(False, False, True),
(False, True, False),
(False, True, True),
( True, False, False),
( True, False, True),
( True, True, False),
( True, True, True)],
names=['cat0', 'cat1', 'cat2'])
所以如果你的数据框是这样的:
df = pd.DataFrame(np.random.choice([True,False],(100,3)),
columns=['cat0','cat1','cat2'])
你可以这样做:
example = df.groupby(['cat0','cat1','cat2']).size()
plot(example, orientation='vertical')
我认为限制是 cat0、cat1、cat2 中的元素必须是布尔值。
使用@StupidWolf 在另一个答案中的提示,这是我自己的问题的答案。给定 3 组
set1 = {0,1,2,3,4,5}
set2 = {3,4,5,6,10}
set3 = {0,5,6,7,8,9}
这里是为这三个集合绘制扰乱图的代码:
import pandas as pd
from upsetplot import plot
set_names = ['set1', 'set2', 'set3']
all_elems = set1.union(set2).union(set3)
df = pd.DataFrame([[e in set1, e in set2, e in set3] for e in all_elems], columns = set_names)
df_up = df.groupby(set_names).size()
plot(df_up, orientation='horizontal')
第 4 行和第 5 行更改为将上面的代码概括为集合列表,比如 sets = [set1, set2, set3]
:
all_elems = list(set().union(*sets))
df = pd.DataFrame([[e in st for st in sets] for e in all_elems], columns = set_names)
集合可用于表示类别成员资格的方式有多种。为了帮助将集翻译成 upsetplot
所需的格式,您会找到帮助者 from_memberships
, from_contents
and from_indicators
.