4

我想根据我的熊猫数据框绘制维恩图。我知道matplotlib_venn接受集合作为输入。我的数据集包含客户 ID 和另外两列,其中包含客户是否在活动中的信息。

df_dataset = pd.read_csv('...path...',delimiter=',',decimal=',')
campaign_a = df_dataset[(df_dataset['CAM_A'] == 1)] 
campaign_b = df_dataset[(df_dataset['CAM_B'] == 1)]

plt.figure(figsize=(4,4))
set1 = set(campaign_a['CLI_ID'])
set2 = set(campaign_b['CLI_ID'])

venn3([set1, set2], ('Set1', 'Set2'))
plt.show()

但是我收到一个错误:

文件“C:\Python27\Lib\site-packages\matplotlib_venn_venn3.py”,第 44 行,在 compute_venn3_areas area = np.array(np.abs(diagram_areas), float)

TypeError:abs()的错误操作数类型:'set'

4

3 回答 3

3

此错误是由于尝试将 2 个集合强制进入 venn3。您需要从同一个库中导入 venn2。

from matplotlib_venn import venn2

df_dataset = pd.read_csv('...path...',delimiter=',',decimal=',')
campaign_a = df_dataset[(df_dataset['CAM_A'] == 1)] 
campaign_b = df_dataset[(df_dataset['CAM_B'] == 1)]

plt.figure(figsize=(4,4))
set1 = set(campaign_a['CLI_ID'])
set2 = set(campaign_b['CLI_ID'])

venn2([set1, set2], ('Set1', 'Set2'))
plt.show()
于 2018-03-01T07:52:43.383 回答
2

为少量集合创建维恩图的简单方法。希望这可以帮助。

import matplotlib.pyplot as plt
from matplotlib_venn import venn2
from matplotlib_venn import venn3

set1 = set()
set2 = set()
set3 = set()
set4 = set()
set_array = []
set_names = ['Set1', 'Set2', 'Set3', 'Set4']

set1.add('a')
set1.add('b')

set2.add('b')
set2.add('c')

set3.add('c')
set3.add('d')

set4.add('d')
set4.add('e')

set_array.append(set1)
set_array.append(set2)
set_array.append(set3)
set_array.append(set4)

# venn2([set1, set2], ('Set1', 'Set2')) # venn2 works for two sets
venn3(set_array[0:3], set_names[0:3])   # venn3 works for three sets
plt.show()

这会生成以下输出:

样本

于 2019-10-31T03:29:07.380 回答
1

我相信你需要通过3组。根据此处的代码,如果您传递三个子集,那么它们会在传递给之前转换为一个元组compute_venn3_areas,在那里np.abs可以处理它们。仅传递 2 组的情况看起来像是未处理的错误。

于 2016-06-09T12:13:38.483 回答