集合と要素や集合に基づいて必要条件・十分条件・必要十分条件などを取り扱う際に用いると良いのがベン図(Venn diagrams)です。当記事ではPython
を用いてベン図を描画するにあたって、matplotlib-venn
の用法などの取りまとめを行いました。
・プログラミングまとめ
https://www.hello-statisticians.com/program
Contents
matplotlib-vennライブラリ
matplotlib-vennの概要
matplotlib-venn
はmatplotlib
を用いて事象が2
もしくは3
のベン図の描画を行うにあたっての関数を実装したライブラリです。
matplotlib-vennのインストール
下記を実行することでmatplotlib-venn
のインストールを行うことが可能です。
> pip install matplotlib-venn
matplotlib-vennの主な関数
matplotlib-venn
の主な関数はvenn2
、venn2_circles
、venn3
、venn3_circles
の4
つでそれぞれ下記のような描画を行うことができます。
関数 | 概要 |
venn2 | 2 つの事象に基づくベン図を作成する |
venn2_circles | 2 つの事象に基づく色・ラベルのないベン図を作成する |
venn3 | 3 つの事象に基づくベン図を作成する |
venn3_circles | 3 つの事象に基づく色・ラベルのないベン図を作成する |
ベン図の描画
基本的な実行例
PyPI
のドキュメントでは下記のような実行例が紹介されています。
from matplotlib import pyplot as plt
from matplotlib_venn import venn2, venn2_circles, venn3, venn3_circles
figure, axes = plt.subplots(2, 2)
venn2(subsets={'10': 1, '01': 1, '11': 1}, set_labels = ('A', 'B'), ax=axes[0][0])
venn2_circles((1, 2, 3), ax=axes[0][1])
venn3(subsets=(1, 1, 1, 1, 1, 1, 1), set_labels = ('A', 'B', 'C'), ax=axes[1][0])
venn3_circles({'001': 10, '100': 20, '010': 21, '110': 13, '011': 14}, ax=axes[1][1])
plt.show()
・実行結果
上記より、venn2
、venn2_circles
、venn3
、venn3_circles
の主な4
つの関数の出力結果が確認できます。
以下では、venn2
関数について確認します。
from matplotlib import pyplot as plt
from matplotlib_venn import venn2
venn2(subsets = (3, 2, 1))
plt.show()
・実行結果
上図では引数のsubsets
でそれぞれの領域の大きさを指定しましたが、下記のようにset
関数を元に集合を引数に与えることも可能です。
from matplotlib import pyplot as plt
from matplotlib_venn import venn2
venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])])
plt.show()
・実行結果
和集合の描画
和集合は下記のように描画を行うことができます。
from matplotlib import pyplot as plt
from matplotlib_venn import venn2
v = venn2(subsets = (1, 1, 1))
v.get_patch_by_id('10').set_color('limegreen')
v.get_patch_by_id('11').set_color('limegreen')
v.get_patch_by_id('01').set_color('limegreen')
v.get_patch_by_id('01').set_alpha(1.0)
v.get_patch_by_id('11').set_alpha(1.0)
v.get_patch_by_id('10').set_alpha(1.0)
v.get_patch_by_id('11').set_edgecolor('white')
v.get_label_by_id('10').set_text('')
v.get_label_by_id('11').set_text('')
v.get_label_by_id('01').set_text('')
plt.title("Union of two sets")
plt.show()
・実行結果
積集合の描画
積集合は下記のように描画を行うことができます。
from matplotlib import pyplot as plt
from matplotlib_venn import venn2
v = venn2(subsets = (1, 1, 1))
v.get_patch_by_id('10').set_color('limegreen')
v.get_patch_by_id('11').set_color('limegreen')
v.get_patch_by_id('01').set_color('limegreen')
v.get_patch_by_id('10').set_alpha(0.1)
v.get_patch_by_id('11').set_alpha(1.0)
v.get_patch_by_id('01').set_alpha(0.1)
v.get_label_by_id('10').set_text('')
v.get_label_by_id('11').set_text('')
v.get_label_by_id('01').set_text('')
plt.show()
・実行結果
参考
https://pypi.org/project/matplotlib-venn/
https://github.com/konstantint/matplotlib-venn