Matplotlibに2番目の(新しい)プロットを作成し、後で古いプロットをプロットするように指示するにはどうすればよいですか?


147

データをプロットしてから、新しい図を作成してdata2をプロットし、最後に元のプロットとdata3をプロットします。

import numpy as np
import matplotlib as plt

x = arange(5)
y = np.exp(5)
plt.figure()
plt.plot(x, y)

z = np.sin(x)
plt.figure()
plt.plot(x, z)

w = np.cos(x)
plt.figure("""first figure""") # Here's the part I need
plt.plot(x, w)

FYI プロットが終了したことをmatplotlibに伝えるにはどうすればよいですか?同様のことをしますが、完全ではありません 元のプロットにアクセスできません。

回答:


152

このようなことを定期的に行っている場合は、matplotlibへのオブジェクト指向インターフェースを調査する価値があるかもしれません。あなたの場合:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(5)
y = np.exp(x)
fig1, ax1 = plt.subplots()
ax1.plot(x, y)
ax1.set_title("Axis 1 title")
ax1.set_xlabel("X-label for axis 1")

z = np.sin(x)
fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure
ax2.plot(x, z)
ax3.plot(x, -z)

w = np.cos(x)
ax1.plot(x, w) # can continue plotting on the first axis

これはもう少し詳細ですが、特に複数のサブプロットを持つ複数の図を使用すると、追跡がずっと明確で簡単になります。


2
私はオブジェクト指向のアプローチを好みます。数字が多いと予想される場合は、数字ではなく名前を使用する方が追跡しやすいからです。ありがとう!
Peter D

1
しかし、この方法でラベルと軸の範囲を変更するにはどうすればよいでしょうか。使っax1.ylabelてみたら見つからないと書いてあります。fig1.ylabel...と同じ
George Datseris

3
@GeorgeDatseris構文は少し異なります。それはだax1.set_xlabel("your x label")ax1.set_ylabel("your y label")ax1.set_title("your title")
simonb 2016

1
なぜ111を使用したのですか?
Yash Sodha、2018年

2
@yashSodha-これは、サブプロット(行、列、インデックス)の数のMATLABスタイルの仕様です。しかし、を使用する方がはるかに簡単になりましたplt.subplots(nrows, ncols)。例を更新しました。
simonb 2018年

120

を呼び出すときはfigure、単にプロットに番号を付けます。

x = arange(5)
y = np.exp(5)
plt.figure(0)
plt.plot(x, y)

z = np.sin(x)
plt.figure(1)
plt.plot(x, z)

w = np.cos(x)
plt.figure(0) # Here's the part I need
plt.plot(x, w)

編集:プロットには任意の番号を付けることができます(ここではから開始0)が、新しい番号を作成するときに図に番号をまったく指定しない場合、自動番号付けは1( "Matlabスタイル"に従って開始されますドキュメントに)。


3
これはmatplotlibのインタラクティブモードで機能するように見えますが、figure()... add_subplot()メソッドは機能しません。ありがとう!
chbrown 2014

@SebMa理解せずにコードを変更しないでください。この答えは、具体的にはfigure、削除した数値をに渡すことに関するものでした。あなたが変更した他のことは元の投稿からコピーされたもので、私の答えに間違いはありませんでした。
agf

@agfこんにちは、番号は自動インクリメントされて1いるplt.figure(1)ため不要だと思ったため、内部を削除しました。ごめんなさい。
SebMa 2018年

18

ただし、番号付けはから始まる1ため、次のようになります。

x = arange(5)
y = np.exp(5)
plt.figure(1)
plt.plot(x, y)

z = np.sin(x)
plt.figure(2)
plt.plot(x, z)

w = np.cos(x)
plt.figure(1) # Here's the part I need, but numbering starts at 1!
plt.plot(x, w)

また、サブプロットなど、Figureに複数のAxes がある場合は、目的のAxesオブジェクトのハンドルであるaxes(h)whereコマンドを使用して、hそのAxesに焦点を合わせます。

(まだコメント権限を持っていません、新しい答えを申し訳ありません!)


10
0機能します。番号を付け1ない場合、自動番号付けはから始まります。
agf

0

苦労して見つけた1つの方法は、data_plotマトリックス、ファイル名、および順序をパラメーターとして取得する関数を作成して、順序付けられた図(異なる順序=異なる図)の特定のデータから箱ひげ図を作成し、それを特定のfile_nameに保存することです。

def plotFigure(data_plot,file_name,order):
    fig = plt.figure(order, figsize=(9, 6))
    ax = fig.add_subplot(111)
    bp = ax.boxplot(data_plot)
    fig.savefig(file_name, bbox_inches='tight')
    plt.close()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.