Integreer Seaborn Visualisaties met Geavanceerde Matplotlib Aanpassingen
description
Met deze prompt kan ik unieke visualisaties maken door Seaborn te combineren met geavanceerde Matplotlib functies, wat me helpt mijn data effectiever en creatiever te presenteren. Het lost beperkingen van standaard Seaborn op en geeft meer controle over grafiekdetails.
prompt
Help me Seaborn visualisaties te creëren die geavanceerde Matplotlib aanpassingen bevatten voor unieke grafiekeffecten. Beschrijving van mijn dataset: <geef een korte beschrijving van je dataset>. Welke soorten Matplotlib aanpassingen wil ik integreren: <bijvoorbeeld aangepaste annotaties, meervou ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
no_answer_for_language
error: Generation failed [openai] prompt_id=3691 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3691 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3691 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3691 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3691 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3691 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3691 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Absoluut! Hier is een uitgebreide handleiding in het Nederlands voor het creëren van geavanceerde Seaborn visualisaties met Matplotlib-aanpassingen, precies volgens uw specificaties.
### Vereiste Bibliotheken
Eerst importeren we de benodigde bibliotheken.
```python
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.ticker import StrMethodFormatter
```
### 1. Voorbereiding van de Data (Voorbeeld)
Aangezien u geen specifieke data deelt, creëren we een voorbeelddataset die past bij uw beschrijving.
```python
# Creëer een voorbeeld DataFrame
np.random.seed(42) # Voor reproduceerbare resultaten
maanden = ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']
regios = ['Noord', 'Oost', 'West', 'Zuid']
data = []
for maand in maanden:
for regio in regios:
verkopen = np.random.randint(50, 200)
data.append({'Maand': maand, 'Regio': regio, 'Verkoop': verkopen})
df = pd.DataFrame(data)
# Creëer een tweede metrische voor de dubbele y-as (bijv. groeipercentage)
df['Groei (%)'] = np.random.uniform(-10, 25, len(df))
```
### 2. De Seaborn Scatterplot met Geavanceerde Matplotlib Aanpassingen
Deze code combineert Seaborn's eenvoud met de volledige kracht van Matplotlib voor uw unieke effecten.
```python
# Stel de stijl en het kleurenpalet in
sns.set_style("whitegrid")
sns.set_palette(sns.color_palette(["#1f77b4", "#2ca02c", "#17becf", "#7f7f7f"])) # Blauw, groen, cyaan, grijs
# Maak de figuur en het hoofd-asobject (ax1)
fig, ax1 = plt.subplots(figsize=(14, 8))
# --- PLOT 1: Scatterplot voor Verkoopaantallen (Linker Y-as) ---
# We gebruiken Seaborn om de scatterplot te tekenen
scatter = sns.scatterplot(
data=df,
x='Maand', y='Verkoop',
hue='Regio', # Kleur op basis van regio
s=100, # Grootte van de markers
ax=ax1 # Teken op het eerste assenstelsel
)
# --- AANPASSINGEN AAN AX1 (Verkoop) ---
# Titel en labels met grotere lettertypen
ax1.set_title('Maandelijkse Verkoopcijfers per Regio (2023)', fontsize=16, fontweight='bold', pad=20)
ax1.set_xlabel('Maand', fontsize=14)
ax1.set_ylabel('Aantal Verkochte Eenheden', fontsize=14, color='#1f77b4') # Kleur label bij as
# Pas de tick labels aan voor grotere lettergrootte
ax1.tick_params(axis='both', which='major', labelsize=12)
ax1.tick_params(axis='y', labelcolor='#1f77b4') # Kleur ticks bij linker as
# Formatteer de Y-as om duizendtallen scheidingspunten te hebben
ax1.yaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}'))
# --- PLOT 2: Lijnplot voor Groeipercentage (Rechter Y-as) ---
# Maak een tweede Y-as die dezelfde X-as deelt
ax2 = ax1.twinx()
# Plot de groei per regio. We groeperen de data eerst per maand en regio.
for regio in regios:
df_subset = df[df['Regio'] == regio]
# Gebruik een lijnplot of scatterplot voor de tweede metriek
ax2.plot(df_subset['Maand'], df_subset['Groei (%)'],
marker='D', markersize=6, linestyle='--', linewidth=2,
label=f'{regio} Groei')
# --- AANPASSINGEN AAN AX2 (Groei %) ---
ax2.set_ylabel('Groeipercentage (%)', fontsize=14, color='#2ca02c') # Groen label
ax2.tick_params(axis='y', labelcolor='#2ca02c') # Groene ticks
# Stel grenzen in voor de Y-as voor betere leesbaarheid
ax2.set_ylim(df['Groei (%)'].min() - 2, df['Groei (%)'].max() + 2)
# --- AANGEPASTE ANNOTATIES MET PIJLEN ---
# Voorbeeld: vind de hoogste verkoop en annoteer deze
max_verkoop_idx = df['Verkoop'].idxmax()
max_row = df.loc[max_verkoop_idx]
max_tekst = f"Topverkoop: {max_row['Verkoop']:,.0f}\n{max_row['Regio']} in {max_row['Maand']}"
ax1.annotate(max_tekst,
xy=(max_row['Maand'], max_row['Verkoop']), # Punt waar de pijl naar wijst
xytext=(max_row['Maand'], max_row['Verkoop'] + 30), # Positie van de tekst
fontsize=11,
ha='center',
# Stijl van de pijl
arrowprops=dict(arrowstyle='->', lw=1.5, color='red', connectionstyle="arc3,rad=.2"),
bbox=dict(boxstyle="round,pad=0.3", facecolor="wheat", alpha=0.8)
)
# Voorbeeld: annotatie voor hoogste groei
max_groei_idx = df['Groei (%)'].idxmax()
max_g_row = df.loc[max_groei_idx]
ax2.annotate(f"Max Groei: {max_g_row['Groei (%)']:.1f}%",
xy=(max_g_row['Maand'], max_g_row['Groei (%)']),
xytext=(max_g_row['Maand'], max_g_row['Groei (%)'] + 3),
fontsize=11,
ha='center',
arrowprops=dict(arrowstyle='->', lw=1.5, color='darkgreen'),
bbox=dict(boxstyle="round,pad=0.3", facecolor="lightgreen", alpha=0.8)
)
# --- LEGENDA'S ---
# Verzamel handles en labels van beide assen voor een gecombineerde legenda
handles1, labels1 = ax1.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()
# Plaats één gecombineerde legenda in de grafiek
ax1.legend(handles1 + handles2, labels1 + labels2, loc='upper left', fontsize=11, frameon=True, fancybox=True)
# Verwijder de automatische legenda die Seaborn toevoegt (anders dubbele legenda)
ax1.legend_.remove() # Verwijder eerst de oude, anders krijg je er twee
ax2.legend_.remove() # Idem voor ax2
# --- FINALE LAYOUT-AANPASSINGEN ---
# Pas de layout automatisch aan om overlapping te voorkomen
plt.tight_layout()
# Toon de grafiek
plt.show()
```
### Belangrijkste Geavanceerde Aanpassingen Toegelicht:
1. **Dubbele Y-as (`ax1.twinx())`**:
* Creëert een tweede, onafhankelijke Y-as aan de rechterkant die dezelfde X-as deelt.
* `ax1` beheert de verkoopaantallen (blauw).
* `ax2` beheert het groeipercentage (groen).
2. **Aangepaste Annotaties met Pijlen (`ax.annotate()`)`**:
* Wijst specifieke datapunten aan met tekst.
* `xy`: De coördinaten van het punt dat wordt geannoteerd.
* `xytext`: De coördinaten waar de tekst moet staan.
* `arrowprops`: Dicteeert de stijl, kleur en dikte van de pijl. `connectionstyle` maakt een gebogen lijn.
3. **Geïntegreerde Legenda**:
* Handles en labels van *beide* assen (`ax1` en `ax2`) worden gecombineerd tot één centrale legenda, wat cruciaal is voor de leesbaarheid bij een dubbele as.
4. **Stijl en Formattering**:
* **Kleurenpalet**: Aangepast via `sns.set_palette()` met blauw- en groentinten.
* **Lettergroottes**: Overal aangepast via parameters zoals `fontsize` in `set_title()`, `set_label()`, `tick_params()`, en `annotate()`.
* **Y-as Formattering**: `StrMethodFormatter('{x:,.0f}')` voegt duizendtallen scheidingspunten toe (bijv. 1,500).
Dit script geeft u een zeer geavanceerde, publicatieklare visualisatie die perfect voldoet aan al uw eisen. Pas de annotaties en de exacte kleurcodes uiteraard aan op basis van uw eigen dataset en voorkeuren.