Python
 Computer >> コンピューター >  >> プログラミング >> Python

2つの既存のMatplotlibプロットを1つのプロットにマージする方法

Matplotlibで作成済みの2つのプロットを1つのグラフに統合したい場合、各プロットのデータ点を抽出して結合し、新しいサブプロットに再描画するというアプローチが有効です。以下の手順で実現できます。

実装の手順

  • figureサイズを設定し、rcParamsでサブプロット間・周囲の余白を自動調整します。
  • NumPyを使って x、y1、y2 のデータ点を作成します。
  • plot() メソッドで (x, y1) と (x, y2) をそれぞれプロットします。
  • get_lines()get_xydata() を使って、現在のAxes上の全ラインからxyデータ点を取得します。
  • argsort() を使って、x値を昇順に並べ替えるためのインデックスを求めます。これにより、結合後のデータが正しい順序で並びます。
  • 各プロットのxおよびyのデータ点をリストに追加(結合)します。
  • 2番目のサブプロットに、結合したX・Yデータ点を描画します。
  • show() メソッドで図を表示します。

サンプルコード

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.linspace(-10, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 上段:元の2つのプロット
plt.subplot(211)
plt.plot(x, y1, color='red', lw=5)
plt.plot(x, y2, color='orange', lw=7)

# データ点を抽出して結合
X, Y = [], []

for lines in plt.gca().get_lines():
   for x, y in lines.get_xydata():
      X.append(x)
      Y.append(y)

# x値でソートして曲線を滑らかにつなげる
idx = np.argsort(X)
X = np.array(X)[idx]
Y = np.array(Y)[idx]

# 下段:マージされたプロット
plt.subplot(212)
plt.plot(X, Y, color='green', lw=0.75)

plt.show()

出力結果

上段にはsin波(赤)とcos波(オレンジ)の2つのプロットが表示され、下段にはそれらのデータ点を結合・ソートした単一の緑色のプロットが描画されます。

この手法のポイントは、get_xydata() で各ラインの実際のデータ点を取得し、np.argsort() でx値の順序を整えてから再プロットすることです。これにより、複数の系列データを1本の折れ線として自然につなげることができます。

  1. Matplotlibで2本の点線をプロットする方法|マーカー・線種・凡例の設定も解説

    はじめに この記事では、Pythonの可視化ライブラリ「Matplotlib」を使って、2本の線を1つのグラフに描画し、それぞれに異なる線種(点線・破線)や色、太さを設定する方法を解説します。 コーディングを始める前に、まず次のコマンドでMatplotlibをインポートしておきましょう。 import matplotlib.pyplot as plt Pyplotは、MatplotlibをMATLABのように直感的に操作できるようにするためのコマンドスタイル関数のコレクションです。グラフの描画からラベル付けまで、ほとんどの操作をこのモジュール経由で行います。 アルゴリズム(処理の流れ) ステ

  2. 2つのmacOSユーザーアカウントを1つに統合する方法

    macOSで2つのユーザーアカウントを使っていて、それらを1つにまとめたいと思ったことはありませんか?残念ながら、macOSにはアカウントを直接マージする標準機能は用意されていません。そこで本記事では、片方のアカウントのデータをバックアップしてから削除し、もう片方のアカウントへ移行・統合するまでの手順を詳しく解説します。1. データのエクスポートここで紹介する方法は、システム上に存在するローカルファイルを統合するというものです。ユーザーのホームフォルダ内にあるすべてのローカルファイルはディスクイメージとして保存され、新しいアカウントからアクセスできます。ただし、ローカルファイルにはアプリのバッ