Genereer Matplotlib-visualisaties met aangepaste statistische annotaties
description
Stelt gebruikers in staat om hun datavisualisaties te verrijken met betekenisvolle statistische context, wat de interpretatie en communicatie van inzichten verbetert. Deze prompt gaat verder dan basisplots door statistische annotaties op maat van de gebruiker en de dataset te integreren.
prompt
Help me een Matplotlib-visualisatie te maken voor mijn dataset: <beschrijf je dataset>. Ik wil dat het grafiektype <kies grafiektype> is en dat er aangepaste statistische annotaties worden toegevoegd zoals gemiddelde, med ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van Python-code om een histogram te maken van maandelijkse verkoopgegevens voor verschillende productcategorieën met Matplotlib. De code voegt statistische annotaties toe zoals gemiddelde, mediaan, en betrouwbaarheidsintervallen, inclusief opties voor annotatiestijl en -positie:
```python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
# Voorbeelddataset: vervang dit door je eigen dataset
# Stel dat je data hebt als een DataFrame met kolommen 'Categorie' en 'Verkoop'
# Bijvoorbeeld:
# data = pd.read_csv('verkoopgegevens.csv')
# Simulatie van gegevens
np.random.seed(0)
data = pd.DataFrame({
'Categorie': np.random.choice(['A', 'B', 'C'], size=300),
'Verkoop': np.random.normal(100, 20, size=300)
})
# Selecteer een categorie of alle categorieën
categorie = 'A' # Of gebruik None voor alle
if categorie:
dataset = data[data['Categorie'] == categorie]['Verkoop']
else:
dataset = data['Verkoop']
# Maak histogram
plt.figure(figsize=(10,6))
n, bins, patches = plt.hist(dataset, bins=20, alpha=0.7, color='skyblue', edgecolor='black')
# Bereken statistieken
mean = np.mean(dataset)
median = np.median(dataset)
conf_int = stats.t.interval(
alpha=0.95,
df=len(dataset)-1,
loc=mean,
scale=stats.sem(dataset)
)
# Voeg gemiddelde toe met stippellijn en label
plt.axvline(mean, color='red', linestyle='--', linewidth=2, label=f'Mean: {mean:.2f}')
plt.text(mean, plt.ylim()[1]*0.9, f'Mean: {mean:.2f}', color='red', rotation=0, ha='center')
# Voeg mediaan toe met stippellijn en label
plt.axvline(median, color='green', linestyle='--', linewidth=2, label=f'Median: {median:.2f}')
plt.text(median, plt.ylim()[1]*0.8, f'Median: {median:.2f}', color='green', rotation=0, ha='center')
# Voeg betrouwbaarheidsinterval toe
plt.fill_betweenx(
y=[0, plt.ylim()[1]],
x1=conf_int[0],
x2=conf_int[1],
color='orange',
alpha=0.2,
label='95% betrouwbaarheidsinterval'
)
# Optioneel: regressielijn (voor lineaire trend)
# Als je meerdere data points hebt en een regressie wilt
# Hier niet direct van toepassing op histogram, maar kan worden toegevoegd bij scatterplots
# Voeg legenda toe
plt.legend()
# Titels en labels
plt.title(f'Maandelijkse Verkoopgegevens - Categorie {categorie}')
plt.xlabel('Verkoop')
plt.ylabel('Frequentie')
plt.show()
```
**Wat deze code doet:**
- Laadt of simuleert dataset met verkoop per categorie.
- Selecteert een categorie om te visualiseren.
- Maakt een histogram van de verkoopgegevens.
- Berekent en toont de gemiddelde en mediaan met stippellijnen en tekstlabels.
- Voegt een 95% betrouwbaarheidsinterval toe als een gekleurd gebied.
- Laat zien hoe je de annotaties duidelijk en visueel onderscheidend maakt.
**Aanpassingen:**
- Pas `categorie` aan of verwijder de filter om alle data te tonen.
- Voeg regressielijnen toe bij geschikte plottypes (bijvoorbeeld scatterplots).
- Pas kleuren, stijlen en annotatieposities aan naar wens voor betere visualisatie.
Heb je specifieke wensen of data, dan kan ik de code verder aanpassen!
provider: deepseek
model: deepseek-chat
Hier is een Python-code voor een histogram met statistische annotaties voor uw maandelijkse verkoopgegevens:
```python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
# Voorbeeld dataset (vervang dit met uw eigen data)
data = {
'maand': ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
'elektronica': [12000, 15000, 13000, 14000, 16000, 18000,
19000, 17000, 15500, 16500, 17500, 20000],
'kleding': [8000, 9000, 8500, 9500, 11000, 12000,
13000, 11500, 10500, 10000, 9500, 12500],
'huisraad': [5000, 6000, 5500, 6500, 7000, 7500,
8000, 7200, 6800, 7100, 6900, 8200]
}
df = pd.DataFrame(data)
# Selecteer een categorie om te visualiseren
categorie = 'elektronica'
verkoop_data = df[categorie]
# Bereken statistieken
gemiddelde = np.mean(verkoop_data)
mediaan = np.median(verkoop_data)
std_dev = np.std(verkoop_data)
betrouwbaarheids_interval = stats.norm.interval(0.95, loc=gemiddelde, scale=std_dev/np.sqrt(len(verkoop_data)))
# Maak de visualisatie
plt.figure(figsize=(12, 8))
ax = plt.gca()
# Histogram met aangepaste stijl
n, bins, patches = plt.hist(verkoop_data, bins=6, alpha=0.7, color='skyblue',
edgecolor='black', linewidth=1.2, density=False)
# Voeg gemiddelde lijn toe
plt.axvline(gemiddelde, color='red', linestyle='--', linewidth=2,
label=f'Gemiddelde: €{gemiddelde:,.0f}')
# Voeg mediaan lijn toe
plt.axvline(mediaan, color='green', linestyle='--', linewidth=2,
label=f'Mediaan: €{mediaan:,.0f}')
# Betrouwbaarheidsinterval gebied
plt.axvspan(betrouwbaarheids_interval[0], betrouwbaarheids_interval[1],
alpha=0.2, color='orange', label='95% Betrouwbaarheidsinterval')
# Regressielijn (lineaire trend)
x = range(len(verkoop_data))
slope, intercept, r_value, p_value, std_err = stats.linregress(x, verkoop_data)
regressie_lijn = intercept + slope * x
plt.plot(x, regressie_lijn, 'purple', linewidth=2,
label=f'Trendlijn (R²: {r_value**2:.3f})')
# Annotaties en labels
plt.xlabel('Verkoopbedrag (€)', fontsize=12, fontweight='bold')
plt.ylabel('Frequentie', fontsize=12, fontweight='bold')
plt.title(f'Maandelijkse Verkoop - {categorie.capitalize()}\n',
fontsize=14, fontweight='bold')
# Statistische annotaties toevoegen
annotatie_tekst = f'''Statistische Samenvatting:
Gemiddelde: €{gemiddelde:,.0f}
Mediaan: €{mediaan:,.0f}
Standaarddeviatie: €{std_dev:,.0f}
Betrouwbaarheidsinterval: [€{betrouwbaarheids_interval[0]:,.0f}, €{betrouwbaarheids_interval[1]:,.0f}]
Steekproefgrootte: {len(verkoop_data)} maanden'''
plt.annotate(annotatie_tekst, xy=(0.02, 0.98), xycoords='axes fraction',
bbox=dict(boxstyle="round,pad=0.5", facecolor="white", alpha=0.8),
fontsize=10, verticalalignment='top')
# Legenda
plt.legend(loc='upper right', frameon=True, fancybox=True, shadow=True)
# Grid voor betere leesbaarheid
plt.grid(alpha=0.3, linestyle='--')
# Formatteer y-as voor euro bedragen
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: f'€{x:,.0f}'))
plt.tight_layout()
plt.show()
# Optioneel: print statistieken in console
print(f"Statistieken voor {categorie}:")
print(f"Gemiddelde: €{gemiddelde:,.2f}")
print(f"Mediaan: €{mediaan:,.2f}")
print(f"Standaarddeviatie: €{std_dev:,.2f}")
print(f"95% Betrouwbaarheidsinterval: [€{betrouwbaarheids_interval[0]:,.2f}, €{betrouwbaarheids_interval[1]:,.2f}]")
```
**Aanpasopties voor annotatiestijlen en posities:**
1. **Annotatiepositie**: Pas `xy=(0.02, 0.98)` aan om de tekstbox te verplaatsen
2. **Lijnstijlen**: Verander `linestyle` ('-', '--', '-.', ':')
3. **Kleuren**: Wijzig `color` parameters voor verschillende categorieën
4. **Transparantie**: Pas `alpha` waarden aan (0-1)
5. **Fontgrootte**: Verander `fontsize` in de annotaties
6. **Legendapositie**: Gebruik `loc` parameter ('upper left', 'lower right', etc.)
**Voor meerdere categorieën**: Maak een subplot voor elke categorie of gebruik een gestapeld histogram met verschillende kleuren per categorie.