Maak Matplotlib Visualisaties met Aanpasbare Interactieve Legenda's
description
Maakt het mogelijk voor gebruikers om complexere visualisaties interactief te verkennen door plot-elementen aan of uit te zetten, wat de duidelijkheid en inzichten verbetert. Deze prompt helpt bij het creëren van meer aantrekkelijke en gebruiksvriendelijke grafieken in vergelijking met statische legenda's, waardoor dynamische focus op datadelen mogelijk is.
prompt
Help me een Matplotlib-visualisatie te maken voor mijn dataset: <beschrijf je dataset>. Ik wil een interactieve legenda toevoegen waarmee gebruikers de zichtbaarheid van verschillende plot-elementen zoals lijnen, b ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Python-code die een interactieve legenda toevoegt aan je tijdreeksgegevens van twee sensormetingen. De code gebruikt Matplotlib en maakt gebruik van de `CheckButtons` widget voor de interactie. Je kunt de positie van de legenda, de lettergrootte en kleuren aanpassen via de parameters.
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
# Voorbeeldgegevens genereren
np.random.seed(0)
tijden = np.linspace(0, 10, 100)
sensor1 = np.sin(tijden) + 0.1 * np.random.randn(100)
sensor2 = np.cos(tijden) + 0.1 * np.random.randn(100)
# Plot maken
fig, ax = plt.subplots()
line1, = ax.plot(tijden, sensor1, label='Sensor 1', color='blue')
line2, = ax.plot(tijden, sensor2, label='Sensor 2', color='orange')
# Aanpassing van layout om ruimte te maken voor CheckButtons
plt.subplots_adjust(left=0.3)
# Positioneren van de CheckButtons
rax = plt.axes([0.05, 0.4, 0.2, 0.15]) # [links, onder, breedte, hoogte]
labels = ['Sensor 1', 'Sensor 2']
visibility = [line1.get_visible(), line2.get_visible()]
check = CheckButtons(rax, labels, visibility)
# Functie voor interactie
def func(label):
if label == 'Sensor 1':
line1.set_visible(not line1.get_visible())
elif label == 'Sensor 2':
line2.set_visible(not line2.get_visible())
plt.draw()
check.on_clicked(func)
# Aanpassen legenda
leg = ax.legend(loc='upper right', fontsize=10) # Pas fontsize en locatie aan
plt.show()
```
**Aanpassingen mogelijk:**
- **Legenda positie:** wijzig `loc='upper right'` naar andere opties zoals `'upper left'`, `'lower right'`, `'center'`, etc.
- **Lettergrootte:** wijzig `fontsize=10` naar gewenste grootte.
- **Kleuren:** pas de `color` parameter bij `ax.plot()` aan.
Met deze opzet kunnen gebruikers via de checkbox de zichtbaarheid van de sensormetingen aan- en uitzetten, waardoor de visualisatie interactiever wordt.
provider: deepseek
model: deepseek-chat
Hier is een complete Python-code voor een interactieve Matplotlib-plot met tijdreeksgegevens en een aanpasbare legenda:
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
# Genereer voorbeeld tijdreeksgegevens (100 tijdstippen)
tijd = np.linspace(0, 10, 100)
sensor1 = np.sin(tijd) + np.random.normal(0, 0.1, 100) # Sensor 1 met ruis
sensor2 = np.cos(tijd) + np.random.normal(0, 0.1, 100) # Sensor 2 met ruis
# Maak de figuur en subplot
fig, ax = plt.subplots(figsize=(12, 6))
plt.subplots_adjust(left=0.1, right=0.75) # Ruimte maken voor legenda
# Plot de sensorgegevens
lijn1, = ax.plot(tijd, sensor1, 'b-', linewidth=2, label='Sensor 1')
lijn2, = ax.plot(tijd, sensor2, 'r-', linewidth=2, label='Sensor 2')
scatter1 = ax.scatter(tijd[::5], sensor1[::5], color='blue', alpha=0.6, label='Sensor 1 punten')
scatter2 = ax.scatter(tijd[::5], sensor2[::5], color='red', alpha=0.6, label='Sensor 2 punten')
# Configureer de plot
ax.set_xlabel('Tijd', fontsize=12)
ax.set_ylabel('Sensorwaarden', fontsize=12)
ax.set_title('Tijdreeks van Sensormetingen', fontsize=14)
ax.grid(True, alpha=0.3)
# Maak een legenda met aanpasbare eigenschappen
legenda = ax.legend(
loc='upper left', # Plaatsing: 'upper left', 'upper right', 'lower left', 'lower right'
bbox_to_anchor=(1.05, 1), # Positie buiten de plot
fontsize=11, # Lettergrootte
frameon=True, # Frame rond legenda
fancybox=True, # Afgeronde hoeken
shadow=True # Schaduw effect
)
# Maak checkbuttons voor interactieve legenda
rax = plt.axes([0.82, 0.4, 0.15, 0.15]) # Positie van checkbuttons
labels = [lijn1.get_label(), lijn2.get_label(), scatter1.get_label(), scatter2.get_label()]
visibility = [lijn1.get_visible(), lijn2.get_visible(), scatter1.get_visible(), scatter2.get_visible()]
check = CheckButtons(rax, labels, visibility)
# Functie om zichtbaarheid aan te passen
def update_visibility(label):
if label == 'Sensor 1':
lijn1.set_visible(not lijn1.get_visible())
elif label == 'Sensor 2':
lijn2.set_visible(not lijn2.get_visible())
elif label == 'Sensor 1 punten':
scatter1.set_visible(not scatter1.get_visible())
elif label == 'Sensor 2 punten':
scatter2.set_visible(not scatter2.get_visible())
plt.draw()
# Koppel de update functie aan de checkbuttons
check.on_clicked(update_visibility)
# Toon de plot
plt.tight_layout()
plt.show()
```
**Aanpasbare opties:**
1. **Legenda plaatsing**: Pas `loc` en `bbox_to_anchor` aan:
- Binnen plot: `loc='upper right'` (zonder bbox_to_anchor)
- Buiten plot: `bbox_to_anchor=(x, y)` waar x,y de positie bepaalt
2. **Lettergrootte**: Verander `fontsize` in de legend() functie
3. **Kleuren**: Pas de kleuren aan in de plot commando's:
- Lijnen: `'b-'` (blauw), `'r-'` (rood)
- Scatterpunten: `color='blue'`, `color='red'`
4. **Stijl opties**:
- `frameon`: Frame wel/niet tonen
- `fancybox`: Afgeronde hoeken
- `shadow`: Schaduw effect
**Interactieve functies:**
- Klik op de checkboxes om lijnen/punten aan/uit te zetten
- De legenda blijft altijd zichtbaar voor referentie
Je kunt de kleuren, stijlen en posities eenvoudig aanpassen naar je voorkeuren!