ເຮົາຈະແຕ້ມຮູບຄືຮູບຂ້າງເທິງໄດ້ແນວໃດ?
ທຳອິດເຮົາກະຄິດວ່າ ມັນບໍ່ໄດ້ແຕ້ມຍາກປານນັ້ນ Microsoft PowerPoint ກະຄົງຈະແຕ້ມໄດ້ຢູ່ ແຕ່ບາດມາລອງແທ້ໆ ແມ່ນມັນບໍ່ສາມາດແຕ້ມໄດ້ 🙁 ເຮົາກະເລີຍຄົ້ນຄວ້າຖາມອາກົງອາກູ ເບິ່ງວ່າໃຊ້ອັນໃດແຕ້ມໄດ້ແນ່.
ສະຫຼຸບ ຫຼັງຈາກທີ່ໄປຖາມອາກົງອາກູ ກະໄດ້ຜົນສະຫຼຸບ 2 ຕົວເລືອກ: 1. ໃຊ້ R programming, 2. ໃຊ້ Python. ເຮົາກະເລີຍເລືອກໃຊ້ Python ເພາະວ່າຕົນເອງຄຸກຄີກັບມັນຫຼາຍກວ່າ R programming.
ເອົ້າ! ເປີດເລື່ອງມາດົນລະ ດຽວເຮົາມາລົງມືເຮັດກັນເລີຍວ່າການແຕ້ມ Venn diagram ໂດຍໃຊ້ພາສາ Python ມັນບໍ່ໄດ້ຢາກເລີຍງ່າຍໆ (ງົມມື້ໜຶ່ງເຕັມໆ ງ່າຍໆ?)
ໃນການແຕ້ມ ວົງມົນທັບຊ້ອນ (Venn diagram ດຽວຕໍ່ໄປເຮົາຈະໃຊ້ຄຳຫຍໍ້ວ່າ Venn D) ເຮົາຈະຕ້ອງຮູ້ກ່ອນວ່າຈະໃຊ້ library ໃດແຕ້ມ ເຊິ່ງວ່າ ເຮົາຈະໃຊ້ library matplotlib-venn ເຊິ່ງວ່າ library ດັ່ງກ່າວແມ່ນຈະເຮັດຮ່ວມກັນກັບ library ອື່ນອີກ ດັ່ງນັ້ນເຮົາຈະຕ້ອງ import library ລຸ່ມນີ້ເຂົ້ານຳ:
- numpy
- scipy
- matplotlib
ສຳລັບການຕິດຕັ້ງ library ດັ່ງກ່າວແມ່ນເຮົາສາມາດຕິດຕັ້ງໂດຍການໃຊ້ command python
pip install matplotlib-venn
ໃນການແຕ້ມ Venn D ເຮົາສັງເກດບໍ່ວ່າເປັນຫຍັງຄືມີແຕ່ ການທັບຊ້ອນກັນພຽງແຕ່ ສອງວົງມົນ ແລະ ສາມວົງມົນເທົ່ານັ້ນ ເຫດຜົນກະມາຈາກວ່າ ຖ້າມີຫຼາຍກວ່າສີ່ວົງມົນຂຶ້ນໄປທີ່ທັບຊ້ອນກັນ ມັນຈະເຮັດໃຫ້ຜູ້ທີ່ເບິ່ງນັ້ນສັບສົນ ແລະ ລາຍຕາ (ເອີ…ເຫດຜົນງ່າຍດີ Fact ດີ). ດັ່ງນັ້ນ, ເຮົາຈຶ່ງເຫັນແຕ່ ສອງວົງມົນ ແລະ ສາມວົງມົນເນາະ. ສິ່ງສຳຄັນຄື library ນີ້ກະມີໃຫ້ແຕ້ມແຕ່ສອງ ແລະ ສາມວົງມົນເທົ່ານັ້ນ.
ໃນ library ນີ້ມັນຈະມີ function package ມາໃຫ້ຫຼັກໆ 4 function* (ແຕ່ມີອີກ 2 function ຕື່ມອີກ: ບອກຕາມຫຼັງ)
- venn2
- venn3
- venn2_circles
- venn3_circles
- venn2_unweighted*
- venn3_unweighted*
*ແຕ້ມ Venn D ໂດຍບໍ່ໃສ່ຂະໜາດ
ກ່ອນຈະລົງມືແຕ້ມ ດຽວເຮົາມາສຶກສາ syntax ກັນກ່ອນວ່າມັນມີຫຍັງແນ່
venn2, venn2_circles #
ໃນສ່ວນຂອງ function ນີ້ ແມ່ນຈະມີສາມເຂດໃນການແຕ້ມຄື A, AຕັດB, B
venn2(subsets=(A,AຕັດB,B))
venn2(subsets=(1,1,1))
ເຮົາສາມາດຕັ້ງຊື່ວົງມົນແຕ່ລະອັນໂດຍການເພີ່ມ set_label
venn2(subsets=(A, B, AB), set_labels=('ຊື່ວົງມົນ A', 'ຊື່ວົງມົນ B'`
venn2(subsets=(3,1,1), set_labels=('A', 'B'))
ນອກຈາກເຮົາຈະຂຽນ syntax ແບບຂ້າງເທິງໄດ້ແລ້ວເຮົາຍັງສາມາດຂຽນໃນແບບ list ແລະ counter ໄດ້ນຳອີກ
venn2([set(['A', 'B', 'C', 'D']), set(['D', 'E', 'F'])]) //Counter
//ເທົ່າກັບ
venn2(subsets=(3,2,1))
//ເທົ່າກັບ
venn2(subsets={'10': 3, '01': 1, '11': 2}) //List
venn2(subsets={'10': A, '01': AB, '11': B}) //ອະທິບາຍ
venn3, venn3_circles #
ໃນສ່ວນຂອງ function ນີ້ ແມ່ນຈະມີສາມເຂດໃນການແຕ້ມຄື A, AຕັດB, B, C, AຕັດC, CຕັດB, AຕັດBຕັດC
venn3(subsets = (1, 1, 1, 2, 1, 2, 2), set_labels = ('A', 'B', 'C'))
venn3(subsets = (A, B, AB, C, AC, BC, ABC), set_labels = ('A', 'B', 'C'))
venn3(subsets = {'001':2, '010':1, '011':2, '100':1, '101':1, '110':1, '111':2}, set_labels = ('A', 'B', 'C'))
venn3(subsets = {'001':C, '010':B, '011':BC, '100':A, '101':AC, '110':AB, '111':ABC}, set_labels = ('A', 'B', 'C'))
ອ່າ… ອະລຳພະບົດເລື່ອງ syntax ກັນຈົນອີ່ມລະ ດຽວລອງມາຂຽນແທ້ກັນເລີຍແຕ່ຕົ້ນ ເຊິ່ງສົມມຸດວ່າເຮົາມີຂໍ້ມູນການທັບຊ້ອນກັນ ຂອງອັດຕາສ່ວນຂອງນ້ຳ, ສຸຂະອະນາໄມ ແລະ ສຸຂະພາບ.
| WaSaHo | WaSs | WaHo | SaHo | Wa | Sa | Ho | None |
|---|---|---|---|---|---|---|---|
| 17.5% | 10.0% | 1.9% | 15.4% | 3.6% | 15.8% | 7.8% | 27.9% |
ເລີ່ມແຕ້ມກັນເລີຍ 😉
#1 Import library ທີ່ຈະແຕ້ມ
from matplotlib_venn import venn2, venn2_circles, venn3, venn3_circle
from matplotlib import pyplot as plt
import numpy as np
import scipy
import matplotlib
#2 ກຳນົດຂະໜາດຂອງຮູບ (ບໍ່ຈຳເປັນ)
plt.figure(figsize=(10,10))
#3 ແຕ້ມວົງມົນ
venn3(subsets = (3.6, 15.8, 10.0, 7.8, 1.9, 15.4, 17.5), set_labels = ('Water', 'Sanitation', 'Health'))
plt.show()
#ຄຳສັ່ງເສີມໃນການປັບແຕ່ງ ປ່ຽນສີຂອງແຕ່ລະວົງມົນ
v.get_patch_by_id('001').set_color('#72BCD4')
v.get_patch_by_id('010').set_color('#00CC00')
v.get_patch_by_id('011').set_color("#72BCD4")
v.get_patch_by_id('100').set_color('#FF4D4D')
v.get_patch_by_id('101').set_color('#FFE3E9')
v.get_patch_by_id('110').set_color('#E0E7AE')
# ເພີ່ມເສັ້ນໃສ່ແຕ່ລະວົງມົນ
c = venn3_circles(subsets={'001':13.5,
'010':3.3,
'011':0.4,
'100':13.3,
'101':2.2,
'110':0.3,
'111':0.1},
linestyle='solid',
linewidth=2.5,
color="white") //ສາມາດປ໋ຽນຮູບແບບຂອງເສັ້ນໄດ້ inestyle='--' linestyle=':'
# ເພີ່ມເສັ້ນໝາຍ ແລະ ໂຕໜັງສືໃສ່ໃນວົງມົນ (annotation)
plt.annotate('Unknown set',
xy=v.get_label_by_id('100').get_position() - np.array([0, 0.05]),
xytext=(-70,-70),
ha='center',
textcoords='offset points',
bbox=dict(boxstyle='round,pad=0.5',fc='gray', alpha=0.1),
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5',color='gray'))
#ປັບຄວາມເຂັ້ມ/ຈາງຂອງສີໃນວົງມົນ
v.get_patch_by_id('01').set_alpha(1) // alpha value (0 ຫາ 1)
#ບັນທຶກຮູບທີ່ໄດ້
matplotlib.pyplot.savefig("HoSaWa.png", dpi=330, format="png", transparent=True)
ສຳລັບໃຜສົນໃຈສາມາດເຂົ້າໄປອ່ານຂໍ້ມູນເພີ່ມຕື່ມກ່ຽວກັບ library ນີ້ໄດ້ບ່ອນນີ້ເລີຍ https://pypi.org/project/matplotlib-venn/