いろいろ倉庫

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

【Python】ベン図に要素も表示したい

・お題:Pythonでベン図を描画したい。今回は、要素も分かるように表示したい。

 

・以前、Pythonでベン図を描いた。ただし、デフォルトの設定だと要素数は表示されるが、要素自体はよく分からない。ということで、要素を表示してみた。

・今回は、動物園を作る。まずはライブラリをインポート。

import matplotlib.pyplot as plt
from matplotlib_venn import venn2

・動物を要素として、リストを作成。

A = {"raccoon","rabbit","horse","kangaroo","giraffe","koala"}
B = {"kangaroo","giraffe","koala","monkey","zebra"}

・ベン図を描画。ここでやめると以下のように表示される。

diagram1 = venn2([A, B], ("Zoo1","Zoo2"))

・要素を表示する。.get_label_by_id("xx")でテキストを描画する場所を指定する。

diagram1.get_label_by_id("10").set_text("\n".join(A-B))
diagram1.get_label_by_id("11").set_text("\n".join(A&B))
diagram1.get_label_by_id("01").set_text("\n".join(B-A))

恐らく、要素の数によってはごちゃごちゃしたり他のゾーンに入り込んだりすると思うので、図や文字の大きさは適宜変えた方が良いと思う。

・せっかくなので、動物園を3つに増やしてみる。要素の場所が間違っていたらごめんなさい。

import matplotlib.pyplot as plt
from matplotlib_venn import venn3

A = {"raccoon","rabbit","horse","kangaroo","giraffe","koala"}
B = {"kangaroo","giraffe","koala","monkey","zebra"}
C = {"raccoon","giraffe","koala","zebra","cat"}

diagram2 = venn3([A,B,C], ("Zoo1","Zoo2","Zoo3"))

diagram2.get_label_by_id("001").set_text( "\n".join( C-( A|B ) ) )
diagram2.get_label_by_id("010").set_text( "\n".join( B-( C|A ) ) )
diagram2.get_label_by_id("100").set_text( "\n".join( A-( B|C) ) )
diagram2.get_label_by_id("011").set_text( "\n".join(( B&C )-A) )
diagram2.get_label_by_id("101").set_text( "\n".join(( C&A )-B) )
diagram2.get_label_by_id("110").set_text( "\n".join(( A&B )-C) )
diagram2.get_label_by_id("111").set_text( "\n".join( A&B&C ) )

・これで見たい動物が決まっていれば行くべき動物園が分かる。

 

おわり。