Maak interactieve Matplotlib-visualisaties met aangepaste widgets
description
Maakt het mogelijk om data interactief te verkennen door visualisatieparameters in realtime aan te passen, waardoor data-analyse intuïtiever en boeiender wordt. Deze methode gaat verder dan statische grafieken door dynamische controle en maatwerk te bieden, wat helpt bij het ontdekken van inzichten en flexibiliteit in presentatie.
prompt
Help me interactieve Matplotlib-visualisaties te maken met aangepaste widgets zoals schuifregelaars, knoppen of dropdowns om de gegevensweergave en visualisatieparameters te regelen. Mijn datasetbeschrijving: <beschrijf je dataset>. ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Python-code waarmee je interactieve visualisaties kunt maken met Matplotlib en widgets, afgestemd op jouw dataset en stijlvoorkeuren:
```python
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib.widgets import Slider, Button, CheckButtons
# Voorbeeld dataset: vervang dit door je eigen data
# DataFrame met kolommen: 'Datum', 'Regio', 'Product', 'Verkoop'
dates = pd.date_range('2023-01-01', '2023-12-01', freq='MS')
producten = ['Product A', 'Product B', 'Product C']
regio's = ['Regio 1', 'Regio 2', 'Regio 3']
np.random.seed(0)
data = []
for regio in regio's:
for product in producten:
verkoop = np.random.randint(50, 200, size=len(dates))
df_temp = pd.DataFrame({
'Datum': dates,
'Regio': regio,
'Product': product,
'Verkoop': verkoop
})
data.append(df_temp)
df = pd.concat(data)
# Standaardinstellingen
plt.style.use('dark_background')
# Maak figuur en assen
fig, ax = plt.subplots(figsize=(10, 6))
plt.subplots_adjust(bottom=0.3) # ruimte voor widgets
# Initial parameters
start_date = df['Datum'].min()
eind_date = df['Datum'].max()
geselecteerde_producten = producten.copy()
# Filter data op basis van start/einddatum en geselecteerde producten
def filter_data():
mask = (df['Datum'] >= start_slider.val) & (df['Datum'] <= end_slider.val) & (df['Product'].isin(selected_products))
return df[mask]
# Initial plot
def plot_data():
ax.clear()
filtered_df = filter_data()
for regio in regio's:
regio_df = filtered_df[filtered_df['Regio'] == regio]
for product in geselecteerde_producten:
product_df = regio_df[regio_df['Product'] == product]
ax.plot(product_df['Datum'], product_df['Verkoop'], label=f'{regio} - {product}')
ax.set_title('Maandelijkse verkoopcijfers')
ax.set_xlabel('Datum')
ax.set_ylabel('Verkoop')
ax.legend(fontsize='small')
plt.draw()
# Initial plot
plot_data()
# Widgets: Slider voor start- en einddatum
ax_start = plt.axes([0.15, 0.2, 0.3, 0.03], facecolor='black')
ax_end = plt.axes([0.55, 0.2, 0.3, 0.03], facecolor='black')
start_slider = Slider(ax_start, 'Startdatum', mdates.date2num(start_date), mdates.date2num(eind_date), valinit=mdates.date2num(start_date))
end_slider = Slider(ax_end, 'Einddatum', mdates.date2num(start_date), mdates.date2num(eind_date), valinit=mdates.date2num(eind_date))
# Widgets: CheckButtons voor productkeuze
ax_check = plt.axes([0.02, 0.4, 0.15, 0.15], facecolor='black')
check_labels = producten
check = CheckButtons(ax_check, check_labels, [True]*len(producten))
check.label.set(color='white')
check.rectangles.set_facecolor('black')
for label in check.labels:
label.set(color='white')
# Function om checkbox veranderingen te verwerken
def update_products(label):
global geselecteerde_producten
if label in geselecteerde_producten:
geselecteerde_producten.remove(label)
else:
geselecteerde_producten.append(label)
plot_data()
check.on_clicked(update_products)
# Functie voor sliders
import matplotlib.dates as mdates
def update(val):
start_date_num = start_slider.val
eind_date_num = end_slider.val
if start_date_num > eind_date_num:
# Zorg dat start niet na eind ligt
start_slider.set_val(eind_date_num)
start_date_num = eind_date_num
plot_data()
start_slider.on_changed(update)
end_slider.on_changed(update)
# Style widgets (witte schuifregelaars en knoppen)
for slider in [start_slider, end_slider]:
slider.poly.set_facecolor('white')
slider.handle.set_facecolor('white')
slider.handle.set_edgecolor('white')
slider.vline.set_color('white')
plt.show()
```
**Uitleg:**
- Het gebruikt een donkere achtergrond (`plt.style.use('dark_background')`).
- Er zijn sliders voor start- en einddatum, die de datumbereik filteren.
- Er is een checkbox-groep om producten te selecteren of deactiveer.
- Alle widgets zijn gestyled met witte elementen om goed zichtbaar te zijn op de donkere achtergrond.
- De plot wordt automatisch bijgewerkt bij wijzigingen.
**Aanpassingen:**
- Vervang de voorbeelddataset door jouw gegevens.
- Pas de layout en styling aan naar wens.
- Voeg bijvoorbeeld dropdowns toe met `matplotlib.widgets.Dropdown` (indien ondersteund) of gebruik andere bibliotheken zoals `ipywidgets` voor Jupyter-notebooks voor meer geavanceerde interactiviteit.
Als je verdere hulp nodig hebt bij het aanpassen aan jouw dataset of stijl, laat het gerust weten!
provider: deepseek
model: deepseek-chat
Hier is een complete Python-oplossing met interactieve Matplotlib-widgets voor je verkoopdata:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
from datetime import datetime, timedelta
import matplotlib.dates as mdates
# Stel donker thema in
plt.style.use('dark_background')
# Genereer voorbeelddata (vervang met je eigen dataset)
def generate_sample_data():
dates = pd.date_range(start='2023-01-01', end='2024-12-31', freq='M')
producten = ['Elektronica', 'Kleding', 'Voeding', 'Huisraad']
regios = ['Noord', 'Zuid', 'Oost', 'West']
data = []
for date in dates:
for product in producten:
for regio in regios:
verkoop = np.random.randint(100, 1000)
data.append([date, product, regio, verkoop])
return pd.DataFrame(data, columns=['Datum', 'Product', 'Regio', 'Verkoop'])
# Maak dataset
df = generate_sample_data()
# Creëer figure en axes
fig, ax = plt.subplots(figsize=(14, 10))
plt.subplots_adjust(left=0.1, bottom=0.4)
# Initialiseer plot
def update_plot(start_date, end_date, selected_product, selected_regio):
ax.clear()
# Filter data op basis van selecties
mask = ((df['Datum'] >= start_date) &
(df['Datum'] <= end_date) &
(df['Product'] == selected_product) &
(df['Regio'] == selected_regio))
filtered_df = df[mask].groupby('Datum')['Verkoop'].sum().reset_index()
# Plot data
ax.plot(filtered_df['Datum'], filtered_df['Verkoop'],
'o-', linewidth=2, markersize=6, color='cyan')
# Styling
ax.set_title(f'Verkoopcijfers - {selected_product} in {selected_regio}',
fontsize=16, fontweight='bold', color='white')
ax.set_xlabel('Datum', fontsize=12, color='white')
ax.set_ylabel('Verkoopvolume', fontsize=12, color='white')
ax.grid(True, alpha=0.3)
ax.tick_params(colors='white')
# Formatteer x-as voor datums
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=2))
fig.autofmt_xdate()
# Initialiseer met standaardwaarden
start_date = df['Datum'].min()
end_date = df['Datum'].max()
selected_product = 'Elektronica'
selected_regio = 'Noord'
# Maak slider voor startdatum
ax_start = plt.axes([0.1, 0.25, 0.8, 0.03], facecolor='#2E2E2E')
slider_start = Slider(ax_start, 'Start Datum',
df['Datum'].min().timestamp(),
df['Datum'].max().timestamp(),
valinit=start_date.timestamp(),
valfmt='%1.0f',
color='white')
# Maak slider voor einddatum
ax_end = plt.axes([0.1, 0.20, 0.8, 0.03], facecolor='#2E2E2E')
slider_end = Slider(ax_end, 'Eind Datum',
df['Datum'].min().timestamp(),
df['Datum'].max().timestamp(),
valinit=end_date.timestamp(),
valfmt='%1.0f',
color='white')
# Maak radio buttons voor productselectie
ax_product = plt.axes([0.1, 0.10, 0.2, 0.08], facecolor='#2E2E2E')
radio_product = RadioButtons(ax_product, df['Product'].unique(),
active=0,
activecolor='cyan')
# Maak radio buttons regioselectie
ax_regio = plt.axes([0.4, 0.10, 0.2, 0.08], facecolor='#2E2E2E')
radio_regio = RadioButtons(ax_regio, df['Regio'].unique(),
active=0,
activecolor='cyan')
# Reset knop
ax_reset = plt.axes([0.7, 0.10, 0.1, 0.04])
button_reset = Button(ax_reset, 'Reset', color='#2E2E2E', hovercolor='#4F4F4F')
# Update functies
def update(val):
start_date = datetime.fromtimestamp(slider_start.val)
end_date = datetime.fromtimestamp(slider_end.val)
update_plot(start_date, end_date, selected_product, selected_regio)
fig.canvas.draw_idle()
def update_product(label):
global selected_product
selected_product = label
update(None)
def update_regio(label):
global selected_regio
selected_regio = label
update(None)
def reset(event):
slider_start.reset()
slider_end.reset()
radio_product.set_active(0)
radio_regio.set_active(0)
# Connect events
slider_start.on_changed(update)
slider_end.on_changed(update)
radio_product.on_clicked(update_product)
radio_regio.on_clicked(update_regio)
button_reset.on_clicked(reset)
# Initialiseer plot
update_plot(start_date, end_date, selected_product, selected_regio)
# Styling voor widgets
for text in radio_product.labels + radio_regio.labels:
text.set_color('white')
text.set_fontsize(10)
for slider in [slider_start, slider_end]:
slider.label.set_color('white')
slider.valtext.set_color('white')
plt.show()
```
**Belangrijke aanpassingen voor je eigen data:**
1. **Vervang `generate_sample_data()`** met je eigen data-inlading:
```python
# Voorbeeld met echte data
df = pd.read_csv('jouw_verkoopdata.csv')
df['Datum'] = pd.to_datetime(df['Datum'])
```
2. **Extra styling opties** die je kunt toevoegen:
```python
# Donker thema optimalisaties
fig.patch.set_facecolor('#1E1E1E')
ax.set_facecolor('#2E2E2E')
# Custom kleuren voor lijnen
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#F9C80E']
```
**Functionaliteiten:**
- 📅 Datumrange selectie met schuifregelaars
- 🏷️ Productcategorie filter met radio buttons
- 🌍 Regioselectie met radio buttons
- 🔄 Reset knop naar standaardinstellingen
- 🎨 Donker thema met witte widgets
- 📊 Dynamische updates zonder pagina refresh
Deze code geeft je een volledig interactieve dashboard voor je verkoopdata-analyse!