Venn Diagram for each row in DataFrame

Viewed 77

I have a set of data that looks like this:

    Exp #  ID  Q1  Q2  All IDs  Q1 unique  Q2 unique  Overlap  Unnamed: 8
0       1  58  32  58       58         14         40       18          18
1       2  55  38  44       55         28         34       10          10
2       4  95  69  83       95         37         51       32          32
3       5  92  68  84       92         31         47       37          37
4       6   0   0   0        0          0          0        0           0
5       7  71  52  65       71         27         40       25          25
6       8  84  69  69       84         39         39       30          30
7      10  65  35  63       65         17         45       18          18
8      11  90  72  72       90         39         39       33          33
9      14  88  84  80       88         52         48       32          32
10     17  89  56  75       89         30         49       26          26
11     19  83  56  70       83         32         46       24          24
12     20  94  72  83       93         35         46       37          37
13     21  73  57  56       73         38         37       19          19

For each exp #, I want to make a Venn diagram with the values Q1 Unique, Q2 Unique, and Overlap.

I have tried a couple of things, the below code has gotten me the closest:

from matplotlib import pyplot as plt
import numpy as np
from matplotlib_venn import venn2, venn2_circles
import csv
import pandas as pd
import numpy as np

val_path = r"C:\Users\lawashburn\Documents\DIA\DSD First Pass\20220202_Acquisition\Overlap_Values.csv"
val_tab = pd.read_csv(val_path)
exp_num = val_tab['Exp #']
cols = ['Q1 unique','Q2 unique', 'Overlap']

df = pd.DataFrame()
df ['Exp #'] = exp_num
df['combined'] = val_tab[cols].apply(lambda row: ','.join(row.values.astype(str)), axis=1)

print(df)
exp_no = df['Exp #'].tolist()

combined = df['combined'].tolist()
#combined = [int(i) for i in combined]

print(combined)

for a in exp_no:
    plt.figure(figsize=(4,4))
    plt.title(a)
for b in combined:
    v = venn2(subsets=(b), set_labels = ('Q1', 'Q2'), set_colors=('purple','skyblue'), alpha=0.7)
    v.get_label_by_id('A').set_text('Q1')
    c = venn2_circles(subsets=(b))

    plt.show()
    plt.savefig(a + 'output.png')

This generates a DataFrame:

    Exp #  combined
0       1  14,40,18
1       2  28,34,10
2       4  37,51,32
3       5  31,47,37
4       6     0,0,0
5       7  27,40,25
6       8  39,39,30
7      10  17,45,18
8      11  39,39,33
9      14  52,48,32
10     17  30,49,26
11     19  32,46,24
12     20  35,46,37
13     21  38,37,19

However, I think I run into the issue when I export the combined column into a list:

['14,40,18', '28,34,10', '37,51,32', '31,47,37', '0,0,0', '27,40,25', '39,39,30', '17,45,18', '39,39,33', '52,48,32', '30,49,26', '32,46,24', '35,46,37', '38,37,19']

As after this I get the error:

numpy.core._exceptions.UFuncTypeError: ufunc 'absolute' did not contain a loop with signature matching types dtype('<U8') -> dtype('<U8')

How should I proceed from here? I would like 13 separate Venn Diagrams, and to export each of them into a separate .png file.

0 Answers
Related