Szybki quiz – przypomnienie poprzedniej lekcji
1. Plik dane.csv zawiera wiersz Jan,Kowalski,25,Warszawa. Co się stanie po wykonaniu kodu?
import csv
with open('dane.csv', 'r', encoding='utf-8') as plik:
czytnik = csv.reader(plik)
next(czytnik) # pominięcie nagłówków
for wiersz in czytnik:
print(wiersz[2] + 1)
Odpowiedź
Odpowiedź: Wystąpi TypeError. csv.reader zwraca wszystkie wartości jako napisy, więc wiersz[2] to '25', a nie liczba. Przed dodawaniem trzeba użyć int(wiersz[2]).
2. Co jest nie tak w zapisie do pliku CSV? Co należy dodać?
with open('wynik.csv', 'w') as plik:
writer = csv.writer(plik)
writer.writerows(dane)
Odpowiedź
Odpowiedź: Brakuje newline='', bez którego w Windows pojawiają się puste linie między wierszami. Warto też dodać encoding='utf-8'.
3. Znajdź błąd w filtrowaniu DataFrame i popraw go:
df[df['Wiek'] > 25 & df['Miasto'] == 'Warszawa']
Odpowiedź
Odpowiedź: Każdy warunek musi być w osobnych nawiasach, bo & ma wyższy priorytet niż > i ==.
Poprawnie: df[(df['Wiek'] > 25) & (df['Miasto'] == 'Warszawa')]
4. Co zostanie wyświetlone?
df = pd.DataFrame({
'Imie': ['Jan', 'Anna', 'Piotr'],
'Wiek': [25, 30, 28]
})
print(df.iloc[1, 1])
Odpowiedź
Odpowiedź: 30. iloc liczy pozycje od zera: wiersz 1 to Anna, kolumna 1 to Wiek.
5. Uzupełnij kod tak, aby wyświetlił średni wiek w każdym mieście:
print(df.______('Miasto')['Wiek'].______())
Odpowiedź
Odpowiedź: groupby oraz mean.
6. Jak policzyć brakujące wartości w każdej kolumnie DataFrame? Jak potem usunąć wiersze z brakami?
Odpowiedź
Odpowiedź: df.isnull().sum() liczy braki w każdej kolumnie. df.dropna() usuwa wiersze z brakami (alternatywa: fillna() wypełnia je wartością).
Wprowadzenie
Wizualizacja danych to kluczowy element analizy – pozwala szybko zrozumieć dane i wyciągnąć wnioski.
Biblioteki:
- Matplotlib – podstawowa, najpopularniejsza
- Seaborn – ładniejsze wykresy, bazuje na Matplotlib
- Plotly – interaktywne wykresy
Matplotlib – podstawy
Instalacja
pip install matplotlib
Pierwszy wykres – linia
import matplotlib.pyplot as plt
# Dane
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Stwórz wykres
plt.plot(x, y)
# Opisy
plt.title('Mój pierwszy wykres')
plt.xlabel('Oś X')
plt.ylabel('Oś Y')
# Pokaż
plt.show()

Personalizacja linii
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# Styl linii
plt.plot(x, y,
color='red', # Kolor
linewidth=2, # Grubość
linestyle='--', # Styl: '-', '--', '-.', ':'
marker='o', # Markery: 'o', 's', '^', '*'
markersize=8, # Rozmiar markerów
label='Dane 1') # Etykieta
plt.title('Wykres z personalizacją')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend() # Pokaż legendę
plt.grid(True) # Siatka
plt.show()

Wiele linii na jednym wykresie
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]
y3 = [3, 5, 4, 6, 8]
plt.plot(x, y1, label='Linia 1', marker='o')
plt.plot(x, y2, label='Linia 2', marker='s')
plt.plot(x, y3, label='Linia 3', marker='^')
plt.title('Wiele linii')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.grid(True)
plt.show()

Typy wykresów
Wykres punktowy (scatter)
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6]
y = [2, 4, 5, 7, 8, 10]
plt.scatter(x, y,
s=100, # Rozmiar punktów
c='red', # Kolor
alpha=0.6, # Przezroczystość
edgecolors='black') # Obramowanie
plt.title('Wykres punktowy')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

Wykres słupkowy (bar)
import matplotlib.pyplot as plt
kategorie = ['A', 'B', 'C', 'D', 'E']
wartosci = [23, 45, 56, 78, 32]
plt.bar(kategorie, wartosci,
color='skyblue',
edgecolor='black',
width=0.6)
plt.title('Wykres słupkowy')
plt.xlabel('Kategoria')
plt.ylabel('Wartość')
plt.show()

Wykres słupkowy poziomy
import matplotlib.pyplot as plt
kategorie = ['Produkt A', 'Produkt B', 'Produkt C']
wartosci = [150, 230, 180]
plt.barh(kategorie, wartosci, color='lightgreen')
plt.title('Sprzedaż produktów')
plt.xlabel('Liczba sprzedanych')
plt.show()

Histogram
import matplotlib.pyplot as plt
import numpy as np
# Dane - rozkład normalny
dane = np.random.randn(1000)
plt.hist(dane,
bins=30, # Liczba słupków
color='purple',
alpha=0.7,
edgecolor='black')
plt.title('Histogram')
plt.xlabel('Wartość')
plt.ylabel('Częstość')
plt.show()

Wykres kołowy (pie)
import matplotlib.pyplot as plt
kategorie = ['Python', 'Java', 'JavaScript', 'C++']
udzialy = [40, 25, 20, 15]
plt.pie(udzialy,
labels=kategorie,
autopct='%1.1f%%', # Pokaż procenty
startangle=90, # Kąt początkowy
colors=['#ff9999', '#66b3ff', '#99ff99', '#ffcc99'])
plt.title('Popularne języki programowania')
plt.show()

Wyciągnięty kawałek (explode)
import matplotlib.pyplot as plt
kategorie = ['Python', 'Java', 'JavaScript', 'C++']
udzialy = [40, 25, 20, 15]
explode = [0.1, 0, 0, 0] # Wyciągnij pierwszy
plt.pie(udzialy,
labels=kategorie,
autopct='%1.1f%%',
explode=explode,
shadow=True)
plt.title('Języki programowania')
plt.show()

Wykres pudełkowy (box plot)
import matplotlib.pyplot as plt
import numpy as np
# Dane dla różnych grup
dane1 = np.random.normal(100, 10, 200)
dane2 = np.random.normal(90, 20, 200)
dane3 = np.random.normal(80, 5, 200)
dane = [dane1, dane2, dane3]
plt.boxplot(dane, labels=['Grupa A', 'Grupa B', 'Grupa C'])
plt.title('Box Plot')
plt.ylabel('Wartości')
plt.show()

Wiele wykresów (subplots)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
# Stwórz siatkę 2x2
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# Wykres 1
axes[0, 0].plot(x, np.sin(x))
axes[0, 0].set_title('sin(x)')
# Wykres 2
axes[0, 1].plot(x, np.cos(x), 'r')
axes[0, 1].set_title('cos(x)')
# Wykres 3
axes[1, 0].plot(x, x**2, 'g')
axes[1, 0].set_title('x²')
# Wykres 4
axes[1, 1].plot(x, np.exp(x/10), 'purple')
axes[1, 1].set_title('e^(x/10)')
plt.tight_layout() # Automatyczne dopasowanie
plt.show()

Zapisywanie wykresów
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.title('Mój wykres')
# Zapisz do pliku
plt.savefig('wykres.png', dpi=300, bbox_inches='tight')
# plt.savefig('wykres.pdf') # PDF
# plt.savefig('wykres.svg') # SVG
print("Wykres zapisany!")
Pandas + Matplotlib
Pandas ma wbudowaną integrację z Matplotlib.
import pandas as pd
import matplotlib.pyplot as plt
# DataFrame
df = pd.DataFrame({
'Miesiąc': ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj'],
'Sprzedaż': [120, 150, 180, 160, 200]
})
# Wykres bezpośrednio z DataFrame
df.plot(x='Miesiąc', y='Sprzedaż', kind='bar', color='skyblue')
plt.title('Sprzedaż miesięczna')
plt.ylabel('Sprzedaż')
plt.show()
# Inne typy: 'line', 'bar', 'barh', 'hist', 'box', 'scatter', 'pie'

Seaborn – piękniejsze wykresy
Instalacja
pip install seaborn
Podstawy Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Ustaw styl
sns.set_style('darkgrid') # 'darkgrid', 'whitegrid', 'dark', 'white', 'ticks'
# Dane
tips = sns.load_dataset('tips') # Przykładowy zbiór danych
# Wykres punktowy z linią trendu
sns.scatterplot(data=tips, x='total_bill', y='tip')
plt.title('Rachunek vs Napiwek')
plt.show()

Wykres z regresją liniową
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
# Scatter plot + linia trendu
sns.regplot(data=tips, x='total_bill', y='tip')
plt.title('Rachunek vs Napiwek (z trendem)')
plt.show()

Wykres skrzypcowy (violin)
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset('tips')
sns.violinplot(data=tips, x='day', y='total_bill')
plt.title('Rachunki według dni tygodnia')
plt.show()

Heatmapa (korelacja)
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# Dane
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [2, 4, 6, 8, 10],
'C': [5, 4, 3, 2, 1]
})
# Macierz korelacji
korelacja = df.corr()
# Heatmapa
sns.heatmap(korelacja,
annot=True, # Pokaż wartości
cmap='coolwarm', # Paleta kolorów
center=0) # Wyśrodkuj na 0
plt.title('Macierz korelacji')
plt.show()

Pair plot
import seaborn as sns
import matplotlib.pyplot as plt
# Załaduj dane
iris = sns.load_dataset('iris')
# Wykres wszystkich par zmiennych
sns.pairplot(iris, hue='species')
plt.show()

Praktyczne przykłady
Przykład 1: Analiza sprzedaży
import pandas as pd
import matplotlib.pyplot as plt
# Dane sprzedażowe
sprzedaz = pd.DataFrame({
'Miesiąc': ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze'],
'Sprzedaż': [12000, 15000, 13000, 18000, 22000, 25000],
'Cel': [15000, 15000, 15000, 20000, 20000, 20000]
})
# Wykres
plt.figure(figsize=(10, 6))
plt.plot(sprzedaz['Miesiąc'], sprzedaz['Sprzedaż'],
marker='o', linewidth=2, label='Rzeczywista')
plt.plot(sprzedaz['Miesiąc'], sprzedaz['Cel'],
marker='s', linewidth=2, linestyle='--', label='Cel')
plt.title('Sprzedaż vs Cel - 2024', fontsize=16)
plt.xlabel('Miesiąc')
plt.ylabel('Sprzedaż (PLN)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

Przykład 2: Porównanie produktów
import matplotlib.pyplot as plt
produkty = ['Laptop', 'Telefon', 'Tablet', 'Monitor', 'Klawiatura']
sprzedaz_q1 = [45, 78, 32, 56, 89]
sprzedaz_q2 = [52, 85, 38, 61, 95]
x = range(len(produkty))
width = 0.35
plt.figure(figsize=(10, 6))
plt.bar([i - width/2 for i in x], sprzedaz_q1, width, label='Q1', color='skyblue')
plt.bar([i + width/2 for i in x], sprzedaz_q2, width, label='Q2', color='lightgreen')
plt.title('Sprzedaż produktów - Q1 vs Q2')
plt.xlabel('Produkt')
plt.ylabel('Liczba sprzedanych')
plt.xticks(x, produkty)
plt.legend()
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()

Przykład 3: Rozkład wieku
import matplotlib.pyplot as plt
import numpy as np
# Symulacja danych
wiek = np.random.normal(35, 10, 1000) # Średnia 35, odchylenie 10
plt.figure(figsize=(10, 6))
plt.hist(wiek, bins=30, color='coral', edgecolor='black', alpha=0.7)
plt.axvline(wiek.mean(), color='red', linestyle='--', linewidth=2, label=f'Średnia: {wiek.mean():.1f}')
plt.title('Rozkład wieku pracowników')
plt.xlabel('Wiek')
plt.ylabel('Liczba osób')
plt.legend()
plt.grid(axis='y', alpha=0.3)
plt.show()

Przykład 4: Dashboard z wieloma wykresami
import matplotlib.pyplot as plt
import pandas as pd
# Dane
df = pd.DataFrame({
'Miesiąc': ['Sty', 'Lut', 'Mar', 'Kwi'],
'Przychód': [12000, 15000, 13000, 18000],
'Koszty': [8000, 9000, 8500, 11000],
'Klienci': [120, 145, 130, 170]
})
df['Zysk'] = df['Przychód'] - df['Koszty']
# Stwórz dashboard
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle('Dashboard Sprzedażowy - Q1 2024', fontsize=16)
# Wykres 1: Przychód i koszty
axes[0, 0].plot(df['Miesiąc'], df['Przychód'], marker='o', label='Przychód')
axes[0, 0].plot(df['Miesiąc'], df['Koszty'], marker='s', label='Koszty')
axes[0, 0].set_title('Przychód i Koszty')
axes[0, 0].set_ylabel('PLN')
axes[0, 0].legend()
axes[0, 0].grid(True, alpha=0.3)
# Wykres 2: Zysk
axes[0, 1].bar(df['Miesiąc'], df['Zysk'], color='green', alpha=0.7)
axes[0, 1].set_title('Zysk')
axes[0, 1].set_ylabel('PLN')
axes[0, 1].grid(axis='y', alpha=0.3)
# Wykres 3: Liczba klientów
axes[1, 0].plot(df['Miesiąc'], df['Klienci'], marker='D', color='purple', linewidth=2)
axes[1, 0].set_title('Liczba klientów')
axes[1, 0].set_ylabel('Klienci')
axes[1, 0].grid(True, alpha=0.3)
# Wykres 4: Udział przychodów
axes[1, 1].pie(df['Przychód'], labels=df['Miesiąc'], autopct='%1.1f%%', startangle=90)
axes[1, 1].set_title('Udział przychodów')
plt.tight_layout()
plt.show()

Podsumowanie
Matplotlib:
plt.plot()– wykres liniowyplt.scatter()– wykres punktowyplt.bar()/plt.barh()– słupkowyplt.hist()– histogramplt.pie()– kołowyplt.boxplot()– pudełkowyplt.subplots()– wiele wykresów
Personalizacja:
color,linewidth,linestyle,markertitle(),xlabel(),ylabel()legend(),grid()savefig()– zapis do pliku
Seaborn:
- Ładniejsze style
scatterplot(),regplot(),violinplot()heatmap()– korelacjapairplot()– wszystkie pary
Integracja z Pandas:
df.plot()– bezpośrednie wykresy z DataFrame
PODSUMOWANIE
- Wykres w Matplotlib budujesz zawsze w tej samej kolejności: import → dane → wykres → opisy →
plt.show(). - Import:
import matplotlib.pyplot as plt. Biblioteki instalujesz przezpip install matplotlibipip install seaborn. - Seaborn bazuje na Matplotlib. Wykresy Seaborn nadal wyświetlasz i opisujesz przez
plt. - Dla
plt.plot(x, y)listyxiymuszą mieć tę samą długość. - Typ wykresu dobierasz do danych:
- zmiana wartości (linia):
plot - zależność dwóch zmiennych:
scatter - porównanie kategorii:
bar/barh - rozkład wartości:
hist - udział w całości:
pie - rozrzut i wartości odstające:
boxplot
- zmiana wartości (linia):
- Parametry linii:
color,linewidth,linestyle,marker,markersize,label. labelsamo nic nie pokaże. Legenda pojawia się dopiero poplt.legend().- Kilka linii na jednym wykresie to kilka wywołań
plt.plot()przed jednymplt.show(). - Przy kilku wykresach obok siebie:
fig, axes = plt.subplots(wiersze, kolumny). Wykres wybierasz przezaxes[wiersz, kolumna], a tytuł ustawiasz przezset_title(), nietitle(). tight_layout()poprawia rozmieszczenie wykresów,figsize=(szer, wys)ustawia rozmiar.savefig('plik.png', dpi=300, bbox_inches='tight')zapisuje wykres do pliku (PNG, PDF, SVG – zależnie od rozszerzenia).- Pandas ma wbudowane wykresy:
df.plot(x=..., y=..., kind=...). Tytuł ishow()nadal dodajesz przezplt. - Seaborn przyjmuje DataFrame i nazwy kolumn:
sns.scatterplot(data=df, x='kol1', y='kol2'). - Heatmapa wymaga macierzy korelacji:
sns.heatmap(df.corr(), annot=True). - Typowe błędy: różne długości list, brak
legend(), brakshow(), pomylenieplt.titlezset_title, przekazanie dobar()złych argumentów (najpierw kategorie, potem wartości).
Minimum, które powinno wejść w pamięć
Jeżeli masz zapamiętać tylko kilka rzeczy z tej lekcji, zapamiętaj te:
- Schemat:
import matplotlib.pyplot as plt→ dane →plt.plot(x, y)→ opisy →plt.show(). xiymuszą mieć tyle samo elementów.- Wybór wykresu: plot = linia, scatter = punkty, bar/barh = słupki, hist = rozkład, pie = udział w całości.
label='...'+plt.legend()– bez drugiego legendy nie będzie.plt.subplots(2, 2)→axes[0, 1]oznacza pierwszy wiersz, druga kolumna. Dla takiego wykresu używaszset_title().plt.savefig('wykres.png', dpi=300)zapisuje wykres do pliku.df.plot(x='kolumna1', y='kolumna2', kind='bar')rysuje wykres prosto z DataFrame.- Seaborn:
sns.scatterplot(data=df, x='...', y='...'). Heatmapa:sns.heatmap(df.corr(), annot=True).
Ściągawka – najważniejsze polecenia i składnia
Instalacja i import
pip install matplotlib seaborn
import matplotlib.pyplot as plt
import seaborn as sns
Typy wykresów (Matplotlib)
| Wykres | Polecenie | Przykład |
|---|---|---|
| liniowy | plt.plot() | plt.plot(x, y) |
| punktowy | plt.scatter() | plt.scatter(x, y, s=100, c='red', alpha=0.6) |
| słupkowy | plt.bar() | plt.bar(kategorie, wartosci) |
| słupkowy poziomy | plt.barh() | plt.barh(kategorie, wartosci) |
| histogram | plt.hist() | plt.hist(dane, bins=30) |
| kołowy | plt.pie() | plt.pie(udzialy, labels=kategorie, autopct='%1.1f%%') |
| pudełkowy | plt.boxplot() | plt.boxplot([d1, d2], labels=['A', 'B']) |
Opisy i wygląd
plt.title('Tytuł')
plt.xlabel('Oś X')
plt.ylabel('Oś Y')
plt.legend() # wymaga label=... w wykresie
plt.grid(True) # siatka
plt.figure(figsize=(10, 6)) # rozmiar wykresu
plt.tight_layout()
Parametry linii
plt.plot(x, y, color='red', linewidth=2, linestyle='--',
marker='o', markersize=8, label='Dane 1')
linestyle:'-','--','-.',':'marker:'o','s','^','*'
Wykres kołowy – dodatki
autopct='%1.1f%%'– pokazuje procentystartangle=90– kąt początkowyexplode=[0.1, 0, 0, 0]– wysuwa wybrany kawałek
Wiele wykresów
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0, 0].plot(x, y)
axes[0, 0].set_title('Tytuł')
plt.tight_layout()
plt.show()
Zapis do pliku
plt.savefig('wykres.png', dpi=300, bbox_inches='tight')
Pandas → wykres
df.plot(x='Miesiąc', y='Sprzedaż', kind='bar')
plt.show()
# kind: 'line', 'bar', 'barh', 'hist', 'box', 'scatter', 'pie'
Seaborn
sns.set_style('darkgrid') # także 'whitegrid', 'dark', 'white', 'ticks'
sns.scatterplot(data=df, x='kol1', y='kol2')
sns.regplot(data=df, x='kol1', y='kol2') # punkty + linia trendu
sns.violinplot(data=df, x='kategoria', y='liczba')
sns.heatmap(df.corr(), annot=True, cmap='coolwarm', center=0)
sns.pairplot(df, hue='kolumna')
Quiz – sprawdź się
1. Dobierz typ wykresu (plot, scatter, bar, hist, pie) do zadania:
a) pokazanie, jaki procent budżetu przypada na poszczególne kategorie wydatków,
b) pokazanie rozkładu wzrostu 1000 osób,
c) sprawdzenie, czy wyższy rachunek oznacza wyższy napiwek (dwie zmienne liczbowe),
d) porównanie sprzedaży pięciu produktów.
2. Co się stanie po uruchomieniu tego kodu?
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4]
plt.plot(x, y)
plt.show()
3. Programista dodał label='Dane 1' do wykresu, ale legenda się nie pojawia. Dlaczego?
plt.plot(x, y, label='Dane 1')
plt.title('Wykres')
plt.show()
4. Uzupełnij kod, aby powstał wykres słupkowy (pionowy). Jak zmienić go na poziomy?
kategorie = ['A', 'B', 'C']
wartosci = [10, 25, 15]
plt.______(kategorie, wartosci, color='skyblue')
plt.show()
5. Który parametr plt.pie() wyświetla wartości procentowe na wykresie?
a) labels b) autopct c) explode d) startangle
6. Jak będzie wyglądał wynik tego kodu?
plt.plot([1, 2, 3], [1, 4, 9], linestyle='--', marker='o')
plt.show()
7. W którym miejscu siatki pojawi się wykres? Jak nadać mu tytuł „Temperatura”?
fig, axes = plt.subplots(2, 2)
axes[0, 1].plot([1, 2, 3], [20, 22, 21])
8. Uzupełnij kod, aby narysować z DataFrame wykres liniowy sprzedaży:
df = pd.DataFrame({
'Miesiąc': ['Sty', 'Lut', 'Mar'],
'Sprzedaż': [120, 150, 180]
})
df.plot(x='Miesiąc', y='Sprzedaż', kind='______')
plt.show()
9. Który zapis zapisze wykres do pliku PNG w wysokiej rozdzielczości?
a) plt.save('w.png')
b) plt.savefig('w.png', dpi=300)
c) plt.show('w.png')
d) plt.export('w.png', dpi=300)
10. Uzupełnij kod tak, aby heatmapa pokazywała korelacje i wartości w komórkach:
korelacja = df.______()
sns.heatmap(korelacja, ______=True, cmap='coolwarm')
plt.show()
11. Napisz program, który narysuje wykres liniowy temperatur:
dni = ['Pn', 'Wt', 'Śr', 'Cz', 'Pt']
temp = [12, 15, 11, 14, 18]
Wymagania: czerwona linia z markerami w kształcie kółek, tytuł, opisy obu osi, siatka.
Odpowiedzi
1. a) pie, b) hist, c) scatter, d) bar.
2. Wystąpi ValueError. Listy x (3 elementy) i y (2 elementy) mają różną długość, więc wykres nie powstanie.
3. Brakuje wywołania plt.legend(). Samo label tylko nazywa linię, a legenda jest wyświetlana dopiero po plt.legend().
4. plt.bar(...). Wykres poziomy: plt.barh(...).
5. b) autopct (np. autopct='%1.1f%%'). explode wysuwa kawałek, startangle ustawia kąt początkowy, labels opisuje kawałki.
6. Przerywana linia (--) łącząca trzy punkty (1,1), (2,4), (3,9), każdy oznaczony kółkiem.
7. W pierwszym wierszu, w drugiej kolumnie (prawy górny róg siatki 2×2). Tytuł: axes[0, 1].set_title('Temperatura').
8. kind='line'.
9. b) plt.savefig('w.png', dpi=300).
10. df.corr() oraz annot=True.
11. Przykładowe rozwiązanie:
import matplotlib.pyplot as plt
dni = ['Pn', 'Wt', 'Śr', 'Cz', 'Pt']
temp = [12, 15, 11, 14, 18]
plt.plot(dni, temp, color='red', marker='o')
plt.title('Temperatura w tygodniu')
plt.xlabel('Dzień')
plt.ylabel('Temperatura (°C)')
plt.grid(True)
plt.show()
Sprawdzenie: czerwona linia z kółkami, tytuł, opisane osie i siatka, a na osi X dni od Pn do Pt.