matplotlib
データ可視化の基盤となるプロットライブラリ。折れ線グラフ、散布図、棒グラフ、ヒストグラム、ヒートマップ、3Dグラフ、サブプロットの作成から PNG/PDF/SVG 形式でのエクスポートまで対応し、科学的な分析や論文用の図表制作に活用できます。
description の原文を見る
Foundational plotting library. Create line plots, scatter, bar, histograms, heatmaps, 3D, subplots, export PNG/PDF/SVG, for scientific visualization and publication figures.
SKILL.md 本文
Matplotlib
概要
Matplotlibはステティック、アニメーション、インタラクティブなプロットを作成するためのPythonの基礎的な可視化ライブラリです。このスキルでは、pyplot インターフェース(MATLAB風)とオブジェクト指向API(Figure/Axes)の両方をカバーし、論文掲載レベルの可視化を作成するためのベストプラクティスについてガイダンスを提供します。
このスキルを使用する場合
このスキルは以下の場合に使用してください:
- あらゆる種類のプロットやチャート(折れ線、散布図、棒グラフ、ヒストグラム、ヒートマップ、等高線図など)を作成する場合
- 科学的または統計的な可視化を生成する場合
- プロット外観をカスタマイズする場合(色、スタイル、ラベル、凡例など)
- サブプロットで複数パネル図を作成する場合
- 可視化をさまざまな形式(PNG、PDF、SVGなど)にエクスポートする場合
- インタラクティブプロットやアニメーションを構築する場合
- 3D可視化を使用する場合
- JupyterノートブックまたはGUIアプリケーションにプロットを統合する場合
コア概念
Matplotlibの階層構造
Matplotlibはオブジェクトの階層構造を使用しています:
- Figure - すべてのプロット要素の最上位コンテナ
- Axes - データが表示される実際のプロット領域(1つのFigureは複数のAxesを含むことができます)
- Artist - 図上に表示されるすべてのもの(線、テキスト、目盛りなど)
- Axis - 目盛りとラベルを処理する数値線オブジェクト(x軸、y軸)
2つのインターフェース
1. pyplotインターフェース(暗黙的、MATLAB風)
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
- 簡単な図をすばやく作成するのに便利
- 状態を自動的に維持
- インタラクティブな作業と簡単なスクリプトに適している
2. オブジェクト指向インターフェース(明示的)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])
ax.set_ylabel('some numbers')
plt.show()
- ほとんどのユースケースに推奨
- figureとaxesをより明示的に制御可能
- 複数のサブプロットを含む複雑な図に適している
- メンテナンスとデバッグが容易
一般的なワークフロー
1. 基本的なプロット作成
単一プロットのワークフロー:
import matplotlib.pyplot as plt
import numpy as np
# figureとaxesを作成(OOインターフェース - 推奨)
fig, ax = plt.subplots(figsize=(10, 6))
# データを生成してプロット
x = np.linspace(0, 2*np.pi, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
# カスタマイズ
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Trigonometric Functions')
ax.legend()
ax.grid(True, alpha=0.3)
# 保存と/または表示
plt.savefig('plot.png', dpi=300, bbox_inches='tight')
plt.show()
2. 複数のサブプロット
サブプロットレイアウトの作成:
# 方法1:通常のグリッド
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes[0, 0].plot(x, y1)
axes[0, 1].scatter(x, y2)
axes[1, 0].bar(categories, values)
axes[1, 1].hist(data, bins=30)
# 方法2:モザイクレイアウト(より柔軟)
fig, axes = plt.subplot_mosaic([['left', 'right_top'],
['left', 'right_bottom']],
figsize=(10, 8))
axes['left'].plot(x, y)
axes['right_top'].scatter(x, y)
axes['right_bottom'].hist(data)
# 方法3:GridSpec(最大限の制御)
from matplotlib.gridspec import GridSpec
fig = plt.figure(figsize=(12, 8))
gs = GridSpec(3, 3, figure=fig)
ax1 = fig.add_subplot(gs[0, :]) # 上行、全列
ax2 = fig.add_subplot(gs[1:, 0]) # 下2行、最初の列
ax3 = fig.add_subplot(gs[1:, 1:]) # 下2行、最後の2列
3. プロットタイプとユースケース
折れ線グラフ - 時系列、連続データ、トレンド
ax.plot(x, y, linewidth=2, linestyle='--', marker='o', color='blue')
散布図 - 変数間の関係、相関
ax.scatter(x, y, s=sizes, c=colors, alpha=0.6, cmap='viridis')
棒グラフ - カテゴリ別比較
ax.bar(categories, values, color='steelblue', edgecolor='black')
# 横棒の場合:
ax.barh(categories, values)
ヒストグラム - 分布
ax.hist(data, bins=30, edgecolor='black', alpha=0.7)
ヒートマップ - 行列データ、相関
im = ax.imshow(matrix, cmap='coolwarm', aspect='auto')
plt.colorbar(im, ax=ax)
等高線図 - 3Dデータを2D平面に表示
contour = ax.contour(X, Y, Z, levels=10)
ax.clabel(contour, inline=True, fontsize=8)
箱ひげ図 - 統計分布
ax.boxplot([data1, data2, data3], labels=['A', 'B', 'C'])
バイオリンプロット - 分布密度
ax.violinplot([data1, data2, data3], positions=[1, 2, 3])
包括的なプロットタイプの例とバリエーションについては、references/plot_types.md を参照してください。
4. スタイリングとカスタマイズ
色の指定方法:
- 名前付き色:
'red','blue','steelblue' - 16進数コード:
'#FF5733' - RGBタプル:
(0.1, 0.2, 0.3) - カラーマップ:
cmap='viridis',cmap='plasma',cmap='coolwarm'
スタイルシートの使用:
plt.style.use('seaborn-v0_8-darkgrid') # 事前定義スタイルを適用
# 利用可能なスタイル:'ggplot'、'bmh'、'fivethirtyeight'など
print(plt.style.available) # すべての利用可能なスタイルを表示
rcParamsでのカスタマイズ:
plt.rcParams['font.size'] = 12
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['axes.titlesize'] = 16
plt.rcParams['xtick.labelsize'] = 10
plt.rcParams['ytick.labelsize'] = 10
plt.rcParams['legend.fontsize'] = 12
plt.rcParams['figure.titlesize'] = 18
テキストと注釈:
ax.text(x, y, 'annotation', fontsize=12, ha='center')
ax.annotate('important point', xy=(x, y), xytext=(x+1, y+1),
arrowprops=dict(arrowstyle='->', color='red'))
詳細なスタイリングオプションとカラーマップガイドについては、references/styling_guide.md を参照してください。
5. 図の保存
さまざまな形式へのエクスポート:
# プレゼンテーション/論文用の高解像度PNG
plt.savefig('figure.png', dpi=300, bbox_inches='tight', facecolor='white')
# 出版用のベクトル形式(スケーラブル)
plt.savefig('figure.pdf', bbox_inches='tight')
plt.savefig('figure.svg', bbox_inches='tight')
# 透明背景
plt.savefig('figure.png', dpi=300, bbox_inches='tight', transparent=True)
重要なパラメータ:
dpi:解像度(出版用は300、ウェブ用は150、画面用は72)bbox_inches='tight':余分な空白を削除facecolor='white':白い背景を保証(透明なテーマに有用)transparent=True:透明背景
6. 3Dプロットの操作
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# サーフェスプロット
ax.plot_surface(X, Y, Z, cmap='viridis')
# 3D散布図
ax.scatter(x, y, z, c=colors, marker='o')
# 3D折れ線プロット
ax.plot(x, y, z, linewidth=2)
# ラベル
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
ベストプラクティス
1. インターフェース選択
- 本番コードではオブジェクト指向インターフェースを使用(fig, ax = plt.subplots())
- pyplotインターフェースは簡単なインタラクティブ探索のみに予約
- 暗黙的な状態に頼るのではなく、常に明示的にfigureを作成
2. 図のサイズとDPI
- 作成時にfigを設定:
fig, ax = plt.subplots(figsize=(10, 6)) - 出力媒体に適切なDPIを使用:
- 画面/ノートブック:72-100 dpi
- ウェブ:150 dpi
- 印刷/出版:300 dpi
3. レイアウト管理
constrained_layout=Trueまたはtight_layout()を使用して、要素の重複を防止fig, ax = plt.subplots(constrained_layout=True)は自動間隔調整に推奨
4. カラーマップ選択
- 順序的(viridis、plasma、inferno):一貫した進行を持つ順序データ
- 発散(coolwarm、RdBu):意味のある中心点(例:ゼロ)を持つデータ
- 定性的(tab10、Set3):カテゴリー/名義データ
- レインボーカラーマップ(jet)を避ける - 知覚的に均一ではない
5. アクセシビリティ
- 色覚異常対応のカラーマップを使用(viridis、cividis)
- 色に加えてパターン/ハッチングを棒グラフに追加
- 要素間の十分なコントラストを確保
- わかりやすいラベルと凡例を含める
6. パフォーマンス
- 大規模なデータセットの場合、プロット呼び出しで
rasterized=Trueを使用してファイルサイズを削減 - プロット前に適切なデータ削減を使用(例:密な時系列をダウンサンプリング)
- アニメーションの場合、blittingを使用してパフォーマンスを向上
7. コード構成
# 良いプラクティス:明確な構造
def create_analysis_plot(data, title):
"""標準化された分析プロットを作成します。"""
fig, ax = plt.subplots(figsize=(10, 6), constrained_layout=True)
# データをプロット
ax.plot(data['x'], data['y'], linewidth=2)
# カスタマイズ
ax.set_xlabel('X Axis Label', fontsize=12)
ax.set_ylabel('Y Axis Label', fontsize=12)
ax.set_title(title, fontsize=14, fontweight='bold')
ax.grid(True, alpha=0.3)
return fig, ax
# 関数を使用
fig, ax = create_analysis_plot(my_data, 'My Analysis')
plt.savefig('analysis.png', dpi=300, bbox_inches='tight')
クイックリファレンススクリプト
このスキルは scripts/ ディレクトリにヘルパースクリプトを含みます:
plot_template.py
さまざまなプロットタイプとベストプラクティスを紹介するテンプレートスクリプト。新しい可視化を作成するための出発点として使用してください。
使用方法:
python scripts/plot_template.py
style_configurator.py
matplotlib スタイルの設定と、カスタムスタイルシートを生成するためのインタラクティブユーティリティ。
使用方法:
python scripts/style_configurator.py
詳細なリファレンス
包括的な情報については、以下のリファレンスドキュメントを参照してください:
references/plot_types.md- プロットタイプの完全なカタログ(コード例とユースケース付き)references/styling_guide.md- 詳細なスタイリングオプション、カラーマップ、カスタマイズreferences/api_reference.md- コアクラスとメソッドのリファレンスreferences/common_issues.md- 一般的な問題のトラブルシューティングガイド
他のツールとの統合
Matplotlibは以下とよく統合されます:
- NumPy/Pandas - 配列とDataFrameからの直接プロット
- Seaborn - matplotlibに基づく高レベルの統計的可視化
- Jupyter -
%matplotlib inlineまたは%matplotlib widgetでのインタラクティブプロット - GUIフレームワーク - Tkinter、Qt、wxPythonアプリケーションへの埋め込み
よくある落とし穴
- 要素の重複:
constrained_layout=Trueまたはtight_layout()を使用 - 状態の混乱:pyplotのステートマシン問題を避けるためにOOインターフェースを使用
- 多くの図でのメモリ問題:
plt.close(fig)で明示的にfigureを閉じる - フォント警告:フォントをインストールするか、
plt.rcParams['font.sans-serif']で警告を抑制 - DPI混乱:figsizeはピクセルではなくインチであることに注意:
pixels = dpi * inches
追加リソース
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。