Skip to main content

matplotlib-visualization

Create pump performance curves, velocity contours, and engineering plots

소스 정보

저장소
Soljourner/claude-engineering-skills
최근 소스 활동
2025년 11월 7일 22:15
감지된 SKILL.md 언어
영어
스타
102
포크
21

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
3 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
matplotlib-visualization
description
Create pump performance curves, velocity contours, and engineering plots
category
packages
domain
general
complexity
basic
dependencies
["matplotlib","numpy"]
# Matplotlib Visualization for Engineering Create professional engineering plots including pump performance curves, CFD results visualization, velocity contours, and publication-quality figures. ## Installation and Setup ```bash pip install matplotlib numpy scipy ``` Basic import pattern: ```python import matplotlib.pyplot as plt import numpy as np from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D # Set style for professional figures plt.style.use('seaborn-v0_8-darkgrid') # or 'classic', 'bmh', 'ggplot' ``` ## Common Plot Types for Engineering ### Pump Performance Curves (H-Q, P-Q, η-Q) Standard pump characteristic curves showing head, power, and efficiency vs flow rate: ```python import matplotlib.pyplot as plt import numpy as np # Sample pump data Q = np.linspace(0, 120, 50) # Flow rate [m³/h] H = 80 - 0.005 * Q**2 # Head [m] P = 5 + 0.08 * Q + 0.0005 * Q**2 # Power [kW] eta = (Q * H) / (367 * P) * 100 # Efficiency [%] # Create figure with three subplots fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 10), sharex=True) # Head-Flow curve ax1.plot(Q, H, 'b-', linewidth=2, label='Head curve') ax1.set_ylabel('Head [m]', fontsize=12) ax1.set_title('Pump Performance Curves', fontsize=14, fontweight='bold') ax1.grid(True, alpha=0.3) ax1.legend() # Power-Flow curve ax2.plot(Q, P, 'r-', linewidth=2, label='Power curve') ax2.set_ylabel('Power [kW]', fontsize=12) ax2.grid(True, alpha=0.3) ax2.legend() # Efficiency-Flow curve ax3.plot(Q, eta, 'g-', linewidth=2, label='Efficiency curve') ax3.set_xlabel('Flow Rate [m³/h]', fontsize=12) ax3.set_ylabel('Efficiency [%]', fontsize=12) ax3.grid(True, alpha=0.3) ax3.legend() plt.tight_layout() plt.savefig('pump_curves.png', dpi=300, bbox_inches='tight') plt.show() ``` ### System Curves Plot pump curve with system curve overlay to find operating point: ```python # Pump curve Q = np.linspace(0, 120, 50) H_pump = 80 - 0.005 * Q**2 # System curve: H = H_static + k*Q² H_static = 20 # Static head [m] k = 0.003 # System resistance coefficient H_system = H_static + k * Q**2 fig, ax = plt.subplots(figsize=(10, 6)) ax.plot(Q, H_pump, 'b-', linewidth=2, label='Pump curve') ax.plot(Q, H_system, 'r--', linewidth=2, label='System curve') # Find and mark operating point idx = np.argmin(np.abs(H_pump - H_system)) ax.plot(Q[idx], H_pump[idx], 'ko', markersize=10, label=f'Operating point\n({Q[idx]:.1f} m³/h, {H_pump[idx]:.1f} m)') ax.set_xlabel('Flow Rate [m³/h]', fontsize=12) ax.set_ylabel('Head [m]', fontsize=12) ax.set_title('Pump and System Curves', fontsize=14, fontweight='bold') ax.grid(True, alpha=0.3) ax.legend(fontsize=10) plt.tight_layout() plt.savefig('system_curve.png', dpi=300, bbox_inches='tight') plt.show() ``` ### Velocity/Pressure Contours Visualize CFD results with contour plots: ```python import matplotlib.pyplot as plt import numpy as np # Create mesh grid x = np.linspace(0, 10, 100) y = np.linspace(0, 5, 50) X, Y = np.meshgrid(x, y) # Example velocity field (flow around obstacle) U = 2.0 - 1.5 * np.exp(-((X-3)**2 + (Y-2.5)**2) / 2) V = 0.5 * np.sin(np.pi * X / 5) * np.exp(-((X-3)**2 + (Y-2.5)**2) / 4) velocity = np.sqrt(U**2 + V**2) fig, ax = plt.subplots(figsize=(12, 6)) # Filled contours levels = np.linspace(velocity.min(), velocity.max(), 20) contourf = ax.contourf(X, Y, velocity, levels=levels, cmap='jet') cbar = plt.colorbar(contourf, ax=ax, label='Velocity [m/s]') # Optional: Add contour lines contour = ax.contour(X, Y, velocity, levels=10, colors='k', linewidths=0.5, alpha=0.4) ax.clabel(contour, inline=True, fontsize=8, fmt='%.2f') ax.set_xlabel('x [m]', fontsize=12) ax.set_ylabel('y [m]', fontsize=12) ax.set_title('Velocity Contour Plot', fontsize=14, fontweight='bold') ax.set_aspect('equal') plt.tight_layout() plt.savefig('velocity_contour.png', dpi=300, bbox_inches='tight') plt.show() ``` ### Vector Fields Display flow direction and magnitude: ```python import matplotlib.pyplot as plt import numpy as np # Create coarser grid for vectors x = np.linspace(0, 10, 20) y = np.linspace(0, 5, 10) X, Y = np.meshgrid(x, y) # Velocity components U = 2.0 - 1.5 * np.exp(-((X-3)**2 + (Y-2.5)**2) / 2) V = 0.5 * np.sin(np.pi * X / 5) * np.exp(-((X-3)**2 + (Y-2.5)**2) / 4) velocity = np.sqrt(U**2 + V**2) fig, ax = plt.subplots(figsize=(12, 6)) # Quiver plot with color by magnitude quiver = ax.quiver(X, Y, U, V, velocity, cmap='viridis', scale=30, width=0.003) cbar = plt.colorbar(quiver, ax=ax, label='Velocity magnitude [m/s]') ax.set_xlabel('x [m]', fontsize=12) ax.set_ylabel('y [m]', fontsize=12) ax.set_title('Velocity Vector Field', fontsize=14, fontweight='bold') ax.set_aspect('equal') plt.tight_layout() plt.savefig('velocity_vectors.png', dpi=300, bbox_inches='tight') plt.show() ``` ### 3D Surface Plots Visualize pressure or temperature distributions: ```python import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D # Create mesh x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) # Example: Pressure distribution Z = 100 + 10 * np.exp(-0.1 * (X**2 + Y**2)) * np.cos(0.5 * np.sqrt(X**2 + Y**2)) fig = plt.figure(figsize=(12, 8)) ax = fig.add_subplot(111, projection='3d') # Surface plot surf = ax.plot_surface(X, Y, Z, cmap='coolwarm', linewidth=0, antialiased=True, alpha=0.9) # Customize ax.set_xlabel('x [m]', fontsize=11) ax.set_ylabel('y [m]', fontsize=11) ax.set_zlabel('Pressure [kPa]', fontsize=11) ax.set_title('Pressure Distribution', fontsize=14, fontweight='bold', pad=20) # Add colorbar cbar = fig.colorbar(surf, ax=ax, shrink=0.5, aspect=5, label='Pressure [kPa]') # Set viewing angle ax.view_init(elev=25, azim=45) plt.tight_layout() plt.savefig('pressure_3d.png', dpi=300, bbox_inches='tight') plt.show() ``` ### Subplots and Multi-Panel Figures Complex layouts for comprehensive analysis: ```python import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(14, 10)) # Create 2x2 grid gs = fig.add_gridspec(2, 2, hspace=0.3, wspace=0.3) # Subplot 1: Line plot ax1 = fig.add_subplot(gs[0, 0]) x = np.linspace(0, 100, 100) y1 = 80 - 0.005 * x**2 ax1.plot(x, y1, 'b-', linewidth=2) ax1.set_xlabel('Flow Rate [m³/h]') ax1.set_ylabel('Head [m]') ax1.set_title('(a) Pump Curve') ax1.grid(True, alpha=0.3) # Subplot 2: Contour ax2 = fig.add_subplot(gs[0, 1]) x = np.linspace(0, 10, 50) y = np.linspace(0, 5, 25) X, Y = np.meshgrid(x, y) Z = np.sin(X) * np.cos(Y) contourf = ax2.contourf(X, Y, Z, levels=15, cmap='RdBu_r') plt.colorbar(contourf, ax=ax2, label='Value') ax2.set_xlabel('x [m]') ax2.set_ylabel('y [m]') ax2.set_title('(b) Contour Plot') # Subplot 3: Bar chart ax3 = fig.add_subplot(gs[1, 0]) categories = ['Case 1', 'Case 2', 'Case 3', 'Case 4'] values = [75, 82, 68, 91] bars = ax3.bar(categories, values, color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']) ax3.set_ylabel('Efficiency [%]') ax3.set_title('(c) Performance Comparison') ax3.grid(True, axis='y', alpha=0.3) # Subplot 4: Scatter with trend ax4 = fig.add_subplot(gs[1, 1]) x_data = np.random.rand(50) * 100 y_data = 30 + 0.5 * x_data + np.random.randn(50) * 5 ax4.scatter(x_data, y_data, alpha=0.6, s=50) # Add trend line z = np.polyfit(x_data, y_data, 1) p = np.poly1d(z) ax4.plot(x_data, p(x_data), 'r--', linewidth=2, label=f'y={z[0]:.2f}x+{z[1]:.2f}') ax4.set_xlabel('Parameter X') ax4.set_ylabel('Parameter Y') ax4.set_title('(d) Correlation Analysis') ax4.legend() ax4.grid(True, alpha=0.3) plt.suptitle('Multi-Panel Engineering Analysis', fontsize=16, fontweight='bold', y=0.995) plt.savefig('multipanel.png', dpi=300, bbox_inches='tight') plt.show() ``` ## Styling for Professional Figures ### Using Style Sheets ```python # Available styles import matplotlib.pyplot as plt print(plt.style.available) # Apply a style plt.style.use('seaborn-v0_8-whitegrid') # Or create custom style plt.rcParams['font.family'] = 'serif' plt.rcParams['font.size'] = 11 plt.rcParams['axes.linewidth'] = 1.5 plt.rcParams['lines.linewidth'] = 2 plt.rcParams['grid.alpha'] = 0.3 ``` ### Custom Colors and Styling ```python # Professional color schemes colors_engineering = { 'blue': '#0072BD', 'red': '#D95319', 'yellow': '#EDB120', 'purple': '#7E2F8E', 'green': '#77AC30', 'cyan': '#4DBEEE', 'maroon': '#A2142F' } # Apply to plots fig, ax = plt.subplots(figsize=(10, 6)) ax.plot(x, y1, color=colors_engineering['blue'], linewidth=2.5, label='Series 1') ax.plot(x, y2, color=colors_engineering['red'], linewidth=2.5, label='Series 2') ``` ### LaTeX in Labels Enable LaTeX rendering for mathematical expressions:
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기