Advanced Data Visualization Techniques in Python: Focus on Advanced Matplotlib Techniques

 Advanced Data Visualization Techniques in Python: Focus on Advanced Matplotlib Techniques

1. Overview

Matplotlib adalah salah satu pustaka pemetaan yang paling banyak digunakan di Python, terkenal karena fleksibilitasnya dan berbagai pilihan visualisasi yang komprehensif. Ini menjadi dasar bagi banyak pustaka visualisasi lainnya, seperti Seaborn dan Plotly. Kemampuan Matplotlib untuk membuat plot statis, animasi, dan interaktif menjadikannya sangat penting bagi para ilmuwan data, analis, dan pengembang yang bertujuan untuk menyampaikan wawasan data dengan efektif. Kemampuan kustomisasi yang luas memungkinkan pengguna untuk menyesuaikan visualisasi sesuai dengan kebutuhan spesifik, meningkatkan baik kejelasan maupun daya tarik estetika.

2. Advanced Techniques

Berikut adalah tiga teknik Matplotlib tingkat lanjut yang secara signifikan meningkatkan visualisasi data:

a. Subplots and GridSpec for Complex Layouts

Description: Subplot memungkinkan pembuatan beberapa plot dalam satu gambar, memfasilitasi analisis komparatif. GridSpec memberikan lebih banyak kontrol atas tata letak, memungkinkan desain struktur grid yang tidak seragam.

Benefits:

  • Comparative Analysis: Dengan mudah membandingkan berbagai dataset atau berbagai aspek dari dataset yang sama secara berdampingan.
  • Space Optimization: Gunakan ruang gambar secara efisien dengan menyesuaikan ukuran dan pengaturan subplot.
b. 3D Plotting with mplot3d

Description: Toolkit mplot3d dari Matplotlib memperluas kemampuannya ke 3D, memungkinkan visualisasi data multi-dimensi melalui surface plots, wireframes, scatter plots, dan lainnya.

Benefits:

  • Enhanced Data Representation: Visualisasikan hubungan antara tiga variabel secara bersamaan.
  • Depth Perception: Menyediakan pemahaman yang lebih intuitif tentang struktur data dan pola.
c. Interactive Plots with Widgets

Description: Mengintegrasikan Matplotlib dengan ipywidgets memungkinkan pembuatan plot interaktif yang dapat dimanipulasi pengguna secara real-time menggunakan slider, tombol, dan widget lainnya.

Benefits:

  • Dynamic Exploration: Izinkan pengguna untuk secara interaktif menjelajahi berbagai aspek dari data.
  • Enhanced Engagement: Buat visualisasi lebih menarik dan informatif dengan memungkinkan manipulasi data yang dipandu oleh pengguna.

3. Implementation Examples

Berikut adalah contoh spesifik tentang bagaimana teknik Matplotlib yang canggih ini dapat diterapkan di berbagai industri.


1. Production Planning and Optimization

Technique: Subplots and GridSpec for Comparative Analysis of Production Lines

Example: Memvisualisasikan output produksi di berbagai mesin untuk mengidentifikasi hambatan dan mengoptimalkan jadwal.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

# Sample Data
machines = ['Machine A', 'Machine B', 'Machine C']
days = np.arange(1, 11)
output = {
    'Machine A': np.random.randint(80, 120, size=10),
    'Machine B': np.random.randint(60, 100, size=10),
    'Machine C': np.random.randint(70, 110, size=10)
}

# Create GridSpec layout
fig = plt.figure(figsize=(15, 10))
gs = GridSpec(3, 1, figure=fig)

for i, machine in enumerate(machines):
    ax = fig.add_subplot(gs[i, 0])
    ax.plot(days, output[machine], marker='o', label=machine)
    ax.set_title(f'Production Output - {machine}')
    ax.set_xlabel('Day')
    ax.set_ylabel('Units Produced')
    ax.legend()
    ax.grid(True)

plt.tight_layout()
plt.show()

Output :

2. Warehouse and Logistics Management

Technique: 3D Plotting to Visualize Inventory Levels Across Multiple Warehouses

Example: Memvisualisasikan distribusi inventaris dalam ruang 3D untuk mengoptimalkan penempatan stok.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# Sample Data
warehouses = ['W1', 'W2', 'W3', 'W4']
locations = {
    'W1': (10, 20),
    'W2': (15, 25),
    'W3': (20, 30),
    'W4': (25, 35)
}
inventory_levels = [500, 600, 550, 700]

x = [locations[w][0] for w in warehouses]
y = [locations[w][1] for w in warehouses]
z = np.zeros(len(warehouses))  # Base level
dx = dy = 5
dz = inventory_levels

# Plotting
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')

ax.bar3d(x, y, z, dx, dy, dz, color='skyblue', alpha=0.7)
ax.set_xlabel('X Coordinate')
ax.set_ylabel('Y Coordinate')
ax.set_zlabel('Inventory Level')
ax.set_title('Inventory Levels Across Warehouses')
plt.show()

Output :

3. Financial Technology (FinTech) Solutions

Technique: Interactive Plots with Sliders to Simulate Investment Growth

Example: Memungkinkan pengguna untuk menyesuaikan parameter investasi dan memvisualisasikan dampaknya terhadap pertumbuhan portofolio.

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import numpy as np

# Initial Parameters
initial_investment = 1000
years = np.arange(0, 21)
rate = 0.05

# Calculate Investment Growth
def calculate_growth(principal, rate, years):
    return principal * (1 + rate) ** years

growth = calculate_growth(initial_investment, rate, years)

# Create Plot
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.25)
line, = ax.plot(years, growth, lw=2, label='Growth')

ax.set_xlabel('Years')
ax.set_ylabel('Investment Value ($)')
ax.set_title('Investment Growth Over Time')
ax.legend()
ax.grid(True)

# Slider for Interest Rate
ax_rate = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider_rate = Slider(ax_rate, 'Rate', 0.0, 0.1, valinit=rate)

# Update Function
def update(val):
    new_rate = slider_rate.val
    new_growth = calculate_growth(initial_investment, new_rate, years)
    line.set_ydata(new_growth)
    ax.relim()
    ax.autoscale_view()
    fig.canvas.draw_idle()

slider_rate.on_changed(update)
plt.show()

Output : 

4. Banking and Financial Services

Technique: Violin Plots for Portfolio Risk Assessment

Example: Memvisualisasikan distribusi imbal hasil di berbagai portofolio investasi untuk menilai risiko.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

# Sample Data
np.random.seed(0)
data = {
    'Portfolio A': np.random.normal(0.05, 0.02, 100),
    'Portfolio B': np.random.normal(0.04, 0.025, 100),
    'Portfolio C': np.random.normal(0.06, 0.015, 100)
}
df = pd.DataFrame(data)

# Violin Plot
plt.figure(figsize=(10, 6))
sns.violinplot(data=df, palette='Set2')
plt.title('Distribution of Portfolio Returns')
plt.xlabel('Portfolios')
plt.ylabel('Return')
plt.grid(True)
plt.show()

Output :


5. E-commerce Platforms

Technique: Subplots and Annotations to Analyze Sales Trends

Example: Membandingkan penjualan bulanan di berbagai kategori produk dengan anotasi yang menyoroti penjualan puncak.

import matplotlib.pyplot as plt
import numpy as np

# Sample Data
months = np.arange(1, 13)
categories = ['Electronics', 'Clothing', 'Home & Kitchen']
sales = {
    'Electronics': np.random.randint(200, 500, size=12),
    'Clothing': np.random.randint(150, 400, size=12),
    'Home & Kitchen': np.random.randint(100, 350, size=12)
}

# Create Subplots
fig, axs = plt.subplots(3, 1, figsize=(12, 15))

for i, category in enumerate(categories):
    axs[i].plot(months, sales[category], marker='o', label=category)
    axs[i].set_title(f'Monthly Sales - {category}')
    axs[i].set_xlabel('Month')
    axs[i].set_ylabel('Sales ($)')
    axs[i].legend()
    axs[i].grid(True)
   
    # Annotate Peak Sales
    peak_month = months[np.argmax(sales[category])]
    peak_sales = np.max(sales[category])
    axs[i].annotate(f'Peak: ${peak_sales}',
                   xy=(peak_month, peak_sales),
                   xytext=(peak_month, peak_sales + 50),
                   arrowprops=dict(facecolor='black', shrink=0.05))

plt.tight_layout()
plt.show()

Output : 


6. Insurance and Risk Management

Technique: 3D Scatter Plots to Visualize Risk Factors

Example: Membuat grafik jumlah klaim terhadap usia dan durasi polis untuk mengidentifikasi segmen berisiko tinggi.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# Sample Data
np.random.seed(42)
ages = np.random.randint(25, 70, 100)
policy_duration = np.random.randint(1, 30, 100)
claim_amount = np.random.randint(1000, 20000, 100)

# 3D Scatter Plot
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
scatter = ax.scatter(ages, policy_duration, claim_amount, c=claim_amount, cmap='coolwarm')

ax.set_xlabel('Age')
ax.set_ylabel('Policy Duration (Years)')
ax.set_zlabel('Claim Amount ($)')
ax.set_title('Claim Amounts by Age and Policy Duration')
fig.colorbar(scatter, ax=ax, label='Claim Amount ($)')
plt.show()

Output :

7. Maintenance and Asset Management

Technique: Interactive Heatmaps to Monitor Equipment Performance

Example: Membuat peta panas yang diperbarui berdasarkan periode waktu yang dipilih untuk memantau kesehatan peralatan.

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from matplotlib.widgets import Slider

# Sample Data
equipment = ['Pump', 'Motor', 'Conveyor', 'Generator', 'Heater']
time_periods = np.arange(1, 13)
performance = np.random.randint(70, 100, size=(5, 12))

# Initial Heatmap
fig, ax = plt.subplots(figsize=(12, 6))
plt.subplots_adjust(left=0.25, bottom=0.25)
heatmap = sns.heatmap(performance, annot=True, fmt="d", cmap='YlGnBu', ax=ax)
ax.set_xlabel('Month')
ax.set_ylabel('Equipment')
ax.set_title('Equipment Performance Over Months')

# Slider for Month Selection
ax_month = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider_month = Slider(ax_month, 'Month', 1, 12, valinit=12, valstep=1)

# Update Function
def update(val):
    month = int(slider_month.val) - 1
    ax.clear()
    sns.heatmap(performance[:, :month+1], annot=True, fmt="d", cmap='YlGnBu', ax=ax)
    ax.set_xlabel('Month')
    ax.set_ylabel('Equipment')
    ax.set_title(f'Equipment Performance Up to Month {slider_month.val}')
    plt.draw()

slider_month.on_changed(update)
plt.show()

Output : 

8. Project Management and Task Automation

Technique: Gantt Charts with Subplots for Project Timelines

Example: Memvisualisasikan beberapa garis waktu proyek dengan ketergantungan menggunakan subplot.


import matplotlib.pyplot as plt
import pandas as pd

# Sample Data
tasks = {
    'Task': ['Design', 'Development', 'Testing', 'Deployment'],
    'Start': [1, 5, 15, 20],
    'Duration': [4, 10, 5, 2]
}
df = pd.DataFrame(tasks)
df['End'] = df['Start'] + df['Duration']

# Create Gantt Chart
fig, ax = plt.subplots(figsize=(10, 6))

for idx, row in df.iterrows():
    ax.barh(row['Task'], row['Duration'], left=row['Start'], height=0.4, color='skyblue')
    ax.text(row['Start'] + row['Duration']/2, idx, f"{row['Start']} - {row['End']}",
            va='center', ha='center', color='black')

ax.set_xlabel('Day')
ax.set_ylabel('Tasks')
ax.set_title('Project Timeline')
plt.show()

Output : 


9. Quality Management and Process Improvement

Technique: Box Plots for Defect Rate Analysis

Example: Membandingkan tingkat cacat di berbagai batch produksi untuk mengidentifikasi ketidakkonsistenan.

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

# Sample Data
np.random.seed(0)
batches = ['Batch 1', 'Batch 2', 'Batch 3', 'Batch 4', 'Batch 5']
defects = {
    'Batch 1': np.random.randint(0, 10, 50),
    'Batch 2': np.random.randint(0, 15, 50),
    'Batch 3': np.random.randint(0, 8, 50),
    'Batch 4': np.random.randint(0, 12, 50),
    'Batch 5': np.random.randint(0, 9, 50)
}
df = pd.DataFrame(defects)

# Box Plot
plt.figure(figsize=(10, 6))
sns.boxplot(data=df, palette='Set3')
plt.title('Defect Rates Across Production Batches')
plt.xlabel('Batches')
plt.ylabel('Number of Defects')
plt.grid(True)
plt.show()

Output : 

10. Administrative and Office Automation

Technique: Customized Bar Charts with Annotations for Reporting

Example: Menghasilkan laporan penggajian yang rinci dengan anotasi yang menyoroti perubahan gaji yang signifikan.

import matplotlib.pyplot as plt
import pandas as pd

# Sample Data
employees = ['Alice', 'Bob', 'Charlie', 'David', 'Eva']
salaries = [50000, 60000, 55000, 65000, 70000]
raises = [5000, 0, 2000, 5000, 3000]

df = pd.DataFrame({
    'Employee': employees,
    'Salary': salaries,
    'Raise': raises
})

# Bar Chart
fig, ax = plt.subplots(figsize=(10, 6))
bars = ax.bar(df['Employee'], df['Salary'], color='lightgreen')

# Annotations for Raises
for bar, raise_amt in zip(bars, df['Raise']):
    if raise_amt > 0:
        ax.annotate(f' +${raise_amt}',
                    xy=(bar.get_x() + bar.get_width() / 2, bar.get_height()),
                    xytext=(0, 5),
                    textcoords="offset points",
                    ha='center', va='bottom',
                    fontsize=10, color='blue')

ax.set_xlabel('Employees')
ax.set_ylabel('Salary ($)')
ax.set_title('Employee Salaries with Raises')
plt.show()

Output : 

11. Travel and Hospitality Management

Technique: Interactive Time Series Plots for Booking Patterns

Example: Memungkinkan pengguna untuk memfilter dan memvisualisasikan tren pemesanan selama periode waktu yang berbeda.

import matplotlib.pyplot as plt
from matplotlib.widgets import RangeSlider
import pandas as pd
import numpy as np

# Sample Data
dates = pd.date_range(start='2023-01-01', periods=365, freq='D')
bookings = np.random.poisson(lam=20, size=365)
df = pd.DataFrame({'Date': dates, 'Bookings': bookings})

# Initial Plot
fig, ax = plt.subplots(figsize=(15, 7))
plt.subplots_adjust(left=0.25, bottom=0.25)
line, = ax.plot(df['Date'], df['Bookings'], label='Daily Bookings')
ax.set_xlabel('Date')
ax.set_ylabel('Number of Bookings')
ax.set_title('Daily Booking Trends')
ax.legend()
ax.grid(True)

# Slider for Date Range
ax_slider = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider = RangeSlider(ax_slider, 'Date Range', 0, len(df)-1, valinit=(0, len(df)-1), valstep=1)

# Update Function
def update(val):
    start, end = slider.val
    ax.set_xlim(df['Date'].iloc[start], df['Date'].iloc[end])
    fig.canvas.draw_idle()

slider.on_changed(update)
plt.show()

Output : 



Conclusion

Teknik visualisasi data lanjutan dalam Matplotlib memberdayakan para profesional di berbagai industri untuk menyajikan data kompleks dalam format yang jelas, informatif, dan interaktif. Dengan memanfaatkan fitur seperti subplot untuk analisis komparatif, pemetaan 3D untuk data multi-dimensi, dan widget interaktif untuk eksplorasi dinamis, organisasi dapat mengungkap wawasan yang lebih dalam dan membuat keputusan yang lebih terinformasi. Baik mengoptimalkan jadwal produksi, mengelola inventaris, menganalisis risiko keuangan, atau memantau metrik kualitas, teknik Matplotlib yang canggih meningkatkan kemampuan untuk memvisualisasikan dan menginterpretasikan data dengan efektif. Ini mengarah pada peningkatan efisiensi operasional, perencanaan strategis, dan proses pengambilan keputusan yang lebih baik secara keseluruhan..


Comments

Popular posts from this blog

CRUD SPRING REACTIVE WEBFLUX +Mongo DB

Top 7 Digital Transformation Companies

100 perusahaan perangkat lunak (software) populer dari Eropa dan Amerika yang memiliki kehadiran atau operasional di Indonesia.

TOP 8 Framework Populer menggunakan bahasa .NET

Python Date and Time Manipulation

TOP 5 Trends Programming 2024

Daftar Kata Kunci (Keyword) dalam Bahasa Pemrograman Python

20 Data Center Terbesar di Dunia

Tahukah Kamu bagaimana algoritma social media facebook dan instagram bekerja ?