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
tags
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!