2019年10月26日 星期六

matplotlib 不支援 jpg 輸出問題

今天二哥去學校跟同學討論物理實驗報告, 中午 Line 給我下列程式出現 "MemoryError", 問我是資料太多讓記憶體爆掉了嗎?

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def f_1(x, A, B):
    return A*x + B 

plt.figure(figsize=(7,5),dpi=80)
x=[0.070*9.807,0.080*9.807,0.090*9.807,0.100*9.807,0.110*9.807]
y=[1/(0.68115*0.68115),1/(0.76904*0.76904),1/(0.85885*0.85885),1/(0.93795*0.93795),1/(0.99073*0.99073)]

plt.style.use("ggplot")
plt.xlabel("Centripetal force(N)", fontweight = "bold")
plt.ylabel("square of Average period(s*s)", fontweight = "bold")
plt.title("Centripetal force and square of Average period",fontweight = "bold")       
plt.scatter(x, y, c = "m", s = 50,)
A2,B2=optimize.curve_fit(f_1, x, y)[0]
x2 = np.arange(0.070*9.807,0.110*9.807,0.000001)
y2 = A2*x2 + B2
plt.plot(x2, y2,"--")   
plt.savefig("666.jpg")
plt.show()
plt.close()

我想就這點資料而已, Numpy 哪有可能輕易就掛掉? 晚上回到鄉下實際測試, 果然執行失敗, 但原因不是 MemoryError, 而是出現 "'jpg' is not surported" 錯誤, 建議用 png 格式 :

D:\test>python test.py
Traceback (most recent call last):
  File "test.py", line 21, in <module>
    plt.savefig("666.jpg")
  File "C:\Python36\lib\site-packages\matplotlib\pyplot.py", line 701, in savefig
    res = fig.savefig(*args, **kwargs)
  File "C:\Python36\lib\site-packages\matplotlib\figure.py", line 1834, in savefig
    self.canvas.print_figure(fname, **kwargs)
  File "C:\Python36\lib\site-packages\matplotlib\backend_bases.py", line 2170, in print_figure
    canvas = self._get_output_canvas(format)
  File "C:\Python36\lib\site-packages\matplotlib\backend_bases.py", line 2113, in _get_output_canvas
    '%s.' % (format, ', '.join(formats)))
ValueError: Format "jpg" is not supported.
Supported formats: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz.

我改成 png 後果然就順利跑出圖形了, 二哥遇到 MemoryError 可能是電腦跑太多東西, 重開機應該就 OK 了 :




我查了 matplotlib 不能匯出 jpg 的問題, 原來只要安裝 pillow 套件就可以解決了, 參考 :

https://stackoverflow.com/questions/8827016/matplotlib-savefig-in-jpeg-format

安裝指令如下 :

pip3 install pillow

然後再重新執行上面的程式就可以順利輸出 jpg 檔了.

老實說 matplotlib 我也只是三腳貓而已, 還沒正式學過, 看來我的資料科學要加速學習才行, 不然很快就會被問倒.

沒有留言 :