Maak Matplotlib Visualisaties met Dynamische Gegevensfiltering
description
Maakt het mogelijk om gericht en interactief specifieke delen van je data te bekijken, wat inzicht en analyse-efficiëntie verbetert. In tegenstelling tot statische grafieken helpt deze prompt bij het creëren van visualisaties die reageren op gebruikersfilters, waardoor het verkennen van data flexibeler en gebruiksvriendelijker wordt.
prompt
try_prompt
Help me een Matplotlib visualisatie te maken met dynamische gegevensfiltering. Mijn dataset beschrijving: <beschrijf je dataset>. Ik wil data kunnen filteren op criteria zoals <filtercriteria> en dat de grafiek hierop wordt aange ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Python-code die een interactieve Matplotlib-visualisatie maakt met dynamische filters voor regio, productcategorie en datumbereik. We gebruiken `ipywidgets` voor de filterbedieningselementen en `matplotlib` voor de grafiek. De legenda wordt bovenaan geplaatst en de kleuren worden blauw en groen.
```python
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import ipywidgets as widgets
from IPython.display import display
# Voorbeeld dataset
np.random.seed(0)
dates = pd.date_range('2023-01-01', '2023-12-31', freq='M')
regio's = ['Noord', 'Zuid', 'Oost', 'West']
categorieën = ['Elektronica', 'Kleding', 'Speelgoed']
data = {
'Datum': np.tile(dates, len(regio's) * len(categorieën)),
'Regio': np.repeat(regio's, len(dates) * len(categorieën)),
'Categorie': np.tile(np.repeat(categorieën, len(dates)), len(regio's)),
'Verkoop': np.random.randint(100, 500, size=len(dates)*len(regio's)*len(categorieën))
}
df = pd.DataFrame(data)
# Functie om grafiek te plotten op basis van filters
def plot_data(regio_filter, categorie_filter, start_date, end_date):
plt.clf()
# Filter data
filtered_df = df[
(df['Regio'].isin(regio_filter)) &
(df['Categorie'].isin(categorie_filter)) &
(df['Datum'] >= start_date) &
(df['Datum'] <= end_date)
]
# Groeperen op datum en categorie voor plot
grouped = filtered_df.groupby(['Datum', 'Categorie'])['Verkoop'].sum().reset_index()
# Plot elke categorie met een eigen kleur
fig, ax = plt.subplots(figsize=(10, 6))
kleuren = {'Elektronica': 'blue', 'Kleding': 'green', 'Speelgoed': 'orange'}
for cat in categorieën:
data_cat = grouped[grouped['Categorie'] == cat]
ax.plot(data_cat['Datum'], data_cat['Verkoop'], label=cat, color=kleuren.get(cat, 'gray'))
ax.set_title('Maandelijkse Verkoop')
ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=3)
ax.set_xlabel('Datum')
ax.set_ylabel('Verkoop')
plt.tight_layout()
plt.show()
# Widgets voor filters
regio_select = widgets.SelectMultiple(
options=regio's,
value=regio's,
description='Regio\'s',
style={'description_width': 'initial'}
)
categorie_select = widgets.SelectMultiple(
options=categorieën,
value=categorieën,
description='Categorieën',
style={'description_width': 'initial'}
)
start_date_picker = widgets.DatePicker(
description='Startdatum',
value=df['Datum'].min()
)
eind_date_picker = widgets.DatePicker(
description='Einddatum',
value=df['Datum'].max()
)
# Functie om te reageren op widget-veranderingen
def update_plot(*args):
plot_data(
list(regio_select.value),
list(categorie_select.value),
start_date_picker.value,
eind_date_picker.value
)
# Link widgets aan update functie
regio_select.observe(update_plot, 'value')
categorie_select.observe(update_plot, 'value')
start_date_picker.observe(update_plot, 'value')
eind_date_picker.observe(update_plot, 'value')
# Tonen van widgets en initiale plot
filter_box = widgets.VBox([regio_select, categorie_select, start_date_picker, eind_date_picker])
display(filter_box)
# Initiale plot
plot_data(regio's, categorieën, df['Datum'].min(), df['Datum'].max())
```
**Wat doet deze code?**
- Maakt een voorbeeld dataset met maandelijkse verkoopgegevens.
- Biedt keuzelijsten voor regio's en productcategorieën, en datumbereik selectors.
- Bij elke verandering in de filters wordt de grafiek automatisch bijgewerkt.
- De grafiek toont de verkoop per categorie, met kleuren blauw en groen zoals gevraagd.
- De legenda staat bovenaan de grafiek.
**Voor gebruik:**
- Deze code werkt in een Jupyter Notebook. Voor andere omgevingen kan het nodig zijn de widgets anders te integreren.
- Pas de dataset aan naar je eigen gegevens voor een realistische visualisatie.
provider: deepseek
model: deepseek-chat
Hier is een Python-code met Matplotlib en interactieve widgets voor dynamische filtering van je verkoopgegevens:
```python
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons, TextBox
import numpy as np
# Voorbeeld dataset (vervang met je eigen data)
data = {
'Maand': ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'] * 3,
'Regio': ['Noord']*12 + ['Zuid']*12 + ['Oost']*12,
'Categorie': ['Elektronica']*6 + ['Kleding']*6 + ['Elektronica']*6 + ['Kleding']*6 + ['Elektronica']*6 + ['Kleding']*6,
'Verkoop': np.random.randint(100, 1000, 36)
}
df = pd.DataFrame(data)
# Stijl instellingen
plt.style.use('default')
kleuren = ['#1f77b4', '#2ca02c'] # Blauw en groen
# Figuur en subplots aanmaken
fig, ax = plt.subplots(figsize=(12, 8))
plt.subplots_adjust(left=0.1, right=0.75, top=0.9, bottom=0.2)
# Filter elementen
ax_regio = plt.axes([0.1, 0.05, 0.15, 0.1])
ax_categorie = plt.axes([0.3, 0.05, 0.15, 0.1])
ax_maand = plt.axes([0.5, 0.05, 0.15, 0.1])
# Dropdowns/input velden
regio_filter = TextBox(ax_regio, 'Regio:', initial='Alle')
categorie_filter = TextBox(ax_categorie, 'Categorie:', initial='Alle')
maand_filter = TextBox(ax_maand, 'Maand:', initial='Alle')
def update_plot(val):
"""Update de grafiek gebaseerd op filter criteria"""
ax.clear()
# Filter data
filtered_df = df.copy()
if regio_filter.text != 'Alle':
filtered_df = filtered_df[filtered_df['Regio'] == regio_filter.text]
if categorie_filter.text != 'Alle':
filtered_df = filtered_df[filtered_df['Categorie'] == categorie_filter.text]
if maand_filter.text != 'Alle':
filtered_df = filtered_df[filtered_df['Maand'] == maand_filter.text]
# Groepeer en plot data
if not filtered_df.empty:
grouped = filtered_df.groupby(['Regio', 'Categorie', 'Maand'])['Verkoop'].sum().unstack().T
for i, (categorie, values) in enumerate(grouped.items()):
ax.plot(grouped.index, values,
color=kleuren[i % len(kleuren)],
marker='o',
linewidth=2,
label=f'{categorie[0]} - {categorie[1]}')
# Stijl en opmaak
ax.set_title('Maandelijkse Verkoopcijfers', fontsize=14, fontweight='bold')
ax.set_xlabel('Maand', fontsize=12)
ax.set_ylabel('Verkoopbedrag', fontsize=12)
ax.grid(True, alpha=0.3)
ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15), ncol=3)
# Rotatie van x-labels voor betere leesbaarheid
plt.setp(ax.get_xticklabels(), rotation=45)
plt.draw()
# Event handlers
regio_filter.on_submit(update_plot)
categorie_filter.on_submit(update_plot)
maand_filter.on_submit(update_plot)
# Initial plot
update_plot(None)
plt.show()
```
**Gebruiksaanwijzing:**
1. Voer filterwaarden in de tekstvelden (bijv. "Noord" voor Regio, "Elektronica" voor Categorie)
2. Gebruik "Alle" om alle waarden te tonen
3. De grafiek update automatisch bij het invoeren van filters
**Aanpassingsmogelijkheden:**
- Vervang de voorbeelddata met je eigen DataFrame
- Pas kleuren aan in de `kleuren` lijst
- Wijig de positie en grootte van filterelementen door de coördinaten in `plt.axes()` aan te passen
- Voeg extra filters toe door vergelijkbare TextBox widgets te creëren
**Benodigde packages:**
```bash
pip install pandas matplotlib numpy
```
De code gebruikt blauwe en groene kleuren zoals gevraagd en plaatst de legenda bovenaan met meerdere kolommen voor betere leesbaarheid.

