Clustermap

IoT Sensor Correlations

Smart home sensor data correlation matrix

Output
IoT Sensor Correlations
Python
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from matplotlib.colors import LinearSegmentedColormap

np.random.seed(42)

# Sensors
sensors = ['Temp_In', 'Temp_Out', 'Humidity', 'CO2', 'Light', 
           'Motion', 'Door', 'Window', 'HVAC', 'Power']
n = len(sensors)

# Create correlation structure
corr = np.eye(n)
# Temperature correlations
corr[0, 1] = corr[1, 0] = 0.7
corr[0, 8] = corr[8, 0] = -0.6  # HVAC vs temp
corr[2, 0] = corr[0, 2] = -0.4  # Humidity vs temp
# Activity correlations
corr[5, 6] = corr[6, 5] = 0.5  # Motion/door
corr[5, 4] = corr[4, 5] = 0.6  # Motion/light
corr[8, 9] = corr[9, 8] = 0.8  # HVAC/power

# Fill rest with weak correlations
for i in range(n):
    for j in range(i+1, n):
        if corr[i, j] == 0:
            corr[i, j] = corr[j, i] = np.random.uniform(-0.2, 0.2)

df = pd.DataFrame(corr, index=sensors, columns=sensors)

# NEON diverging
neon_div = LinearSegmentedColormap.from_list('neon_div', ['#27D3F5', '#0a0a0f', '#F527B0'])

g = sns.clustermap(df, cmap=neon_div, center=0, vmin=-1, vmax=1,
                   method='average', linewidths=0.5, linecolor='#1a1a2e',
                   figsize=(8, 7), dendrogram_ratio=(0.12, 0.12),
                   annot=True, fmt='.2f', annot_kws={'size': 8, 'color': 'white'},
                   cbar_pos=(0.01, 0.08, 0.008, 0.12),
                   tree_kws={'linewidths': 1.5, 'colors': '#27D3F5'})

g.fig.patch.set_facecolor('#0a0a0f')
g.ax_heatmap.set_facecolor('#0a0a0f')
g.ax_heatmap.tick_params(colors='white', labelsize=9)

for ax in [g.ax_row_dendrogram, g.ax_col_dendrogram]:
    ax.set_facecolor('#0a0a0f')

g.fig.suptitle('Smart Home Sensor Correlations', color='white', fontsize=14, fontweight='bold', y=1.02)


plt.show()
Library

Matplotlib

Category

Heatmaps & Density

Did this help you?

Support PyLucid to keep it free & growing

Support