30  Matplotlib - wykres punktowy

Wykres punktowy (scatter plot) jest stosowany, gdy chcemy przedstawić związek między dwiema zmiennymi lub rozkład punktów danych w przestrzeni dwuwymiarowej. Wykres punktowy jest odpowiedni dla danych zarówno ciągłych, jak i dyskretnych, gdy chcemy zobrazować wzory, korelację lub związki między zmiennymi.

Oto niektóre sytuacje, w których wykresy punktowe są stosowane:

  1. Analiza korelacji między dwiema zmiennymi, na przykład związek między wiekiem a dochodem.
  2. Prezentowanie rozkładu punktów danych, na przykład wykazanie geograficznego rozmieszczenia sklepów w mieście.
  3. Eksploracja danych, aby zrozumieć strukturę danych i znaleźć wzorce, grupy lub anomalie, na przykład w celu identyfikacji skupisk danych w analizie skupień (clustering).
  4. Wykrywanie wartości odstających (outliers) w danych, na przykład dla wykrywania nietypowych obserwacji w zbiorze danych.
  5. Porównywanie różnych grup lub kategorii danych, na przykład porównanie wzrostu gospodarczego różnych krajów względem ich długu publicznego.

Wykresy punktowe są szczególnie przydatne, gdy mamy do czynienia z danymi o różnym charakterze (ciągłe lub dyskretne) oraz gdy chcemy zbadać korelację, grupy, wzorce lub wartości odstające.

import matplotlib.pyplot as plt

1plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)
2plt.scatter([0.3, 3.8, 1.2, 2.5], [11, 25, 9, 26], color='darkgreen', marker='^')
3plt.xlim(0.5, 4.5)
plt.show(block=True)
1
plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3) - Tworzy wykres liniowy z podanymi współrzędnymi punktów (1, 10), (2, 20), (3, 25) i (4, 30). Kolor linii to jasnoniebieski (lightblue), a jej grubość wynosi 3.
2
plt.scatter([0.3, 3.8, 1.2, 2.5], [11, 25, 9, 26], color='darkgreen', marker='^') - Tworzy wykres punktowy z podanymi współrzędnymi punktów (0.3, 11), (3.8, 25), (1.2, 9) i (2.5, 26). - Kolor punktów to ciemnozielony (darkgreen), a ich kształt to trójkąty wypełnione w górę (^).
3
plt.xlim(0.5, 4.5) - Ustala zakres wartości na osi X, zaczynając od 0.5 do 4.5.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)
ax.scatter([0.3, 3.8, 1.2, 2.5], [11, 25, 9, 26], color='darkgreen', marker='^')
ax.set_xlim(0.5, 4.5)
plt.show()

import matplotlib.pyplot as plt

house_prices = [230000, 350000, 480000, 280000, 420000, 610000, 390000, 580000]
square_meters = [90, 140, 210, 100, 170, 260, 150, 240]
1plt.scatter(square_meters, house_prices, color='blue', marker='o')
plt.xlabel('Metraż [m2]')
plt.ylabel('Cena domu [PLN]')
plt.title('Związek między metrażem a ceną domu')
plt.show(block=True)
1
plt.scatter(square_meters, house_prices, color='blue', marker='o'): tworzy wykres punktowy (scatter plot) z metrażem domów na osi X (square_meters) i cenami domów na osi Y (house_prices). Punkty są koloru niebieskiego (color='blue') i mają kształt kółka (marker='o').

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
house_prices = [230000, 350000, 480000, 280000, 420000, 610000, 390000, 580000]
square_meters = [90, 140, 210, 100, 170, 260, 150, 240]
ax.scatter(square_meters, house_prices, color='blue', marker='o')
ax.set_xlabel('Metraż [m2]')
ax.set_ylabel('Cena domu [PLN]')
ax.set_title('Związek między metrażem a ceną domu')
plt.show()

from matplotlib import pyplot as plt

x = [1, -3, 4, 5, 6]
y = [2, 6, -4, 1, 2]
area = [70, 60, 1, 50, 2]
1plt.scatter(x, y, marker=">", color="brown", alpha=0.5, s=area)
plt.show(block=True)
1
Kod plt.scatter(x, y, marker=">", color="brown", alpha=0.5, s=area) tworzy wykres punktowy (scatter plot) x: lista lub tablica współrzędnych x punktów na wykresie. y: lista lub tablica współrzędnych y punktów na wykresie. Wartości x i y muszą mieć tę samą długość, aby przedstawić każdy punkt na wykresie. marker: symbol reprezentujący kształt punktów na wykresie. W tym przypadku, używamy ">" co oznacza strzałkę skierowaną w prawo. color: kolor punktów na wykresie. W tym przypadku, używamy koloru “brown” (brązowy). alpha: przezroczystość punktów na wykresie, gdzie wartość 1 oznacza całkowitą nieprzezroczystość, a 0 całkowitą przezroczystość. W tym przypadku, używamy wartości 0.5 co oznacza półprzezroczystość punktów. s: rozmiar punktów na wykresie, który może być pojedynczą wartością lub listą/tablicą wartości o długości takiej samej jak współrzędne x i y.

import pandas as pd
import matplotlib.pyplot as plt


1data = {
    'product_id': [101, 102, 103, 104, 105, 106, 107, 108, 109, 110],
    'price': [19.99, 29.99, 14.99, 49.99, 9.99, 39.99, 24.99, 34.99, 44.99, 15.99],
    'units_sold': [150, 85, 200, 50, 300, 75, 120, 95, 60, 180],
    'rating': [4.5, 4.2, 4.8, 3.9, 4.6, 4.1, 4.3, 4.0, 3.8, 4.7],
    'discount': [0.1, 0.05, 0.15, 0.0, 0.2, 0.1, 0.05, 0.08, 0.0, 0.12]
}

2df = pd.DataFrame(data)
3x_values = df['price']
4y_values = df['units_sold']
5colors = df['rating']
6sizes = df['discount'] * 1000 + 50

7plt.scatter(x_values, y_values, s=sizes, c=colors, alpha=0.7, cmap='viridis')

8plt.colorbar(label='Ocena produktu')

9plt.xlabel('Cena produktu (PLN)')
10plt.ylabel('Liczba sprzedanych sztuk')
11plt.title('Analiza sprzedaży')

12plt.grid(True, alpha=0.3)

13plt.show()
1
data = {...}: tworzy słownik zawierający dane o produktach, gdzie każdy klucz odpowiada nazwie kolumny, a wartości to listy zawierające dane dla 10 produktów (id produktu, cena, liczba sprzedanych sztuk, ocena i rabat).
2
df = pd.DataFrame(data): konwertuje słownik data na DataFrame biblioteki pandas, co tworzy uporządkowaną tabelę danych z nazwanymi kolumnami.
3
x_values = df['price']: wyodrębnia kolumnę z cenami produktów i przypisuje ją do zmiennej x_values, która będzie użyta jako współrzędne X na wykresie.
4
y_values = df['units_sold']: wyodrębnia kolumnę z liczbą sprzedanych sztuk i przypisuje ją do zmiennej y_values, która będzie użyta jako współrzędne Y na wykresie.
5
colors = df['rating']: wyodrębnia kolumnę z ocenami produktów i przypisuje ją do zmiennej colors, która posłuży do nadania kolorów punktom na wykresie.
6
sizes = df['discount'] * 1000 + 50: tworzy zmienną sizes określającą rozmiar punktów przez przemnożenie wartości rabatu przez 1000 i dodanie 50, co zapewnia widoczność wszystkich punktów (minimalna wielkość 50 jednostek).
7
plt.scatter(x_values, y_values, s=sizes, c=colors, alpha=0.7, cmap='viridis'): tworzy wykres punktowy (scatter plot) używając cen jako współrzędnych X, sprzedaży jako Y, wielkości punktów określonych przez rabaty, kolorów opartych na ocenach, z przezroczystością 0.7 i paletą kolorów ‘viridis’.
8
plt.colorbar(label='Ocena produktu'): dodaje pasek kolorów (colorbar) do wykresu, który pokazuje skalę ocen produktów i ich odpowiadające kolory.
9
plt.xlabel('Cena produktu (PLN)'): ustawia etykietę osi X, opisującą że pokazuje cenę produktu w złotych.
10
plt.ylabel('Liczba sprzedanych sztuk'): ustawia etykietę osi Y, opisującą że pokazuje liczbę sprzedanych sztuk produktu.
11
plt.title('Analiza sprzedaży'): nadaje wykresowi tytuł “Analiza sprzedaży”.
12
plt.grid(True, alpha=0.3): włącza siatkę na wykresie z przezroczystością 0.3, co poprawia czytelność danych.
13
plt.show(): wyświetla przygotowany wykres.

import pandas as pd
import matplotlib.pyplot as plt

data = {
    'product_id': [101, 102, 103, 104, 105, 106, 107, 108, 109, 110],
    'price': [19.99, 29.99, 14.99, 49.99, 9.99, 39.99, 24.99, 34.99, 44.99, 15.99],
    'units_sold': [150, 85, 200, 50, 300, 75, 120, 95, 60, 180],
    'rating': [4.5, 4.2, 4.8, 3.9, 4.6, 4.1, 4.3, 4.0, 3.8, 4.7],
    'discount': [0.1, 0.05, 0.15, 0.0, 0.2, 0.1, 0.05, 0.08, 0.0, 0.12]
}

df = pd.DataFrame(data)
x_values = df['price']
y_values = df['units_sold']
colors = df['rating']
sizes = df['discount'] * 1000 + 50

fig, ax = plt.subplots()
scatter = ax.scatter(x_values, y_values, s=sizes, c=colors, alpha=0.7, cmap='viridis')
cbar = fig.colorbar(scatter, ax=ax)
cbar.set_label('Ocena produktu')

ax.set_xlabel('Cena produktu (PLN)')
ax.set_ylabel('Liczba sprzedanych sztuk')
ax.set_title('Analiza sprzedaży')
ax.grid(True, alpha=0.3)

plt.show()

https://matplotlib.org/stable/api/markers_api.html