slogan3

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

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!