0

我有以下代码来绘制维恩图。

import numpy as np
import pandas as pd
import matplotlib_venn as vplt

x = np.random.randint(2, size=(10,3))
df = pd.DataFrame(x, columns=['A', 'B','C'])
print(df)
v = vplt.venn3(subsets=(1,1,1,1,1,1,1))

输出如下所示:

在此处输入图像描述

我实际上想找到subsets()使用数据集的数字。怎么做?或者有没有其他简单的方法可以直接从数据集中制作这些维恩图。我还想在它周围制作一个框并将剩余区域注释为所有 A、B、C 为 0 的人。然后计算每个圆圈中人的百分比并将其保留为标签。不知道如何实现这一点。

问题背景:

我有一个包含 500 多个观察值的数据集,这三列是从一个变量中记录的,其中可以选择多个选项作为答案。我想在图表中可视化数据,显示有多少人选择了第一、第二等,以及有多少人选择了第一和第二、第一和第三等,

4

1 回答 1

3

用于numpy.argwhere获取每列的 s 的索引1并将它们绘制为结果

In [85]: df
Out[85]: 
   A  B  C
0  0  1  1
1  1  1  0
2  1  1  0
3  0  0  1
4  1  1  0
5  1  1  0
6  0  0  0
7  0  0  0
8  1  1  0
9  1  0  0

In [86]: sets = [set(np.argwhere(v).ravel()) for k,v in df.items()]
    ...: venn3(sets, df.columns)
    ...: plt.show()

在此处输入图像描述

注意:如果要绘制一个包含不在任一类别中的项目数的附加框,请添加以下行:

In [87]: ax = plt.gca()

In [88]: xmin, _, ymin, _ = ax.axes.axis('on')

In [89]: ax.text(xmin, ymin, (df == 0).all(1).sum(), ha='left', va='bottom')
于 2019-09-08T22:59:49.317 回答