|
|
""" |
|
|
Data Visualization Example |
|
|
Demonstrates various plotting libraries and techniques |
|
|
""" |
|
|
|
|
|
import numpy as np |
|
|
import pandas as pd |
|
|
import matplotlib.pyplot as plt |
|
|
import seaborn as sns |
|
|
import plotly.graph_objects as go |
|
|
import plotly.express as px |
|
|
from plotly.subplots import make_subplots |
|
|
import plotly.offline as pyo |
|
|
|
|
|
print("=" * 60) |
|
|
print("DATA VISUALIZATION EXAMPLE") |
|
|
print("=" * 60) |
|
|
|
|
|
|
|
|
plt.style.use('default') |
|
|
sns.set_palette("husl") |
|
|
|
|
|
|
|
|
np.random.seed(42) |
|
|
n = 1000 |
|
|
|
|
|
|
|
|
data = { |
|
|
'x': np.random.randn(n), |
|
|
'y': np.random.randn(n), |
|
|
'category': np.random.choice(['A', 'B', 'C', 'D'], n), |
|
|
'size': np.random.uniform(10, 100, n), |
|
|
'value': np.random.randn(n).cumsum(), |
|
|
'time': pd.date_range('2023-01-01', periods=n, freq='H') |
|
|
} |
|
|
|
|
|
df = pd.DataFrame(data) |
|
|
|
|
|
print("\nπ Dataset created with", n, "records") |
|
|
|
|
|
|
|
|
print("\nπ¨ Creating Matplotlib visualizations...") |
|
|
|
|
|
plt.figure(figsize=(20, 15)) |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 1) |
|
|
plt.plot(df['time'][:100], df['value'][:100]) |
|
|
plt.title('Time Series (Line Plot)') |
|
|
plt.xlabel('Time') |
|
|
plt.ylabel('Value') |
|
|
plt.xticks(rotation=45) |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 2) |
|
|
plt.scatter(df['x'], df['y'], c=df['value'], cmap='viridis', alpha=0.6) |
|
|
plt.colorbar(label='Value') |
|
|
plt.title('Scatter Plot with Color') |
|
|
plt.xlabel('X') |
|
|
plt.ylabel('Y') |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 3) |
|
|
plt.hist(df['x'], bins=30, alpha=0.7, color='skyblue', edgecolor='black') |
|
|
plt.title('Histogram') |
|
|
plt.xlabel('X Values') |
|
|
plt.ylabel('Frequency') |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 4) |
|
|
categories = [df[df['category'] == c]['value'].values for c in ['A', 'B', 'C', 'D']] |
|
|
plt.boxplot(categories, labels=['A', 'B', 'C', 'D']) |
|
|
plt.title('Box Plot by Category') |
|
|
plt.ylabel('Value') |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 5) |
|
|
category_counts = df['category'].value_counts() |
|
|
plt.bar(category_counts.index, category_counts.values, color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A']) |
|
|
plt.title('Category Distribution') |
|
|
plt.xlabel('Category') |
|
|
plt.ylabel('Count') |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 6) |
|
|
plt.fill_between(range(100), df['value'][:100], alpha=0.3) |
|
|
plt.plot(range(100), df['value'][:100]) |
|
|
plt.title('Area Plot') |
|
|
plt.xlabel('Index') |
|
|
plt.ylabel('Value') |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 7) |
|
|
corr_data = df[['x', 'y', 'value']].corr() |
|
|
sns.heatmap(corr_data, annot=True, cmap='coolwarm', center=0) |
|
|
plt.title('Correlation Heatmap') |
|
|
|
|
|
|
|
|
from mpl_toolkits.mplot3d import Axes3D |
|
|
ax = plt.subplot(3, 3, 8, projection='3d') |
|
|
scatter = ax.scatter(df['x'][:200], df['y'][:200], df['value'][:200], |
|
|
c=df['value'][:200], cmap='viridis') |
|
|
ax.set_title('3D Scatter Plot') |
|
|
ax.set_xlabel('X') |
|
|
ax.set_ylabel('Y') |
|
|
ax.set_zlabel('Value') |
|
|
|
|
|
|
|
|
plt.subplot(3, 3, 9) |
|
|
plt.pie(category_counts.values, labels=category_counts.index, autopct='%1.1f%%', |
|
|
colors=['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A']) |
|
|
plt.title('Pie Chart') |
|
|
|
|
|
plt.tight_layout() |
|
|
plt.show() |
|
|
|
|
|
|
|
|
print("\nπ Creating Seaborn visualizations...") |
|
|
|
|
|
plt.figure(figsize=(20, 12)) |
|
|
|
|
|
|
|
|
plt.subplot(2, 3, 1) |
|
|
sns.scatterplot(data=df.sample(200), x='x', y='y', hue='category') |
|
|
plt.title('Seaborn Scatter Plot') |
|
|
|
|
|
|
|
|
plt.subplot(2, 3, 2) |
|
|
sns.violinplot(data=df, x='category', y='value') |
|
|
plt.title('Violin Plot') |
|
|
|
|
|
|
|
|
plt.subplot(2, 3, 3) |
|
|
sns.scatterplot(data=df.sample(200), x='x', y='y') |
|
|
sns.regplot(data=df.sample(200), x='x', y='y', scatter=False, color='red') |
|
|
plt.title('Scatter with Regression Line') |
|
|
|
|
|
|
|
|
plt.subplot(2, 3, 4) |
|
|
sns.swarmplot(data=df.sample(300), x='category', y='value') |
|
|
plt.title('Swarm Plot') |
|
|
|
|
|
|
|
|
plt.subplot(2, 3, 5) |
|
|
sns.kdeplot(data=df.sample(500), x='x', y='y', fill=True) |
|
|
plt.title('Kernel Density Estimate') |
|
|
|
|
|
|
|
|
plt.subplot(2, 3, 6) |
|
|
sns.countplot(data=df, x='category', palette='husl') |
|
|
plt.title('Count Plot') |
|
|
|
|
|
plt.tight_layout() |
|
|
plt.show() |
|
|
|
|
|
|
|
|
print("\nπ Creating Plotly interactive visualizations...") |
|
|
|
|
|
|
|
|
fig1 = px.scatter(df.sample(500), x='x', y='y', color='category', |
|
|
size='size', hover_data=['value'], |
|
|
title='Interactive Scatter Plot') |
|
|
fig1.show() |
|
|
|
|
|
|
|
|
fig2 = px.scatter_3d(df.sample(500), x='x', y='y', z='value', |
|
|
color='category', size='size', |
|
|
title='Interactive 3D Scatter Plot') |
|
|
fig2.show() |
|
|
|
|
|
|
|
|
fig3 = px.line(df[:100], x='time', y='value', |
|
|
title='Interactive Time Series') |
|
|
fig3.show() |
|
|
|
|
|
|
|
|
fig4 = px.box(df, x='category', y='value', |
|
|
title='Interactive Box Plot') |
|
|
fig4.show() |
|
|
|
|
|
|
|
|
fig5 = px.violin(df, x='category', y='value', |
|
|
box=True, title='Interactive Violin Plot') |
|
|
fig5.show() |
|
|
|
|
|
|
|
|
fig6 = make_subplots( |
|
|
rows=2, cols=2, |
|
|
subplot_titles=('Scatter', 'Line', 'Bar', 'Box'), |
|
|
specs=[[{"secondary_y": True}, {"secondary_y": False}], |
|
|
[{"secondary_y": False}, {"secondary_y": False}]] |
|
|
) |
|
|
|
|
|
|
|
|
fig6.add_trace(go.Scatter(x=df['x'][:200], y=df['y'][:200], |
|
|
mode='markers', name='Scatter'), row=1, col=1) |
|
|
fig6.add_trace(go.Line(x=range(100), y=df['value'][:100], |
|
|
name='Line'), row=1, col=2) |
|
|
fig6.add_trace(go.Bar(x=category_counts.index, y=category_counts.values, |
|
|
name='Bar'), row=2, col=1) |
|
|
fig6.add_trace(go.Box(y=df['value'], name='Box'), row=2, col=2) |
|
|
|
|
|
fig6.update_layout(height=600, title_text="Subplot Example") |
|
|
fig6.show() |
|
|
|
|
|
|
|
|
print("\n⨠Creating additional visualization examples...") |
|
|
|
|
|
|
|
|
fig7 = px.scatter(df.sample(100), x='x', y='y', animation_frame='category', |
|
|
size='size', color='value', |
|
|
title='Animated Scatter Plot') |
|
|
fig7.show() |
|
|
|
|
|
|
|
|
fig8 = px.sunburst(df, path=['category'], values='value', |
|
|
title='Sunburst Chart') |
|
|
fig8.show() |
|
|
|
|
|
|
|
|
fig9 = px.treemap(df, path=['category'], values='value', |
|
|
title='Treemap') |
|
|
fig9.show() |
|
|
|
|
|
|
|
|
print("\n" + "=" * 60) |
|
|
print("VISUALIZATION SUMMARY") |
|
|
print("=" * 60) |
|
|
print("β
Matplotlib plots: 9 different chart types") |
|
|
print("β
Seaborn plots: 6 statistical visualizations") |
|
|
print("β
Plotly plots: 9 interactive visualizations") |
|
|
print("β
Total: 24 unique visualization examples") |
|
|
print("\nπ Visualization libraries demonstrated:") |
|
|
print(" - matplotlib: Static, publication-quality plots") |
|
|
print(" - seaborn: Statistical data visualization") |
|
|
print(" - plotly: Interactive, web-based visualizations") |
|
|
print(" - numpy/pandas: Data generation and manipulation") |
|
|
print("\nπ¨ Visualization types covered:") |
|
|
print(" - Line charts, Scatter plots, Histograms") |
|
|
print(" - Box plots, Violin plots, Bar charts") |
|
|
print(" - Heatmaps, KDE plots, 3D plots") |
|
|
print(" - Interactive plots, Animations") |
|
|
print(" - Sunburst, Treemap, Subplots") |
|
|
|