2017-10-23 12 views
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

+0

問題の[mcve]を作成してください。問題を再現する最小限のコードは何ですか?これはPyQtの使用に依存していますか?そうでない場合は、それを残しておいてください。 Isは、カスタムファイル名を使用するかどうかに依存します。使用しているそれぞれのライブラリのすべてのバージョンを追加し、これを実行しているシステムを追加します。別のバックエンドを試しましたか?どのバックエンドが失敗するかを含めます。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnestこれを実行しているシステムに関する追加情報を追加しました。この例に含まれるすべての機能は、より大きなアプリケーションには必要です。私はUbuntuでこれをテストしただけです。 –

+1

@ImportanceOfBeingErnestが意味することは、この例がまだ* minimal *ではないと思います。あなたのアプリケーションには必要かもしれないが、バグを再現するために*必要ではないかもしれないが、ここにはたくさんのものがある。超過分を排除すれば、わかりやすくなるだけでなく、あなた自身が問題を見つけ出す可能性があります。 –

答えて

3

問題は枕を更新することで修正されました。次のコマンドを実行しました:sudo pip3 pillow --upgrade

関連する問題