Andere termen voor een scatter plot zijn in het Nederlands ook wel spreidingsdiagram of correlatiediagram. Het geeft de samenhang tussen twee variabelen weer.
Denk hierbij aan het volgende voorbeeld: van 100 personen meet je de lengte en het gewicht. Vervolgens zet je in een grafiek alle metingen tegen elkaar uit. Op de x-as lengte, op de y-as gewicht. Elke meting is een punt in de grafiek. Zo kun je direct zien of er uit de metingen een verband blijkt tussen lengte en gewicht.
Een scatter plot wordt door data scientists vaak gebruikt in data science vraagstukken. Stel we zouden een model willen maken om het gewicht van een persoon te voorspellen. Dan kunnen we een scatter plot van lengte en gewicht maken. Dat maakt inzichtelijk of er een zichtbaar verband is of niet.
In dit blog komen de volgende gebieden aan bod:
- Een Python scatter plot met Matplotlib
- Toevoegen van aslabels, titel en legenda
- Meerdere series in een scatter plot
- Een Python scatter plot met Pandas
Een scatter plot met Matplotlib
Matplotlib is een package waarmee grafieken gemaakt kunnen worden. Ook een scatter plot. Hiervoor is data nodig. We gaan verder met het voorbeeld van lengte en gewicht. Met package Numpy maken we 100 metingen aan vanuit willekeurige getallen. We maken 2 variabelen aan, met metingen van lengtes en gewichten. Dit doen we met onderstaande code. Ook printen we de eerste 5 meetwaarden.
import numpy as np
lengtes_man = np.random.normal(loc=150, scale=25, size=100)
gewichten_man = (lengtes_man / 2) + np.random.randint(low=-10, high=10, size=100)
print(lengtes_man[:5])
print(gewichten_man[:5])
[143.69854302 195.47945254 123.12240639 150.64300696 198.97219519]
[ 64.84927151 88.73972627 63.56120319 79.32150348 100.4860976 ]
Nu gaan we een grafiek maken met Matplotlib. Allereerst importeren we uit Matplotlib module pyplot. Ook voegen we code '%matplotlib inline' toe waardoor grafieken in Jupyter Notebook goed getoond worden. Tot slot maken we een figuur aan, 'fig'. Hierop maken we een assenstelsel, 'ax'. We geven het figuur bepaalde afmetingen. Het figuur is nu nog leeg.
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
Op dit assenstelsel kunnen we de punten van het scatter plot gaan tekenen. Hiervoor gebruiken we de '.scatter()' methode. In deze methode geven we de meetwaarden op als x en y.
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(x=lengtes_man, y=gewichten_man);
Toevoegen van aslabels, titel en legenda
We zien dat alle 100 metingen geplot zijn. We zien dat er een lineair verband aanwezig is tussen lengte en gewicht. Ter verduidelijking kunnen we aslabels en een titel toevoegen. Dit doen we met onderstaande code.
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(x=lengtes_man, y=gewichten_man)
ax.set_xlabel('Lengte [cm]')
ax.set_ylabel('Gewicht [kg]')
ax.set_title('Lengte vs. gewicht');
Meerdere series in een scatter plot
We hebben nu een scatter plot gemaakt met 1 set metingen. Dit zijn metingen van lengtes en gewichten van mannen. We zouden aan dezelfde grafiek ook metingen van vrouwen toe kunnen voegen. Hiervoor maken we wederom met package Numpy data met metingen aan.
lengtes_vrouw = np.random.normal(loc=140, scale=25, size=100)
gewichten_vrouw = (lengtes_vrouw / 2.1) + np.random.randint(low=-10, high=10, size=100)
Deze data kunnen we vervolgens gebruiken om een extra serie te plotten. Dit doen we door simpelweg nogmaals gebruik te maken van de '.scatter()' methode. Nu door te verwijzen naar de metingen van vrouwen. Om verschillen goed duidelijk te maken geven we in de '.scatter()' methode ook een label op. Vervolgens passen we tot slot methode '.legend()' toe. Hierdoor wordt met de labels een legenda geplot.
%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(x=lengtes_man, y=gewichten_man, label='Man')
ax.scatter(x=lengtes_vrouw, y=gewichten_vrouw, label='Vrouw')
ax.set_xlabel('Lengte [cm]')
ax.set_ylabel('Gewicht [kg]')
ax.set_title('Lengte vs. gewicht')
ax.legend();
Een scatter plot met Pandas
Wanneer je een analyse doet werk je vaak met data in tabellen. Dit kan data uit een Excel-bestand zijn. Een ander voor beeld is data uit een SQL tabel. Hiervoor kun je gebruik maken van Pandas. Dit maakt werken met data in tabelvorm makkelijk. Daarnaast maakt Pandas ook weer gebruik van Matplotlob. Hiermee kun je data uit een Pandas tabel makkelijk visualiseren.
Dit bekijken we in een voorbeeld. We maken gebruik van de eerdere metingen. Met onderstaande code maken we een Pandas tabel aan. We bekijken er ook de eerste 3 rijen.
import pandas as pd
df_man = pd.DataFrame({'Lengte': lengtes_man, 'Gewicht': gewichten_man})
df_man.head(3)
Lengte | Gewicht | |
---|---|---|
0 | 143.698543 | 64.849272 |
1 | 195.479453 | 88.739726 |
2 | 123.122406 | 63.561203 |
Deze tabel, 'df_man', bevat alle 100 metingen van mannen. Vervolgens kunnen we in één regel een scatter plot maken. Dit doen we met de '.plot()' methode. Hierin geven we x en y op. Ook benoemen we 'kind'. Dit specificeert het grafiektype. In ons geval 'scatter'.
df_man.plot(x='Lengte', y='Gewicht', kind='scatter');
Je ziet dat automatisch aslabels aangemaakt zijn. Ook kunnen we gemakkelijk met deze grafiek verder werken met Matplotlib. Zo combineren we het gemak van data in een tabel in Pandas, met de volledige functionaliteit van Matplotlib.
Hiervoor maken we met Matplotlib op de bekende manier een figuur en assenstelsel aan. Vervolgens een scatter plot met Pandas, waarin we nu 'ax=ax' toevoegen. Dit zorgt ervoor dat de grafiek op het aangemaakte assenstelstel geplot wordt. Nu kunnen we hier bijvoorbeeld een titel aan toevoegen.
fig, ax = plt.subplots(figsize=(8,6))
df_man.plot(x='Lengte', y='Gewicht', kind='scatter', ax=ax)
ax.set_title('Lengte vs. gewicht (mannen)');
Wat je moet onthouden
Een scatter plot toont de relatie tussen 2 getallenreeksen. Hierdoor zie je gemakkelijk of er wel of geen verband aanwezig is. Als je met data in lists of arrays werkt kun je met Matpotlib snel een scatter plot maken. Het kan ook dat je met data in een tabel werkt. Hiervoor is Pandas een handig hulpmiddel. Pandas maakt zelf weer gebruik van Matplotlib. Zo kun je eenvoudig een scatter plot maken met data in een tabel.
Wil je nog veel meer leren over Python en Data Science? Schrijf je dan in voor onze Python training voor data science, onze machine learning cursus, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.
Wil je nog veel meer leren over Python en de mogelijkheden voor data analyse? Schrijf je dan in voor onze Python cursus voor data science, onze machine learning training, of voor onze data science opleiding en leer met vertrouwen te programmeren en analyseren in Python. Nadat je een van onze trainingen hebt gevolgd kun je zelfstandig verder aan de slag. Je kunt ook altijd even contact opnemen als je een vraag hebt.
Download één van onze opleidingsbrochures voor meer informatie
Peter is een ervaren data scientist en python trainer. Na zijn studie aan de Technische Universiteit Delft heeft hij zich altijd bezig gehouden met data en diverse programmeertalen. Peter heeft veel data analyses uitgevoerd en processen geautomatiseerd met Python in productieomgevingen.