Przejdź do treści

#016 Diagram Venna (Venn diagram)

  • Wykresy
  • 4 min read

Diagram Venna (zwany także diagramem podstawowym lub diagramem logicznym) to wizualizacja pokazująca wszystkie możliwe relacje logiczne między różnymi zbiorami danych. Diagram Venna można wykorzystać w prawie każdej dziedzinie właśnie do zobrazowania relacji między zbiorami.

Zazwyczaj każdy zbiór reprezentowany jest przez kółko. Rozmiar koła czasami odzwierciedla znaczenie grupy, ale nie zawsze. Grupy zazwyczaj nachodzą na siebie, a rozmiar nakładania się reprezentuje przecięcie między obiema grupami. Można też znaleźć wizualizacje z innymi kształtami takimi jak elipsy czy kwadraty.

Poniżej przykład pokazujący wspólne litery w 3 alfabetach: łacińskim, greckim oraz rosyjskim.

diagram venna venn diagram chart
źródło: Wikipedia

Nazwa diagramu pochodzi od brytyjskiego matematyka i logika John’a Venn’a. Tak naprawdę udoskonalił on jedynie ideę zapoczątkowaną przez szwajcarskiego matematyka Euler’a, który wymyślił sposób na obrazowe przedstawienie zestawów za pomocą punktów na zamkniętej krzywej.

Warto uważać, aby nie przesadzić z liczbą wymiarów. Moim zdaniem wszystko ponad 4 staje się już mocno nieczytelne. Przykład 5 wymiarowego diagramu poniżej:

Czasami jednak zdarzają się bardzo dobre wizualizacje dla większej liczby wymiarów:

diagram venna venn diagram chart colour palete
Więcej ciekawych wykresów Venna TUTAJ

Kod w Python

Znalazłem bardzo ciekawą i prostą w użyciu bibliotekę, za pomocą której narysowanie diagramu Venna jest dziecinnie proste.

from matplotlib_venn import venn2, venn2_circles, venn2_unweighted
from matplotlib_venn import venn3, venn3_circles
import matplotlib.pyplot as plt

Teraz przygotujmy dane. Niech naszymi zbiorami będą po prostu… literki.

set1 = ['A','B','C','D','E','F','G','H','I','J','K','L']
set2 = ['B','F','H','M','N','R','T']
set3 = ['B','C','F','G','K','O','Q','P','R','S','T','U','W','X','V','Z']
Metoda 1 – bezpośrednie zbiory

Można po prostu przekazać zbiory, a biblioteka sama przeliczy wszystkie wymagane informacje i dobierze odpowiednio wielkości kółek na wykresie.

venn2([set(set1), set(set2)],set_labels=('set1', 'set2'))
plt.show()
diagram venna venn diagram chart  przykład example

Można troszeczkę zmienić domyślne kolory, aby wykres był bardziej estetyczny.

venn2([set(set1), set(set2)], set_labels=('set1', 'set2'),
      set_colors=('crimson', 'darkgrey'), alpha = 0.8)
plt.show()
diagram venna venn diagram chart  przykład example

Możesz prosto dołożyć zarysy kółek:

venn2([set(set1), set(set2)],set_labels=('set1', 'set2'), 
      set_colors=('crimson', 'darkgrey'), alpha = 0.8)
venn2_circles([set(set1), set(set2)], linestyle='-.', 
              linewidth=2, color='black')
plt.show()
diagram venna venn diagram chart  przykład example
Metoda 2 – znasz liczby

Jeśli znasz wartości (elementy wspólne i rozłączne) dla zbiorów, to możesz wpisać je bezpośrednio.

venn2(subsets = (9, 4, 3), set_labels=('set1', 'set2'),
      set_colors=('crimson', 'darkgrey'), alpha = 0.8)
plt.show()
diagram venna venn diagram chart  przykład example
Metoda 3 – słownik

Można jeszcze przekazać dane za pomocą słownika i odpowiedniej notacji oznaczenia zbiorów.

diagram venna venn diagram chart  przykład example wikipedia
źródło: Wikipedia

Jedynka na pierwszym miejscu oznacza przynależność do zbioru A, na drugim miejscu do B a na trzecim do C. Zatem oznaczenie „111” mówi o elementach wspólnych pomiędzy wszystkimi trzema zbiorami.

venn2(subsets = {'10':9, '01': 4, '11': 3},set_labels=('set1', 'set2'),
      set_colors=('crimson', 'darkgrey'), alpha = 0.8)
plt.show()

A czy mając trzy zbiory również można tak prosto narysować wykres? Odpowiedź brzmi: TAK!

venn3([set(set1), set(set2), set(set3)], set_labels=('set1', 'set2', 'set3'),
      set_colors=('crimson', 'darkgrey', 'orange'), alpha = 0.8)
venn3_circles([set(set1), set(set2), set(set3)], linestyle='-', 
              linewidth=1, color='black')
plt.show()
diagram venna venn diagram chart  przykład example

A jeśli masz ochotę to możesz pobawić się jeszcze stylami lub opisaniem wykresu.

v3 = venn3([set(set1), set(set2), set(set3)], set_labels=('set1', 'set2', 'set3'),
           set_colors=('crimson', 'darkgrey', 'orange'), alpha = 0.8)
venn3_circles([set(set1), set(set2), set(set3)], linestyle='-', 
              linewidth=1, color='black')

for text in v3.subset_labels:
    text.set_fontsize(16)
for text in v3.set_labels:
    text.set_color('blue');

plt.title('Venn Diagram for 3 sets', fontweight='bold',fontsize=16)
plt.show()
diagram venna venn diagram chart  przykład example

Mam nadzieję, że kiedyś będziesz miał okazję go wykorzystać!

Pozdrawiam serdecznie z całego serducha,

podpis Mirek

1 komentarz do “#016 Diagram Venna (Venn diagram)”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Spodobało Ci się? Udostępnij ten post w social mediach! ❤️❤️❤️