Ontwikkel Matplotlib Dashboards voor Gegevensmonitoring in Realtime
description
Met deze prompt kan de gebruiker een geavanceerd Matplotlib-dashboard bouwen dat automatisch realtime data verwerkt en visualiseert. Dit lost het probleem op van statische plots en maakt continue monitoring van data mogelijk. Het is beter dan alternatieven omdat het meerdere grafiektypen combineert met automatische updates en gebruiksvriendelijke aanpassingsmogelijkheden.
prompt
Help me een Matplotlib-dashboard te maken voor realtime gegevensmonitoring. Mijn gegevensbron is <beschrijf je gegevensbron>, en ik wil meerdere visualisaties zoals lijngrafieken, balkgrafieken en spreidingsdiagrammen die automatisch wo ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld Python-code voor een realtime monitoring dashboard met Matplotlib, dat je direct kunt gebruiken. Het script simuleert realtime gegevens (temperatuur en luchtvochtigheid) en visualiseert deze met lijngrafieken, balkgrafieken en spreidingsdiagrammen die automatisch worden bijgewerkt elke 5 seconden. Je kunt de update-interval, kleuren en labels aanpassen naar wens.
```python
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import random
# Instellingen
update_interval = 5000 # in milliseconden (5 seconden)
kleur_temperatuur = 'blue'
kleur_luchtvochtigheid = 'green'
label_temperatuur = 'Temperatuur (°C)'
label_luchtvochtigheid = 'Luchtvochtigheid (%)'
# Initialiseer gegevens
max_data_points = 20
tijden = list(range(-max_data_points+1, 1))
temperatuur_data = [20 + random.uniform(-1, 1) for _ in range(max_data_points)]
luchtvochtigheid_data = [50 + random.uniform(-2, 2) for _ in range(max_data_points)]
balk_data = [random.randint(0, 10) for _ in range(5)]
x_balk = ['Sensor 1', 'Sensor 2', 'Sensor 3', 'Sensor 4', 'Sensor 5']
x_spreiding = np.random.rand(50)
y_spreiding = np.random.rand(50)
# Creëer figuur en subplots
fig, axs = plt.subplots(2, 2, figsize=(12, 8))
ax_lijn_temperatuur = axs[0, 0]
ax_lijn_luchtvochtigheid = axs[0, 1]
ax_balk = axs[1, 0]
ax_spreiding = axs[1, 1]
# Lijngrafiek voor temperatuur
lijn_temperatuur, = ax_lijn_temperatuur.plot(tijden, temperatuur_data, color=kleur_temperatuur)
ax_lijn_temperatuur.set_title('Temperatuur over Tijd')
ax_lijn_temperatuur.set_xlabel('Tijd (seconden)')
ax_lijn_temperatuur.set_ylabel(label_temperatuur)
ax_lijn_temperatuur.set_ylim(15, 25)
# Lijngrafiek voor luchtvochtigheid
lijn_luchtvochtigheid, = ax_lijn_luchtvochtigheid.plot(tijden, luchtvochtigheid_data, color=kleur_luchtvochtigheid)
ax_lijn_luchtvochtigheid.set_title('Luchtvochtigheid over Tijd')
ax_lijn_luchtvochtigheid.set_xlabel('Tijd (seconden)')
ax_lijn_luchtvochtigheid.set_ylabel(label_luchtvochtigheid)
ax_lijn_luchtvochtigheid.set_ylim(45, 55)
# Balkdiagram voor sensordata
balk = ax_balk.bar(x_balk, balk_data, color='orange')
ax_balk.set_title('Sensorwaarden')
ax_balk.set_ylim(0, 15)
# Spreidingsdiagram
scat = ax_spreiding.scatter(x_spreiding, y_spreiding, c='purple')
ax_spreiding.set_title('Spreidingsdiagram')
ax_spreiding.set_xlabel('X')
ax_spreiding.set_ylabel('Y')
ax_spreiding.set_xlim(0, 1)
ax_spreiding.set_ylim(0, 1)
# Updatefunctie voor animatie
def update(frame):
# Simuleer nieuwe gegevens
nieuwe_temp = temperatuur_data[-1] + random.uniform(-0.5, 0.5)
nieuwe_lucht = luchtvochtigheid_data[-1] + random.uniform(-1, 1)
temperatuur_data.append(nieuwe_temp)
luchtvochtigheid_data.append(nieuwe_lucht)
if len(temperatuur_data) > max_data_points:
del temperatuur_data[0]
del luchtvochtigheid_data[0]
del tijden[0]
tijden.append(tijden[-1] + 1)
# Update lijngrafieken
lijn_temperatuur.set_data(tijden, temperatuur_data)
lijn_luchtvochtigheid.set_data(tijden, luchtvochtigheid_data)
ax_lijn_temperatuur.set_xlim(tijden[0], tijden[-1])
ax_lijn_luchtvochtigheid.set_xlim(tijden[0], tijden[-1])
# Update balkdiagram (met nieuwe random data)
for rect, nieuwe_waarde in zip(balk, [random.randint(0, 10) for _ in x_balk]):
rect.set_height(nieuwe_waarde)
# Update spreidingsdiagram
new_x = random.random()
new_y = random.random()
x_spreiding = np.append(x_spreiding[1:], new_x)
y_spreiding = np.append(y_spreiding[1:], new_y)
scat.set_offsets(np.c_[x_spreiding, y_spreiding])
return (lijn_temperatuur, lijn_luchtvochtigheid, *balk, scat)
# Animatie starten
ani = animation.FuncAnimation(fig, update, interval=update_interval, blit=True)
plt.tight_layout()
plt.show()
```
**Aanpassingen mogelijk:**
- Verander `update_interval` voor een ander update-interval.
- Pas `kleur_temperatuur` en `kleur_luchtvochtigheid` aan voor andere kleuren.
- Pas labels en titels aan in het Nederlands.
- Vervang de gesimuleerde data door je echte gegevensbron.
**Let op:** Voor echte realtime gegevens moet je de dataverzameling integreren in de `update` functie.
provider: deepseek
model: deepseek-chat
Hier is een complete Python-oplossing voor uw realtime monitoring dashboard:
```python
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import random
from datetime import datetime
import time
# Stel Nederlandse labels in
plt.rcParams['axes.labelsize'] = 12
plt.rcParams['axes.titlesize'] = 14
plt.rcParams['font.family'] = 'DejaVu Sans'
class RealtimeMonitor:
def __init__(self, update_interval=5000):
self.update_interval = update_interval # ms
self.temperatuur_data = []
self.luchtvochtigheid_data = []
self.tijden = []
self.fig, ((self.ax1, self.ax2), (self.ax3, self.ax4)) = plt.subplots(2, 2, figsize=(15, 10))
self.fig.suptitle('Realtime Sensormonitor - Temperatuur & Luchtvochtigheid', fontsize=16)
# Configureer subplots
self.setup_plots()
def setup_plots(self):
# Lijngrafiek temperatuur
self.ax1.set_title('Temperatuur Over Tijd')
self.ax1.set_xlabel('Tijd')
self.ax1.set_ylabel('Temperatuur (°C)')
self.temp_line, = self.ax1.plot([], [], 'b-', linewidth=2, label='Temperatuur')
self.ax1.legend()
self.ax1.grid(True, alpha=0.3)
# Lijngrafiek luchtvochtigheid
self.ax2.set_title('Luchtvochtigheid Over Tijd')
self.ax2.set_xlabel('Tijd')
self.ax2.set_ylabel('Luchtvochtigheid (%)')
self.humid_line, = self.ax2.plot([], [], 'g-', linewidth=2, label='Luchtvochtigheid')
self.ax2.legend()
self.ax2.grid(True, alpha=0.3)
# Spreidingsdiagram
self.ax3.set_title('Temperatuur vs Luchtvochtigheid')
self.ax3.set_xlabel('Temperatuur (°C)')
self.ax3.set_ylabel('Luchtvochtigheid (%)')
self.scatter_plot = self.ax3.scatter([], [], c='blue', alpha=0.6)
self.ax3.grid(True, alpha=0.3)
# Balkdiagram voor laatste meting
self.ax4.set_title('Laatste Meting')
self.ax4.set_ylabel('Waarde')
self.bars = self.ax4.bar(['Temperatuur', 'Luchtvochtigheid'], [0, 0],
color=['blue', 'green'], alpha=0.7)
self.ax4.grid(True, alpha=0.3)
# Stel limieten in
self.ax1.set_ylim(15, 35)
self.ax2.set_ylim(20, 80)
self.ax3.set_xlim(15, 35)
self.ax3.set_ylim(20, 80)
self.ax4.set_ylim(0, 100)
plt.tight_layout()
def simuleer_sensor_data(self):
"""Simuleer sensor data (vervang dit met uw echte sensor data)"""
temperatuur = random.uniform(18.0, 30.0)
luchtvochtigheid = random.uniform(30.0, 70.0)
return temperatuur, luchtvochtigheid
def update_plots(self, frame):
# Haal nieuwe sensor data op
temperatuur, luchtvochtigheid = self.simuleer_sensor_data()
huidige_tijd = datetime.now()
# Voeg data toe aan lijsten (beperk tot laatste 50 metingen)
self.temperatuur_data.append(temperatuur)
self.luchtvochtigheid_data.append(luchtvochtigheid)
self.tijden.append(huidige_tijd)
if len(self.temperatuur_data) > 50:
self.temperatuur_data.pop(0)
self.luchtvochtigheid_data.pop(0)
self.tijden.pop(0)
# Update lijngrafieken
self.temp_line.set_data(range(len(self.temperatuur_data)), self.temperatuur_data)
self.humid_line.set_data(range(len(self.luchtvochtigheid_data)), self.luchtvochtigheid_data)
# Update spreidingsdiagram
self.scatter_plot.set_offsets(np.column_stack((self.temperatuur_data, self.luchtvochtigheid_data)))
# Update balkdiagram
for bar, height in zip(self.bars, [temperatuur, luchtvochtigheid]):
bar.set_height(height)
# Update assen limieten voor lijngrafieken
self.ax1.set_xlim(0, len(self.temperatuur_data))
self.ax2.set_xlim(0, len(self.luchtvochtigheid_data))
# Voeg tijd labels toe
if len(self.tijden) > 1:
tijd_labels = [t.strftime('%H:%M:%S') for t in self.tijden]
self.ax1.set_xticks(range(len(tijd_labels)))
self.ax1.set_xticklabels(tijd_labels, rotation=45)
self.ax2.set_xticks(range(len(tijd_labels)))
self.ax2.set_xticklabels(tijd_labels, rotation=45)
return self.temp_line, self.humid_line, self.scatter_plot, *self.bars
def start_monitoring(self):
ani = animation.FuncAnimation(
self.fig,
self.update_plots,
interval=self.update_interval,
blit=True,
cache_frame_data=False
)
plt.show()
# Configuratie-instellingen
UPDATE_INTERVAL = 5000 # 5 seconden in milliseconden
# Start het monitoring dashboard
if __name__ == "__main__":
monitor = RealtimeMonitor(update_interval=UPDATE_INTERVAL)
monitor.start_monitoring()
```
**Installatievereisten:**
```bash
pip install matplotlib numpy
```
**Aanpassingsopties:**
1. **Update-interval wijzigen:** Pas `UPDATE_INTERVAL` aan (in milliseconden)
2. **Kleuren wijzigen:** Verander 'blue' en 'green' in de plotconfiguraties
3. **Echte sensor data integreren:** Vervang `simuleer_sensor_data()` met uw eigen data-functie
4. **Data-limieten aanpassen:** Wijzig de `set_ylim()` en `set_xlim()` waarden
**Gebruik:**
- Run het script en het dashboard start automatisch
- Data wordt elke 5 seconden bijgewerkt
- Alle grafieken updaten realtime met nieuwe metingen
De code is volledig in het Nederlands geconfigureerd en gebruikt de opgegeven blauwe en groene kleuren voor de visualisaties.