質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • Python

    12364questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10333questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pythonでのグラフ複数表示

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 369

kamikura

score 4

pythonを用いて、グラフの複数表示をしようとしているのですがうまくいきません。
現状問題としては、表示したいグラフは表示されるが、Figure1に全てのデータが入っているようです。
文字列で表すと以下の様になります。

表示の理想
Figure1    Figure2
1a 3a      1b 3b
2a 4a      2b 4b

のような形で複数のFigureの中にそれぞれ複数のグラフを内包するような形での表示をしたいです。
今の状態だと、最初にFigure1が表示され、そのウィンドウを消すと新たにFigure1が生成されます。
ここ最初に生成されたFigure1のほうには、1a~4aのグラフが内包されていて、
後から生成されたFigure1のほうには、1b~4bのグラフが内包されています。

今後のデータ処理の関係上、Figure1からFigure4を生成出来る様になれば良いのですが…。

以下に表示部分に関するソースを提示します。
分かりにくいかと思いますが宜しくお願いします。

#ウェーブレット解析結果の可視化
plt.close("all")
plt.ioff()
figprops = dict(figsize=(11, 8), dpi=72)
fig = plt.figure(**figprops)

ax1 = plt.axes([0.1, 0.75, 0.65, 0.2])
ax1.plot(t1, iwave, "-", linewidth=1, color=[0.5, 0.5, 0.5])
ax1.plot(t1, dat1, "k", linewidth=1.5)
ax1.set_title("a) {}".format(title))
ax1.set_ylabel(r"{}".format(label))

bx1 = plt.axes([0.1, 0.37, 0.65, 0.28], sharex=ax1)
levels = [0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32]
bx1.contourf(t1, np.log2(period), np.log2(power), np.log2(levels), extend="both", cmap=plt.cm.viridis)
extent = [t1.min(), t1.max(), 0, max(period)]
bx1.contour(t1, np.log2(period), sig95, [-99, 1], colors="k", linewidths=2, extent=extent)
bx1.fill(np.concatenate([t1, t1[-1:] + dt, t1[-1:] + dt,
                        t1[:1] - dt, t1[:1] - dt]), 
        np.concatenate([np.log2(coi), [1e-9], np.log2(period[-1:]),
                       np.log2(period[-1:]), [1e-9]]),
        "k", alpha=0.3, hatch="x")
bx1.set_title("b){} Wavelet Power Spectrum ({})".format(label, mother.name))
bx1.set_ylabel("Period")

Yticks = 2 ** np.arange(np.ceil(np.log2(period.min())), np.ceil(period.max()))
bx1.set_yticks(np.log2(Yticks))
bx1.set_yticklabels(Yticks)

cx1 = plt.axes([0.77, 0.37, 0.2, 0.28], sharey=bx1)
cx1.plot(glbl_signif, np.log2(period), "k--")
cx1.plot(var * fft_theor, np.log2(period), "--", color="#cccccc")
cx1.plot(var * fft_power, np.log2(1./fftfreqs), "-", color="#cccccc", linewidth=1.)
cx1.plot(var * glbl_power, np.log2(period), "k-", linewidth=1.5)
cx1.set_title("c) Global Wavelet Spectrum")
cx1.set_xlabel(r"Power {}^2".format(units))
cx1.set_xlim([0, glbl_power.max() + var])
cx1.set_ylim(np.log2([period.min(), period.max()]))
cx1.set_yticks(np.log2(Yticks))
cx1.set_yticklabels(Yticks)
plt.setp(cx1.get_yticklabels(), visible=False)

#----------------------------------------------------------------------
dx1 = plt.axes([0.1, 0.07, 0.65, 0.2], sharex=ax1)#グラフの配置指定、
dx1.axhline(scale_avg_signif, color="k", linestyle="--", linewidth=1.)#xに対する平行な線、出力内容は不明…
dx1.plot(t1, scale_avg, "k-", linewidth=1.5)#ここのプロット結果を行列?か何かで出力したい
#----------------------------------------------------------------------

dx1.set_title("d) {}--{} EMG[V] power spectrum".format(t0, max(t1)))
dx1.set_xlabel("Time [{}]".format(timetable))
dx1.set_ylabel(r"Scale Avg")
ax1.set_xlim([t1.min(), t1.max()])

plt.show()

#ウェーブレット解析結果の可視化2
plt.close("all")
plt.ioff()
figprops = dict(figsize=(11, 8), dpi=72)
fig = plt.figure(**figprops)

ax2 = plt.axes([0.1, 0.75, 0.65, 0.2])
ax2.plot(t2, iwave, "-", linewidth=1, color=[0.5, 0.5, 0.5])
ax2.plot(t2, dat2, "k", linewidth=1.5)
ax2.set_title("a) {}".format(title))
ax2.set_ylabel(r"{}".format(label))

bx2 = plt.axes([0.1, 0.37, 0.65, 0.28], sharex=ax2)
levels = [0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32]
bx2.contourf(t2, np.log2(period2), np.log2(power2), np.log2(levels), extend="both", cmap=plt.cm.viridis)
extent = [t2.min(), t2.max(), 0, max(period2)]
bx2.contour(t2, np.log2(period2), sig95_2, [-99, 1], colors="k", linewidths=2, extent=extent)
bx2.fill(np.concatenate([t2, t2[-1:] + dt, t2[-1:] + dt,
                        t2[:1] - dt, t2[:1] - dt]), 
        np.concatenate([np.log2(coi), [1e-9], np.log2(period2[-1:]),
                       np.log2(period2[-1:]), [1e-9]]),
        "k", alpha=0.3, hatch="x")
bx2.set_title("b){} Wavelet Power Spectrum ({})".format(label, mother.name))
bx2.set_ylabel("Period")

Yticks = 2 ** np.arange(np.ceil(np.log2(period2.min())), np.ceil(period2.max()))
bx2.set_yticks(np.log2(Yticks))
bx2.set_yticklabels(Yticks)

cx2 = plt.axes([0.77, 0.37, 0.2, 0.28], sharey=bx2)
cx2.plot(glbl_signif2, np.log2(period2), "k--")
cx2.plot(var2 * fft_theor, np.log2(period2), "--", color="#cccccc")
cx2.plot(var2 * fft_power2, np.log2(1./fftfreqs), "-", color="#cccccc", linewidth=1.)
cx2.plot(var2 * glbl_power2, np.log2(period2), "k-", linewidth=1.5)
cx2.set_title("c) Global Wavelet Spectrum")
cx2.set_xlabel(r"Power {}^2".format(units))
cx2.set_xlim([0, glbl_power2.max() + var2])
cx2.set_ylim(np.log2([period2.min(), period2.max()]))
cx2.set_yticks(np.log2(Yticks))
cx2.set_yticklabels(Yticks)
plt.setp(cx2.get_yticklabels(), visible=False)

#----------------------------------------------------------------------
dx2 = plt.axes([0.1, 0.07, 0.65, 0.2], sharex=ax2)
dx2.axhline(scale_avg_signif2, color="k", linestyle="--", linewidth=1.)
dx2.plot(t2, scale_avg2, "k-", linewidth=1.5)
#----------------------------------------------------------------------

dx2.set_title("d) {}--{} EMG[V] power spectrum".format(t0, max(t2)))
dx2.set_xlabel("Time [{}]".format(timetable))
dx2.set_ylabel(r"Scale Avg")
ax2.set_xlim([t2.min(), t2.max()])

plt.show()
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

一度に複数のfigureを表示したいということであれば、plt.show()を最後の一回だけにしてみたらどうですか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/05 17:39

    回答どうもありがとうございます。
    plt.show()を最後だけにした結果、2番目のFigureのみが表示されました。
    (1番目のFigureは表示されず)
    ちなみに、Figure1として出力されました。

    キャンセル

  • 2019/01/05 17:58

    plt.close("all")のせいで最初のFigureが消されてますね。plt.closeもやめてみてください。

    キャンセル

  • 2019/01/05 18:07

    お返事ありがとうございます。
    2つ目のplt.close("all")を消去して走らせてみましたが、やはり1つずつしか表示されませんでした。
    根本的に複数のグラフを内包するFigureの複数同時生成は無理なのでしょうか…?

    キャンセル

  • 2019/01/05 18:12 編集

    たとえば

    import matplotlib.pyplot as plt
    a = [a for a in range(10)]
    b = [-a for a in a]
    plt.figure(figsize=(2, 2))
    a = plt.plot(a)
    plt.figure(figsize=(2, 2))
    b = plt.plot(b)
    plt.show()

    のようなコードなら、私の環境では同時に2つのFigureが表示されます。
    何かが問題なのだと思います。

    キャンセル

  • 2019/01/05 18:20

    お返事ありがとうございます。
    今私のほうでも、元コードで同時表示することが出来ました。
    恐らく、
    plt.ioff()
    figprops = dict(figsize=(11, 8), dpi=72)
    fig = plt.figure(**figprops)
    のfigpropsを個別化していなかったのが問題の様に感じます…
    ともあれ同時に表示できるようになりました。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    12364questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10333questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。