2
matplotlib図をJPEGファイルとして保存しようとしていますが、次のエラーが発生しています。私はそれが私のインストールまたは私のコードと関係しているかどうかはわかりません。したがって、以下のエラーを生成する実行するサンプルプログラムも添付しています。MatplotlibはJPEGエンコーダエラーとしてファイルを保存します
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
class plot(QWidget):
def __init__(self):
super().__init__()
self.figure = plt.figure()
self.canvas = FigureCanvas(self.figure)
self.Layout = QVBoxLayout()
self.xarray = [1,2,3,4,5,6]
self.yarray = [6,7,5,4,2,1]
update_btn = QPushButton("Save Plot", self)
self.Layout.addWidget(update_btn, 1)
update_btn.clicked.connect(self.saveplot)
self.createplot()
self.setLayout(self.Layout)
def saveplot(self):
filename = QFileDialog.getSaveFileName(self, "Save Plot As", "plot.jpg", "*.jpg ;; *.png ;; *.pdf")
savename = filename[0]
if savename:
self.figure.savefig(savename)
def createplot(self):
self.ax = self.figure.add_subplot(1,1,1)
self.ax.grid()
self.plot = self.ax.plot(self.xarray, self.yarray,'o', marker = 'o', c= 'b')[0]
self.Layout.addWidget(self.canvas, 2)
self.canvas.draw()
if __name__ == '__main__':
appl = QApplication(sys.argv)
main = plot()
main.show()
sys.exit(appl.exec_())
バージョン情報:
matplotlibの2.1.0
私はError:
Traceback (most recent call last):
File "simpleissue.py", line 36, in updateplot
self.figure.savefig(savename)
File "/usr/local/lib/python3.5/dist-packages/matplotlib/figure.py", line 1814, in savefig
self.canvas.print_figure(fname, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/matplotlib/backends/backend_qt5agg.py", line 172, in print_figure
super(FigureCanvasQTAggBase, self).print_figure(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/matplotlib/backend_bases.py", line 2259, in print_figure
**kwargs)
File "/usr/local/lib/python3.5/dist-packages/matplotlib/backends/backend_agg.py", line 584, in print_jpg
return background.save(filename_or_obj, format='jpeg', **options)
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 1675, in save
save_handler(self, fp, filename)
File "/usr/lib/python3/dist-packages/PIL/JpegImagePlugin.py", line 708, in _save
ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize)
File "/usr/lib/python3/dist-packages/PIL/ImageFile.py", line 480, in _save
e = Image._getencoder(im.mode, e, a, im.encoderconfig)
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 431, in _getencoder
return encoder(mode, *args + extra)
TypeError: integer argument expected, got float
サンプルコードをの.jpgで唯一の問題.PNG or.pdfとして図を保存して何の問題を持っていません
Pyqt5
のPython 3.5
枕-3.1.2
のUbuntu 16.04
問題の[mcve]を作成してください。問題を再現する最小限のコードは何ですか?これはPyQtの使用に依存していますか?そうでない場合は、それを残しておいてください。 Isは、カスタムファイル名を使用するかどうかに依存します。使用しているそれぞれのライブラリのすべてのバージョンを追加し、これを実行しているシステムを追加します。別のバックエンドを試しましたか?どのバックエンドが失敗するかを含めます。 – ImportanceOfBeingErnest
@ImportanceOfBeingErnestこれを実行しているシステムに関する追加情報を追加しました。この例に含まれるすべての機能は、より大きなアプリケーションには必要です。私はUbuntuでこれをテストしただけです。 –
@ImportanceOfBeingErnestが意味することは、この例がまだ* minimal *ではないと思います。あなたのアプリケーションには必要かもしれないが、バグを再現するために*必要ではないかもしれないが、ここにはたくさんのものがある。超過分を排除すれば、わかりやすくなるだけでなく、あなた自身が問題を見つけ出す可能性があります。 –