🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

Q&A

解決済

2回答

3329閲覧

コードのまとまりをセルで細かく分割すると正常に実行されない(jupyter notebook)

KKNN

総合スコア2

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

0グッド

1クリップ

投稿2020/12/28 08:44

コードのまとまりを細かくセルで分割すると正常に実行されない(jupyter notebook)

jupyter notebookにおける初歩的な質問ですが、ひとまとまりのコードを細かく別々のセルに分けてしまうと、実行が上手くいかなくなるのはなぜでしょうか?

以下のような散布図プロットのコードを実行したのですが、改行してある箇所毎で別々のセルに書き分けて、上から順に実行してみました。
この方法だと、最後のplt.show()を実行してもグラフもエラーもなにも表示されませんでしたが、全てまとめて1つのセル内で実行するとグラフが正常に表示されます。

細かく分けた場合でも1つ1つのコードはエラーなく実行されているから問題ないと思ったのですが、なぜこうなってしまうのでしょうか?

以下、実行したコードです。
よろしくお願いいたします。

Python

1 2import pandas as pd 3import matplotlib.pyplot as plt 4 5data=pd.read_csv(r"C:(省略)\train.csv") 6 7fig = plt.figure() 8 9ax=fig.add_subplot(1,2,1) 10ax.plot(data['GrLivArea'],data['SalePrice'],'.') 11ax.set_xlabel('GrLivArea',fontSize=14) 12ax.set_ylabel('SalePrice',fontSize=14) 13 14ax=fig.add_subplot(1,2,2) 15ax.plot(data['MSSubClass'],data['SalePrice'],'.') 16ax.set_xlabel('MSSubClass',fontSize=14) 17ax.set_ylabel('SalePrice',fontSize=14) 18 19fig.tight_layout() 20 21plt.show()

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

おそらくですが、jupyterとmatplotlibの仕様が原因かと思われます。notebookのセルが異なることによりプロットの設定がクリアされているのでしょう。

Jupyter Notebook 上で Matplotlib はどう動いているのか?

Current figure がクリアされる条件はいくつかある

plt.show() でグラフを表示するとクリアされる
plt.close() で明示的にクリアすることもできる。グラフを生成したいが表示はしたくないときに便利
plt.figure() などで新しい figure を作ると、current figure がそれに置き換わる
Jupyter notebook では、セルを抜けるとクリアされる

Jupyter notebook における current figure 関連の挙動は少し癖がある

Jupyter notebook はセルを抜ける際に current figure に格納されているグラフを表示する
同じセル内では current figure を共有するが、異なるセルの間では共有されない (セルを抜ける際にクリアするから)

投稿2020/12/28 09:15

meg_

総合スコア10736

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「細かく分けた場合でも1つ1つのコードはエラーなく実行されているから問題ないと思ったのですが、なぜこうなってしまうのでしょうか?」の答えにはなっていないですが、
上記のコードの場合、
各セルの最後に「fig」と打てば
以前のセルのデータを受け継いだ状態でfigureを表示できるはずです。

(下記# --------------は、セルの区切りを示す)

jupyter

1import pandas as pd 2import matplotlib.pyplot as plt 3 4# -------------- 5data=pd.read_csv(r"C:(省略)\train.csv") 6 7# -------------- 8fig = plt.figure() 9# 空のfigは表示できない 10 11# -------------- 12ax=fig.add_subplot(1,2,1) 13ax.plot(data['GrLivArea'],data['SalePrice'],'.') 14ax.set_xlabel('GrLivArea',fontSize=14) 15ax.set_ylabel('SalePrice',fontSize=14) 16fig 17 18# -------------- 19ax=fig.add_subplot(1,2,2) 20ax.plot(data['MSSubClass'],data['SalePrice'],'.') 21ax.set_xlabel('MSSubClass',fontSize=14) 22ax.set_ylabel('SalePrice',fontSize=14) 23fig 24 25# -------------- 26fig.tight_layout() 27fig 28

投稿2020/12/28 09:13

編集2020/12/28 09:23
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KKNN

2021/03/21 05:08

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問