In [1]:
from datetime import datetime
print(f'Päivitetty {datetime.now()}')
Päivitetty 2021-03-21 17:41:30.729147
In [2]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [3]:
df = pd.read_excel('http://taanila.fi/data1.xlsx')
df.head()
Out[3]:
nro sukup ikä perhe koulutus palveluv palkka johto työtov työymp palkkat työteht työterv lomaosa kuntosa hieroja
0 1 1 38 1 1.0 22.0 3587 3 3.0 3 3 3 NaN NaN NaN NaN
1 2 1 29 2 2.0 10.0 2963 1 5.0 2 1 3 NaN NaN NaN NaN
2 3 1 30 1 1.0 7.0 1989 3 4.0 1 1 3 1.0 NaN NaN NaN
3 4 1 36 2 1.0 14.0 2144 3 3.0 3 3 3 1.0 NaN NaN NaN
4 5 1 24 1 2.0 4.0 2183 2 3.0 2 1 2 1.0 NaN NaN NaN

Kaavio on Axes-luokan olio. Kaavio sijaitsee Figure-luokan olion (kuvion) sisällä. Saman kuvion sisälle voin sijoittaa useita kaavioita. Voit ajatella, että Figure on kehys, jonka sisällä on yksi tai useampia kaavioita.

Seuraavassa luon subplots-toiminnolla kuvion, jonka sisällä on neljä kaaviota. subplots palauttaa kuvion (annan tässä sille nimeksi fig) ja kokoelman kaavioita (annan kokoelmalla nimeksi ax).

In [4]:
fig, ax = plt.subplots(nrows = 2, ncols = 2)

Seuraavassa lisään kuvion sisään neljä kaavioita kuten edellä ja määritän kuvion (figure) kooksi 10 x 6.

wspace ja hspace määrittävät kaavioiden välisen tyhjän tilan (w = weigth eli leveys, h = heigth eli korkeus).

Lisään kuhunkin kaavioon sisältöä yksi kerrallaan. ax[0, 0] viittaa ensimmäisen rivin ensimmäiseen kaavioon, ax[0, 1] viittaa ensimmäisen rivin toiseen kaavioon jne.

In [5]:
fig, ax = plt.subplots(nrows = 2, ncols = 2, figsize = (10, 6))

fig.subplots_adjust(wspace = 0.4, hspace = 0.2)

df['sukup'].value_counts().plot.barh(ax = ax[0, 0])
ax[0, 0].set_yticklabels(['Mies', 'Nainen'])

df['perhe'].value_counts().plot.barh(ax = ax[0, 1])
ax[0, 1].set_yticklabels(['Perheetön', 'Perheellinen'])

df['koulutus'].value_counts().plot.barh(ax = ax[1, 0])
ax[1, 0].set_yticklabels( ['Peruskoulu', '2. aste', 'Korkeakoulu', 'Ylempi korkeakoulu'])

df['palveluv'].hist(bins = 6, edgecolor = 'white', zorder = 2, ax = ax[1, 1])
ax[1, 1].set_xlabel('Palveluvuodet')

# Kuvion otsikko
fig.suptitle('Vastaajien taustatietoja')
Out[5]:
Text(0.5, 0.98, 'Vastaajien taustatietoja')

Jos teen kaavion suoraan dataframesta, niin subplots-lisäparametrilla kustakin dataframen sarakkeesta tehdään oma kaavio.

sharex ja sharey -lisäparametreilla voin pakottaa kaavioille yhteisen x-akselin ja y-akselin.

In [6]:
# Dataframen laskeminen
df1 = df['johto'].value_counts(sort = False, normalize = True).to_frame()
df1['työtov'] = df['työtov'].value_counts(sort = False, normalize = True)
df1['työymp'] = df['työymp'].value_counts(sort = False, normalize = True)
df1['palkkat'] = df['palkkat'].value_counts(sort = False, normalize = True)
df1['työteht'] = df['työteht'].value_counts(sort = False, normalize = True)

df1.index = ['Erittäin tyytymätön', 'Jokseenkin tyytymätön', 'Ei tyytymätön eikä tyytyväinen', 
                'Jokseenkin tyytyväinen', 'Erittäin tyytyväinen']
df1 = df1 * 100
df1
Out[6]:
johto työtov työymp palkkat työteht
Erittäin tyytymätön 8.536585 NaN 10.975610 40.243902 6.097561
Jokseenkin tyytymätön 19.512195 3.703704 10.975610 23.170732 18.292683
Ei tyytymätön eikä tyytyväinen 36.585366 19.753086 36.585366 23.170732 35.365854
Jokseenkin tyytyväinen 28.048780 43.209877 28.048780 12.195122 30.487805
Erittäin tyytyväinen 7.317073 33.333333 13.414634 1.219512 9.756098
In [7]:
ax = df1.plot.barh(figsize = (10, 2), legend = False, subplots = True, layout = (1, 5), 
                           sharex = True, sharey = True)
ax[0, 2].set_xlabel('%')
Out[7]:
Text(0.5, 0, '%')

Lisätietoa

Tämä oli seitsemäs ja viimeinen osa matplotlib-perusteita käsittelevästä sarjasta. Tämän jälkeen on hyvä laajentaa osaamista seaborn-kirjastoon. Seaborn on matplotlibin päälle rakennettu kirjasto, joka helpottaa monin tavoin kaavioiden laatimista. Seabornilla laadittuja kaavioita voi muotoilla normaaliin tapaan matplotlibin toiminnoilla. Lue lisää

https://nbviewer.jupyter.org/github/taanila/kaaviot/blob/master/seaborn1.ipynb

https://nbviewer.jupyter.org/github/taanila/kaaviot/blob/master/seaborn2.ipynb