いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】ベン図を描きたい

・お題:ベン図を描きたい。細かい設定なしで、集合を放り込むだけで、勝手にベン図を描いてくれると尚良い。

 

・少し調べてみたところ、ベン図を描画できるライブラリがあった。matplotlib-vennというライブラリ。pip install matplotlib-vennでインストールする。

 

・ベン図を描く前に、知っておかなければならないのが、Pythonでの集合の扱い方。集合なのだから、要素が集まったものなのだけれど、では引数としてどうやって集合を渡せば良いのか。リスト型ではダメらしく、集合の型(set)にする必要があるみたい。

Pythonで、set型は{}(波になっている括弧。正式名称は知らない)で表現される。{1, 2, 3, 4, 5}など記載すれば、そのままsetとして扱ってくれる。辞書っぽいが、辞書ではない。

・リスト型をset型に変換するには、set関数を使えば良い

a=[1,2,3,4,5]#aはリスト型

a=set(a)

とすれば、aは{1, 2, 3, 4, 5}(set型)になる。

ちなみに、setは集合なので、重複を許さないらしい。

b=[1,2,3,3,3,3,3,3,4,5,5]

b=set(b)

とすれば、bは{1, 2, 3, 4, 5}になる。重複していた3や5が一つの要素として纏められた。

・以降では、サンプルデータとしてset型を直接使うが、リスト型から渡す場合にはset型に変換しつつ渡す。

 

・まずは、2つの集合でベン図を作成する。

from matplotlib_venn import venn2
import matplotlib.pyplot as plt

venn2(subsets=[{1,2,3,4,5,6,7,8,9,10},{3, 6, 9, 12,15,18}], set_labels=('A', 'B'))#集合のリストを引数subsetsに渡す。

 

・venn2が2つの集合なのだから、venn3なら3つの集合のベン図が描ける。

from matplotlib_venn import venn3
import matplotlib.pyplot as plt

venn3(subsets=[{1,2,3,4,5,6,7,8,9,10},{1,3,5,7,9,11,13,15,17,19}, {3,6,9,12,15,18}], set_labels=("A", "B","C"))

・ちなみに、"subsets="を省略してもデータは認識されたし、"set_labels=("A", "B","C")"は無くてもグラフ自体は描くことができるみたい(どれがどれか分からなくなって混乱しそうだけれど)。

 

・こういう風にベン図を描けるのは新鮮。

 

おわり