Ontwikkel Een Seaborn Visualisatie met Geavanceerde Data Annotaties en Contextuele Tooltip Informatie
description
Met deze prompt kan de gebruiker Seaborn visualisaties maken die niet alleen data tonen, maar ook belangrijke inzichten verduidelijken via annotaties en interactieve tooltips. Dit helpt bij diepere interpretatie en maakt het makkelijker om complexe data te begrijpen. Het onderscheidt zich van andere prompts door de focus op contextuele informatie en gebruikersinteractie, wat de waarde van visualisaties aanzienlijk verhoogt.
prompt
Help me een Seaborn visualisatie te maken die geavanceerde data annotaties en contextuele tooltips bevat om diepere inzichten te geven. Beschrijving van mijn dataset: <beschrijf kort je dataset>. Kies het type visualisatie: <selecteer het gewenste diagramtype, zoals scatterplot, barplot, heatmap>. Welke variabelen wil ik visualiseren: <noem de k ...
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=3694 locale=nl err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3694 locale=en err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3694 locale=de err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3694 locale=fr err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3694 locale=pt err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3694 locale=es err=OpenAI connection/timeout | Generation failed [openai] prompt_id=3694 locale=zh err=OpenAI connection/timeout
provider: deepseek
model: deepseek-chat
Hier is een volledige code voor een geavanceerde Seaborn scatterplot met de gewenste specificaties:
```python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.patches as mpatches
# Stel donker thema in
plt.style.use('dark_background')
sns.set_style("darkgrid")
# Voorbeeld dataset (vervang met jouw eigen data)
data = {
'maand': ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'] * 3,
'afdeling': ['Electronica']*12 + ['Kleding']*12 + ['Huishouden']*12,
'omzet': np.random.randint(50000, 200000, 36),
'aantal_klanten': np.random.randint(1000, 5000, 36),
'kosten': np.random.randint(30000, 120000, 36)
}
df = pd.DataFrame(data)
# Voeg clusteranalyse toe voor hoge verkoopcijfers
kmeans = KMeans(n_clusters=3, random_state=42)
df['cluster'] = kmeans.fit_predict(df[['omzet', 'aantal_klanten']])
# Identificeer cluster met hoogste omzet
hoogste_cluster = df.groupby('cluster')['omzet'].mean().idxmax()
# Maak de scatterplot
fig, ax = plt.subplots(figsize=(14, 8))
# Plot met verschillende kleuren per cluster
scatter = sns.scatterplot(
data=df,
x='aantal_klanten',
y='omzet',
hue='cluster',
size='kosten',
sizes=(50, 300),
alpha=0.7,
palette='viridis',
ax=ax
)
# Markeer cluster met hoge verkoopcijfers
hoog_omzet_data = df[df['cluster'] == hoogste_cluster]
ax.scatter(
hoog_omzet_data['aantal_klanten'],
hoog_omzet_data['omzet'],
s=100,
edgecolor='red',
linewidth=2,
facecolor='none',
label='Hoge omzet cluster'
)
# Annotaties toevoegen
for idx, row in df.iterrows():
if row['cluster'] == hoogste_cluster:
ax.annotate(
f"{row['maand']}-{row['afdeling']}",
(row['aantal_klanten'], row['omzet']),
xytext=(5, 5),
textcoords='offset points',
fontsize=8,
color='red',
weight='bold'
)
# Legend en labels
ax.set_xlabel('Aantal Klanten', fontsize=12, fontweight='bold')
ax.set_ylabel('Omzet (€)', fontsize=12, fontweight='bold')
ax.set_title('Maandelijkse Omzet vs Aantal Klanten per Afdeling', fontsize=14, fontweight='bold')
# Verwijder gridlijnen
ax.grid(False)
# Custom legend
handles, labels = ax.get_legend_handles_labels()
new_handles = [handles[0], handles[1], handles[2], mpatches.Circle((0,0), radius=1, fill=False, edgecolor='red', linewidth=2)]
new_labels = ['Cluster 0', 'Cluster 1', 'Cluster 2', 'Hoge Omzet Cluster']
ax.legend(new_handles, new_labels, title='Legenda')
# Interactive tooltips (voor Jupyter Notebook)
from mpld3 import plugins
tooltip_data = []
for idx, row in df.iterrows():
tooltip = f"""
<div style="background: #2b2b2b; padding: 10px; border-radius: 5px;">
<b>Afdeling:</b> {row['afdeling']}<br>
<b>Maand:</b> {row['maand']}<br>
<b>Omzet:</b> €{row['omzet']:,.0f}<br>
<b>Klanten:</b> {row['aantal_klanten']}<br>
<b>Kosten:</b> €{row['kosten']:,.0f}<br>
<b>Winst:</b> €{row['omzet']-row['kosten']:,.0f}
</div>
"""
tooltip_data.append(tooltip)
plugins.connect(fig, plugins.PointHTMLTooltip(scatter, tooltip_data))
plt.tight_layout()
plt.show()
# Voor niet-interactieve omgevingen, gebruik deze alternatieve tooltip approach:
print("\nVoor interactieve tooltips in Jupyter Notebook, installeer: pip install mpld3")
```
**Benodigde installaties:**
```bash
pip install seaborn matplotlib pandas scikit-learn mpld3
```
**Belangrijke features:**
1. **Donker thema** met aangepaste styling
2. **Clusteranalyse** markeert automatisch groep met hoogste omzet
3. **Interactieve tooltips** met volledige maandelijkse data
4. **Size encoding** voor kosten visualisatie
5. **Speciale annotaties** voor hoge-omzet maanden
6. **Gridlijnen uitgeschakeld** zoals gevraagd
**Extra optie voor productie-omgeving:**
Voor webapplicaties overweeg Plotly voor betere interactieve tooltips:
```python
import plotly.express as px
fig = px.scatter(df, x='aantal_klanten', y='omzet', color='cluster',
size='kosten', hover_data=['maand', 'afdeling', 'kosten'])
fig.show()
```