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
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 ...
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 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.