統計学や確率論では起りうることがらを事象と呼びます。
事象を表す場合、標本の数に係わらず標本空間を長方形で表しその他の事象を内部に円を描いて表すことが行われます。
この図はベン図 (Ven diagram) と 呼ばれます。

Python には、matplotlib-venn · PyPIいうライブラリがあり、
このライブラリを用いることでベン図を描くことができます。
ライブラリを使ってベン図をいくつか描いてみた結果を記載します。


インストール

pipインストールします。

!pip install matplotlib-venn
(from matplotlib->matplotlib-venn) (2018.3)...........

matplotlib-venn の関数について

以下の関数が提供されています。
* venn2 * venn2_circles
* venn3 * venn3_circles

venn2 を使う

venn2 を使ってベン図を描きます。

%matplotlib inline
from matplotlib_venn import venn2
from matplotlib import pyplot
venn2(subsets=(3, 2, 1))
pyplot.show()

png

venn2_circles を使う

venn2_circles は venn2 と違って、色、ラベルがつきません。
シンプルなベン図を描くことができます。

%matplotlib inline
from matplotlib_venn import venn2_circles
from matplotlib import pyplot
venn2_circles((1, 2, 3))
pyplot.show()

png

venn3 を使う

venn3 は 3つの円を使うベン図を描く際に使用します。
若干subsetsどの領域を示すのかわかりにくいので、2つベン図を描画します。

%matplotlib inline
from matplotlib_venn import venn3
venn3(subsets = (2, 3, 4, 5, 1, 1, 1), set_labels = ('Set1', 'Set2', 'Set3'))
pyplot.show()

png

%matplotlib inline
from matplotlib_venn import venn3
venn3(subsets = (1,1,1,2, 3, 4, 5), set_labels = ('Set1', 'Set2', 'Set3'))
pyplot.show()

png

venn3_circles を使う

venn3_circles も venn2_circlesと同様に、色、ラベルがつきません。

%matplotlib inline
from matplotlib_venn import venn3_circles
venn3_circles(subsets = (1,1,1,2, 3, 4, 5))
pyplot.show()

png


venn2 で事象を表す

venn2 を使って、補事象、排反事象、和事象、積事象、差事象を表してみます。


補事象

以下は、和集合の補事象のイメージでのベン図を描きました。
背景を設定すると、ベン図の色にも影響するようでいい感じに描画できませんでした。

%matplotlib inline
from matplotlib_venn import venn2
from matplotlib import pyplot
v = venn2(subsets=(3, 3, 1))

# ベン図の色を変更する   
v.get_patch_by_id('10').set_color('white')
v.get_patch_by_id('10').set_edgecolor('black')
v.get_patch_by_id('11').set_color('white')
v.get_patch_by_id('11').set_edgecolor('black')
v.get_patch_by_id('01').set_color('white')
v.get_patch_by_id('01').set_edgecolor('black')

# 背景色を変更する
pyplot.gca().set_axis_on()
pyplot.gca().set_facecolor('skyblue')
pyplot.show()

png


排反事象

排反事象を示すベン図です。AとBは同時に起こることはなく、Aが発生した場合、Bは起こらないことを示します。

%matplotlib inline
from matplotlib_venn import venn2
from matplotlib import pyplot

# 重なる部分の領域の割合を0にする   
v = venn2(subsets=(3, 3, 0))

# ベン図の色を変更する   
v.get_patch_by_id('10').set_color('skyblue')
v.get_patch_by_id('10').set_edgecolor('black')
v.get_patch_by_id('01').set_color('skyblue')
v.get_patch_by_id('01').set_edgecolor('black')

# 背景色を変更する
pyplot.gca().set_axis_on()
pyplot.gca().set_facecolor('white')
pyplot.show()

png


和事象

和事象を示すベン図を描画します。
AとBの事象の少なくともどちらかが発生する確率を示します。

%matplotlib inline
from matplotlib_venn import venn2
from matplotlib import pyplot

# 重なる部分の領域の割合を0にする   
v = venn2(subsets=(3, 3, 1))

# ベン図の色を変更する   
v.get_patch_by_id('10').set_color('skyblue')
v.get_patch_by_id('10').set_edgecolor('black')
v.get_patch_by_id('11').set_color('skyblue')
v.get_patch_by_id('11').set_edgecolor('black')
v.get_patch_by_id('01').set_color('skyblue')
v.get_patch_by_id('01').set_edgecolor('black')

# 背景色を変更する
pyplot.gca().set_axis_on()
pyplot.gca().set_facecolor('white')
pyplot.show()

png


積事象

積事象を示すベン図を描きます。
AとBが同時に発生する確率を示します。

%matplotlib inline
from matplotlib_venn import venn2
from matplotlib import pyplot

# 重なる部分の領域の割合を0にする   
v = venn2(subsets=(3, 3, 1))

# ベン図の色を変更する   
v.get_patch_by_id('10').set_color('white')
v.get_patch_by_id('10').set_edgecolor('black')
v.get_patch_by_id('11').set_color('skyblue')
v.get_patch_by_id('11').set_edgecolor('black')
v.get_patch_by_id('01').set_color('white')
v.get_patch_by_id('01').set_edgecolor('black')

# 背景色を変更する
pyplot.gca().set_axis_on()
pyplot.gca().set_facecolor('white')
pyplot.show()

png

差事象(差集合)

A が 起こり、Bが起こらない確率を示します。

%matplotlib inline
from matplotlib_venn import venn2
from matplotlib import pyplot

# 重なる部分の領域の割合を0にする   
v = venn2(subsets=(3, 3, 1))

# ベン図の色を変更する   
v.get_patch_by_id('10').set_color('skyblue')
v.get_patch_by_id('10').set_edgecolor('black')
v.get_patch_by_id('11').set_color('white')
v.get_patch_by_id('11').set_edgecolor('black')
v.get_patch_by_id('01').set_color('white')
v.get_patch_by_id('01').set_edgecolor('black')

# 背景色を変更する
pyplot.gca().set_axis_on()
pyplot.gca().set_facecolor('white')
pyplot.show()

png

参考

以下、作成時に見ていた記事になります。
* 差集合 - Wikipedia * Python Matplotlib Venn diagram - Stack Overflow
* Matplotlib Venn diagram with legend - Stack Overflow * python - Accurate color blending in Matplotlib-Venn - Stack Overflow
* #174 Change background colour of Venn diagram – The Python Graph Gallery
* #172 Custom Venn diagram – The Python Graph Gallery
* Python: Venn Diagram
* 排反事象と独立試行の違い|数学|苦手解決Q&A|進研ゼミ高校講座|ベネッセコーポレーション
* slide03.pdf

以上です。

コメント