統計学や確率論では起りうることがらを事象と呼びます。
事象を表す場合、標本の数に係わらず標本空間を長方形で表しその他の事象を内部に円を描いて表すことが行われます。
この図はベン図 (Ven diagram) と 呼ばれます。
Python には、matplotlib-venn · PyPI というライブラリがあり、
このライブラリを用いることでベン図を描くことができます。
ライブラリを使ってベン図をいくつか描いてみた結果を記載します。
インストール
pip
でインストールします。
!pip install matplotlib-venn
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()
venn2_circles を使う
venn2_circles は venn2 と違って、色、ラベルがつきません。
シンプルなベン図を描くことができます。
%matplotlib inline
from matplotlib_venn import venn2_circles
from matplotlib import pyplot
venn2_circles((1, 2, 3))
pyplot.show()
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()
%matplotlib inline
from matplotlib_venn import venn3
venn3(subsets = (1,1,1,2, 3, 4, 5), set_labels = ('Set1', 'Set2', 'Set3'))
pyplot.show()
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()
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()
排反事象
排反事象を示すベン図です。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()
和事象
和事象を示すベン図を描画します。
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()
積事象
積事象を示すベン図を描きます。
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()
差事象(差集合)
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()
参考
以下、作成時に見ていた記事になります。
* 差集合 - 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
以上です。
コメント