【Python基礎】出力結果をクリアする方法(IPython.display clear_output)とmatplotlibのグラフ表示のクリア

  • URLをコピーしました!
目次

clear_output

前回、numpyの二次元リスト、三次元リストの合計値、平均値、標準偏差、分散値を計算する方法を解説しました。

今回はprint関数で出力される結果をクリアする方法を解説していきます。

それでは始めていきましょう。

clear_outputの使い方

「clear_output」を使うには「IPython.display」をインポートします。

そして出力をクリアしたい場所で「clear_output()」を記述するだけです。

(Timeモジュールは動画撮影のために使っています)

from IPython.display import clear_output
import time

time.sleep(10)
for i in range(100):
    clear_output()
    print(i)
    time.sleep(0.5)

こんな感じで出力をクリアできます。

うまくやればタイマーのように使うことができます。

matplotlibのグラフ保存に便利

で、どんな時に便利かというと私はmatplotlibのグラフを大量に保存する時に使っています。

Jupyter Notebook上でmatplotlibを使ってグラフを作成すると、「plt.show()」をしていないのに表示されてしまうことがあります。

そんな状態でグラフを大量に作成・保存すると画像を表示する方にメモリが取られてしまい、最悪、処理の途中でパソコンが止まってしまいます。

ということで保存することがメインの場合、出力をクリアしてメモリを解放してやるということです。

例えばこんなXを1から100、Yをランダムに100個準備し、matplotlibで10回グラフ表示するプログラムを用意してみました。

import random
import matplotlib.pyplot as plt
%matplotlib notebook

def plot(x, y):
    fig = plt.figure()
    plt.clf()
    plt.plot(x, y)
    plt.show()
    
def main():
    for i in range(10):
        x = range(100)
        y = [random.randrange(10) for _ in x]
        plot(x, y)
    
if __name__ == '__main__':
    main()

ここでは実行結果を載せませんが、これをやると10枚のグラフがずらずらっとセルの結果に表示されます。

10枚程度ならまだしも100枚、1000枚と増えていくとメモリが圧迫され処理が追いつかなくなります。

ということで「from IPython.display import clear_output」と「clear_output()」を追加してやります。

import random
import matplotlib.pyplot as plt
from IPython.display import clear_output
%matplotlib notebook

def plot(x, y):
    fig = plt.figure()
    plt.clf()
    plt.plot(x, y)
    plt.show()
    
def main():
    for i in range(10):
        clear_output()
        x = range(100)
        y = [random.randrange(10) for _ in x]
        plot(x, y)
    
if __name__ == '__main__':
    main()

グラフを表示して、クリアするので結構画面がチカチカしますが、画面自体はすっきりと、そして処理が重くなることなく最後まで処理ができると思います。

大量にグラフ表示する際は是非使ってみてください。

次回もmatplotlibの話題でplt.savefigでグラフを保存した際に真っ白なグラフが表示されてしまう問題の対処法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次