slogan3

Automatiseer Matplotlib Grafiek Generatie met Dynamische Data

description

Met deze prompt automatiseer je het maken van Matplotlib-grafieken die zich aanpassen aan verschillende datasets en visuele voorkeuren, inclusief interactieve functionaliteit. Dit bespaart tijd, verhoogt de flexibiliteit en maakt je visualisaties dynamischer en gebruiksvriendelijker dan statische grafieken.

prompt

Help me met het automatiseren van het genereren van Matplotlib-grafieken voor de volgende dynamische dataset: <beschrijving van de dataset>. Ik wil dat de grafiek automatisch het meest geschikte type kiest op bas ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een Python-script dat je kunt gebruiken om automatisch grafieken te genereren voor de maandelijkse omzet per productcategorie in 2024. Het script kiest het meest geschikte grafiektype op basis van de data, past de stijl aan (ggplot), en voegt interactieve elementen toe zoals zoom en tooltips met Plotly. ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import plotly.express as px # Voor de ggplot-stijl in matplotlib plt.style.use('ggplot') # Voorbeeld dataset: vervang dit door je eigen data # DataFrame met kolommen: 'Maand', 'Categorie', 'Omzet' # Bijvoorbeeld: # data = pd.read_csv('jouw_data.csv') # Hier maken we een voorbeeld dataset np.random.seed(0) maanden = pd.date_range('2024-01-01', '2024-12-01', freq='MS') categorieën = ['Elektronica', 'Kleding', 'Speelgoed'] data = pd.DataFrame({ 'Maand': np.tile(maanden, len(categorieën)), 'Categorie': np.repeat(categorieën, len(maanden)), 'Omzet': np.random.randint(1000, 5000, size=len(maanden)*len(categorieën)) }) # Functie om automatisch het grafiektype te bepalen def genereer_grafiek(df): # Controleer of de gegevens tijdsserie-achtig zijn if 'Maand' in df.columns and pd.api.types.is_datetime64_any_dtype(df['Maand']): # Groepeer data df_groep = df.groupby(['Maand', 'Categorie'])['Omzet'].sum().reset_index() # Als er meerdere categorieën zijn, maak een lijngrafiek per categorie if df['Categorie'].nunique() > 1: fig = px.line(df_groep, x='Maand', y='Omzet', color='Categorie', title='Maandelijkse omzet per categorie 2024', labels={'Maand': 'Maand', 'Omzet': 'Omzet (€)'}) else: # Eén categorie, lijn of staaf afhankelijk van data if len(df['Maand'].unique()) > 12: # Veel data, staafgrafiek fig = px.bar(df_groep, x='Maand', y='Omzet', title='Maandelijkse omzet 2024', labels={'Maand': 'Maand', 'Omzet': 'Omzet (€)'}) else: # Minder data, lijngrafiek fig = px.line(df_groep, x='Maand', y='Omzet', title='Maandelijkse omzet 2024', labels={'Maand': 'Maand', 'Omzet': 'Omzet (€)'}) return fig else: # Als data niet tijdsserie-achtig is, probeer een histogram of staaf if 'Categorie' in df.columns: df_groep = df.groupby('Categorie')['Omzet'].sum().reset_index() fig = px.bar(df_groep, x='Categorie', y='Omzet', title='Totale omzet per categorie', labels={'Categorie': 'Categorie', 'Omzet': 'Omzet (€)'}) return fig else: # Simpel voorbeeld: staaf van alle data fig = px.bar(df, x=df.columns[0], y=df.columns[1], title='Data visualisatie', labels={df.columns[0]: df.columns[0], df.columns[1]: df.columns[1]}) return fig # Genereer de grafiek fig = genereer_grafiek(data) # Pas de stijl aan aan ggplot (voor plotly is dit al gedaan via de thema's) # Extra styling kan hier toegevoegd worden indien gewenst # Interactieve functies zoals zoom en tooltip zijn standaard in Plotly # Deze worden automatisch toegevoegd # Plot de grafiek fig.show() ``` **Belangrijk:** - Vervang de voorbeeld dataset door je eigen gegevens. - Deze code detecteert automatisch het meest geschikte grafiektype op basis van de data. - Plotly zorgt voor interactieve elementen zoals zoom en tooltips. - Voor matplotlib wordt de stijl ingesteld op ggplot, maar voor volledige interactiviteit is Plotly aan te raden, zoals hierboven. Veel succes met je data-analyse!
provider: deepseek
model: deepseek-chat
Hier is een complete Python-code die voldoet aan uw vereisten: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib import style import matplotlib.dates as mdates from datetime import datetime # Stel ggplot stijl in plt.style.use('ggplot') # Genereer voorbeelddataset (vervang dit met uw eigen data) def genereer_voorbeeld_data(): np.random.seed(42) maanden = pd.date_range('2024-01-01', '2024-12-31', freq='M') categorieën = ['Elektronica', 'Kleding', 'Boeken', 'Huis & Tuin'] data = [] for maand in maanden: for categorie in categorieën: omzet = np.random.randint(1000, 10000) data.append({ 'Maand': maand, 'Categorie': categorie, 'Omzet': omzet }) return pd.DataFrame(data) # Bepaal automatisch het meest geschikte grafiektype def bepaal_grafiektype(df): categorieën = df['Categorie'].nunique() maanden = df['Maand'].nunique() if categorieën <= 4 and maanden <= 12: return 'bar' # Staafdiagram voor beperkt aantal categorieën elif categorieën > 4: return 'line' # Lijndiagram voor veel categorieën else: return 'area' # Stacked area als alternatief # Maak interactieve grafiek def maak_interactieve_grafiek(df, grafiektype): fig, ax = plt.subplots(figsize=(12, 8)) if grafiektype == 'bar': # Groepeer data voor staafdiagram pivot_df = df.pivot_table(values='Omzet', index='Maand', columns='Categorie', aggfunc='sum') breedte = 0.8 / len(pivot_df.columns) for i, (categorie, waarden) in enumerate(pivot_df.items()): posities = np.arange(len(waarden)) + i * breedte bars = ax.bar(posities, waarden, breedte, label=categorie) # Voeg tooltips toe for bar in bars: height = bar.get_height() ax.text(bar.get_x() + bar.get_width()/2., height + 50, f'€{height:,.0f}', ha='center', va='bottom', fontsize=9, alpha=0.7) elif grafiektype == 'line': for categorie in df['Categorie'].unique(): subset = df[df['Categorie'] == categorie] line, = ax.plot(subset['Maand'], subset['Omzet'], marker='o', linewidth=2.5, markersize=6, label=categorie) # Voeg tooltips toe for x, y in zip(subset['Maand'], subset['Omzet']): ax.annotate(f'€{y:,.0f}', (x, y), textcoords="offset points", xytext=(0,10), ha='center', fontsize=9, alpha=0.8) else: # area chart pivot_df = df.pivot_table(values='Omzet', index='Maand', columns='Categorie', aggfunc='sum') ax.stackplot(pivot_df.index, pivot_df.T, labels=pivot_df.columns, alpha=0.8) # Stel opmaak in ax.set_title('Maandelijkse Omzet per Productcategorie 2024', fontsize=16, fontweight='bold', pad=20) ax.set_xlabel('Maand', fontsize=12) ax.set_ylabel('Omzet (€)', fontsize=12) # Formatteer x-as met maandnamen ax.xaxis.set_major_formatter(mdates.DateFormatter('%b')) ax.xaxis.set_major_locator(mdates.MonthLocator()) # Voeg grid en legenda toe ax.grid(True, alpha=0.3) ax.legend(title='Categorieën', bbox_to_anchor=(1.05, 1), loc='upper left') # Formateer y-as met euro symbolen ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: f'€{x:,.0f}')) # Interactieve features plt.subplots_adjust(right=0.85) fig.canvas.toolbar.message = 'Gebruik zoom en pan tools' return fig, ax # Hoofdfunctie def main(): # Laad of genereer data df = genereer_voorbeeld_data() # Bepaal automatisch grafiektype grafiektype = bepaal_grafiektype(df) print(f"Gekozen grafiektype: {grafiektype}") # Maak en toon grafiek fig, ax = maak_interactieve_grafiek(df, grafiektype) plt.xticks(rotation=45) plt.tight_layout() plt.show() # Uitvoeren als script if __name__ == "__main__": main() ``` **Extra interactieve features toevoegen (optioneel):** ```python # Voor volledige interactiviteit met zoom/pan behouden: # Zorg dat je matplotlib in interactive mode gebruikt plt.ion() # Of gebruik Plotly voor advanced interactiviteit (vereist installatie): # pip install plotly ``` **Belangrijke features:** - Automatische grafiektype selectie gebaseerd op data structuur - ggplot stijl thema - Tooltips met omzetwaarden - Zoom en pan functionaliteit (standaard in matplotlib) - Professionele opmaak met euro formatting - Dynamische legenda positioning **Gebruik:** 1. Vervang `genereer_voorbeeld_data()` met uw eigen data loading 2. Run het script 3. Gebruik de toolbar voor zoom/pan functionaliteit 4. Hover over elementen voor tooltips De grafiek past zich automatisch aan op basis van het aantal categorieën en maanden in uw dataset!