web-dev-qa-db-ja.com

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

データをプロットしてから、新しいFigureを作成して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にプロットが完了したことを伝えるにはどうすればよいですか? 元のプロットにアクセスできません。

111
Peter D

このようなことを定期的に行っている場合は、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

これはもう少し冗長ですが、特に複数のサブプロットを持つ複数の図の場合は、追跡がずっと明確で簡単です。

131
simonb

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スタイル「ドキュメントによると)。

89
agf

ただし、番号付けは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(h)コマンドを使用します。ここで、hは目的のAxesオブジェクトのハンドルで、そのAxesに焦点を合わせます。

(コメントの権限はまだありません、新しい回答を申し訳ありません!)

13
Ross B.

苦労して見つけた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()
0
emir