Maak Matplotlib Visualisaties met Aangepaste Data Labels en Annotatiestijlen
description
Maakt het mogelijk om belangrijke datapunten en bereiken te benadrukken met gepersonaliseerde labels en annotaties, waardoor je visualisaties informatiever en boeiender worden. Deze prompt biedt meer controle over het uiterlijk en de plaatsing van annotaties in vergelijking met standaard labelmethodes, wat de communicatie van inzichten verbetert.
prompt
try_prompt
Help me een Matplotlib visualisatie te maken met mijn dataset: <beschrijving van je dataset>. Ik wil aangepaste datalabels en annotaties toevoegen die specifieke punten of bereiken benadru ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
no_answer_for_language
error: Generation failed [openai] prompt_id=3645 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3645 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3645 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3645 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3645 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3645 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3645 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Hier is een complete Python-implementatie met aangepaste annotaties voor temperatuurpieken:
```python
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime, timedelta
# Voorbeeld dataset: uurtemperaturen over een week (168 uren)
np.random.seed(42)
dagen = 7
uren = 24 * dagen
basis_temp = 15
temperatuur = basis_temp + np.random.normal(0, 3, uren) + np.sin(np.linspace(0, 7*np.pi, uren)) * 5
# Tijdsassen creëren
start_datum = datetime(2024, 1, 1, 0, 0)
tijdstippen = [start_datum + timedelta(hours=i) for i in range(uren)]
# Plot opzetten
fig, ax = plt.subplots(figsize=(15, 8))
lijn = ax.plot(tijdstippen, temperatuur, 'b-', linewidth=2, alpha=0.7, label='Temperatuur')
# Achtergrond opmaak
ax.set_facecolor('#f8f9fa')
ax.grid(True, alpha=0.3)
ax.set_xlabel('Datum en Tijd', fontsize=12, fontweight='bold')
ax.set_ylabel('Temperatuur (°C)', fontsize=12, fontweight='bold')
ax.set_title('Uurtemperatuurmetingen over een Week', fontsize=16, fontweight='bold', pad=20)
# Pieken identificeren (temperaturen boven 20°C)
pieken_indices = np.where(temperatuur > 20)[0]
pieken_temperaturen = temperatuur[pieken_indices]
pieken_tijden = [tijdstippen[i] for i in pieken_indices]
# Aangepaste annotaties voor pieken toevoegen
for i, (tijd, temp) in enumerate(zip(pieken_tijden, pieken_temperaturen)):
# Verschillende kleuren voor verschillende piekniveaus
if temp > 25:
kleur = '#ff6b6b' # Rood voor zeer hoge pieken
elif temp > 22:
kleur = '#ffa726' # Oranje voor hoge pieken
else:
kleur = '#4caf50' # Groen voor normale pieken
ax.annotate(f'{temp:.1f}°C',
xy=(tijd, temp),
xytext=(20, 40), # Positie van de tekst relatief tot het punt
textcoords='offset points',
fontsize=14, # Grote letters
fontweight='bold',
color=kleur,
ha='center',
va='bottom',
bbox=dict(boxstyle='round,pad=0.5', facecolor='white', alpha=0.9, edgecolor=kleur),
arrowprops=dict(arrowstyle='->',
connectionstyle='arc3,rad=0.3',
color=kleur,
lw=2))
# Specifieke belangrijke punten benadrukken
# Laagste temperatuur
laagste_idx = np.argmin(temperatuur)
ax.annotate('Laagste: {:.1f}°C'.format(temperatuur[laagste_idx]),
xy=(tijdstippen[laagste_idx], temperatuur[laagste_idx]),
xytext=(-50, -60),
textcoords='offset points',
fontsize=11,
color='blue',
bbox=dict(boxstyle='round,pad=0.5', facecolor='lightblue', alpha=0.8),
arrowprops=dict(arrowstyle='->', color='blue'))
# Gemiddelde temperatuurlijn
gemiddelde = np.mean(temperatuur)
ax.axhline(y=gemiddelde, color='red', linestyle='--', alpha=0.7, label=f'Gemiddeld: {gemiddelde:.1f}°C')
ax.annotate(f'Weekgemiddelde\n{gemiddelde:.1f}°C',
xy=(tijdstippen[100], gemiddelde),
xytext=(20, 0),
textcoords='offset points',
fontsize=10,
color='red',
backgroundcolor='white')
# X-as formatteren voor betere leesbaarheid
plt.xticks(rotation=45)
fig.autofmt_xdate()
# Legenda toevoegen
ax.legend(loc='upper right', framealpha=0.9)
# Layout optimaliseren
plt.tight_layout()
# Toon de plot
plt.show()
# Optioneel: opslaan als bestand
# plt.savefig('temperatuur_visualisatie.png', dpi=300, bbox_inches='tight')
```
**Belangrijke kenmerken van deze implementatie:**
1. **Piekannotaties**: Gekleurde pijlen met grote, vetgedrukte tekst die naar temperatuurpieken wijzen
2. **Kleurgradatie**: Verschillende kleuren afhankelijk van de piekhoogte
3. **Aangepaste stijlopties**:
- Fontsize: 14-16 voor pieken
- Kleuren: groen/oranje/rood op basis van temperatuur
- Pijlstijl: gebogen pijlen met aangepaste opmaak
4. **Extra annotaties**: Laagste temperatuur en gemiddelde lijn
5. **Professionele opmaak**: Grid, achtergrondkleur, legenda en responsieve layout
**Aanpasopties:**
- Verander `fontsize` voor tekstgrootte
- Pas `color` aan voor verschillende kleuren
- Wijzig `xytext` waarden voor positie-aanpassingen
- Verander `arrowprops` voor pijlstijlen
De code is modulair opgezet zodat je eenvoudig je eigen dataset kunt invoeren door de `temperatuur` array en `tijdstippen` lijst te vervangen.

