複数 - python 棒グラフ




プロットをMatplotlibを使って表示するのではなく、画像ファイルに保存する (10)

plot()や他の関数を使って必要なコンテンツを作成した後、次のような節を使って、画面にプロットするかファイルを作るかを選択できます:

import matplotlib.pyplot as plt

fig = plt.figure(figuresize=4, 5)
# use plot(), etc. to create your plot.

# Pick one of the following lines to uncomment
# save_file = None
# save_file = os.path.join(your_directory, your_file_name)  

if save_file:
    plt.savefig(save_file)
    plt.close(fig)
else:
    plt.show()

私は即座にプロットを生成するために、すばやく汚いスクリプトを書いています。 私は出発点として以下のコード( Matplotlibドキュメントから)を使用しています:

from pylab import figure, axes, pie, title, show

# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})

show()  # Actually, don't show, just save to foo.png

私はGUI上にプロットを表示するのではなく、プロットをファイル(例えばfoo.png)に保存したいので、例えばバッチスクリプトで使うことができます。 それ、どうやったら出来るの?


「現在の」人物の概念が気に入らない場合は、次のようにします。

import matplotlib.image as mpimg

img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)

ソリューション :

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
plt.figure()
ts.plot()
plt.savefig("foo.png", bbox_inches='tight')

画像を表示するだけでなく、画像を保存する場合は、次のようにします。

%matplotlib inline

import matplotlibあと


他の人が言っているように、 plt.savefig()fig1.savefig()は実際に画像を保存する方法です。

しかし、私は特定のケースで(例えばSpyderがplt.ion() :interactive mode = Onの場合)、数字が常に表示されることがわかりました。 私はこれを回避するために、私の巨大なループの中にFigureウィンドウを閉じてしまうので、ループ中に何百万人もの人物像がありません。

import matplotlib.pyplot as plt
fig, ax = plt.subplots( nrows=1, ncols=1 )  # create figure & 1 axis
ax.plot([0,1,2], [10,20,3])
fig.savefig('path/to/save/image/to.png')   # save the figure to file
plt.close(fig)    # close the figure

問題は解決しましたが、私はsavefigを使用するときに便利なヒントをいくつか追加したいと思います。 ファイル形式は、拡張子で指定できます。

savefig('foo.png')
savefig('foo.pdf')

ラスタライズされた出力またはベクトル化された出力をそれぞれ提供します。両方とも有用です。 さらに、 pylabは、イメージの周りの空白、しばしば望ましくない空白を残すことがわかります。 それを削除する:

savefig('foo.png', bbox_inches='tight')

次のいずれかを行うことができます:

plt.show(hold=False)
plt.savefig('name.pdf')

GUIプロットを閉じる前にsavefigを終了させることを忘れないでください。 このようにして、あらかじめ画像を見ることができます。

代わりに、 plt.show()で見ることができます。次にGUIを閉じてスクリプトを再実行しますが、今回はplt.show()を置き換えます。

また、

fig, ax = plt.figure(nrows=1, ncols=1)
plt.plot(...)
plt.show()
fig.savefig('out.pdf')

私は以下を使用しました:

import matplotlib.pyplot as plt

p1 = plt.plot(dates, temp, 'r-', label="Temperature (celsius)")  
p2 = plt.plot(dates, psal, 'b-', label="Salinity (psu)")  
plt.legend(loc='upper center', numpoints=1, bbox_to_anchor=(0.5, -0.05),        ncol=2, fancybox=True, shadow=True)

plt.savefig('data.png')  
plt.show()  
f.close()
plt.close()

私は図を保存した後にplt.showを使用することが非常に重要であることを発見しました。そうでなければ動作しません。 PNG形式でエクスポートされた図


解決策は次のとおりです。

pylab.savefig('foo.png')

#write the code for the plot     
plt.savefig("filename.png")

ファイルは実行中のpython / Jupyterファイルと同じディレクトリに保存されます


import datetime
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt

# Create the PdfPages object to which we will save the pages:
# The with statement makes sure that the PdfPages object is closed properly at
# the end of the block, even if an Exception occurs.
with PdfPages('multipage_pdf.pdf') as pdf:
    plt.figure(figsize=(3, 3))
    plt.plot(range(7), [3, 1, 4, 1, 5, 9, 2], 'r-o')
    plt.title('Page One')
    pdf.savefig()  # saves the current figure into a pdf page
    plt.close()

    plt.rc('text', usetex=True)
    plt.figure(figsize=(8, 6))
    x = np.arange(0, 5, 0.1)
    plt.plot(x, np.sin(x), 'b-')
    plt.title('Page Two')
    pdf.savefig()
    plt.close()

    plt.rc('text', usetex=False)
    fig = plt.figure(figsize=(4, 5))
    plt.plot(x, x*x, 'ko')
    plt.title('Page Three')
    pdf.savefig(fig)  # or you can pass a Figure object to pdf.savefig
    plt.close()

    # We can also set the file's metadata via the PdfPages object:
    d = pdf.infodict()
    d['Title'] = 'Multipage PDF Example'
    d['Author'] = u'Jouni K. Sepp\xe4nen'
    d['Subject'] = 'How to create a multipage pdf file and set its metadata'
    d['Keywords'] = 'PdfPages multipage keywords author title subject'
    d['CreationDate'] = datetime.datetime(2009, 11, 13)
    d['ModDate'] = datetime.datetime.today()




plot