2017-04-18 10 views
2

私はmatplotlibでグラフを作成し、それを画像に作成してpyqt5アプリケーションで使用したかったのです。私はBytesIOを使用するよう提案しました。BytesIOをmatplotlibとpyqt5で使用するには?

私のグラフを描く:

... 
plt.axis('equal') 
buff = io.BytesIO() 
plt.savefig(buff, format="png") 
print(buff) 
return buff 

これは、その後、別のスクリプトで呼び出されます。これは、これまでの私のコードです

def minionRatioGraphSetup(self, recentMinionRatioAvg): 
    image = minionRatioGraph(recentMinionRatioAvg) 
    label = QtWidgets.QLabel() 
    pixmap = QtGui.QPixmap(image) 
    label.setPixmap(pixmap) 
    label.setGeometry(QtCore.QRect(0,0,200,200)) 

が止まるpixmap = QtGui.QPixmap(image)で働いて、私はなぜわからないんです。また、どうすればMainWindowに配置できますか?私はコードがうまく動作するだろうと疑っているからです。

答えて

1

私はそこにバッファを使った解決策があると確信しています。しかし、バイト形式を正しくすることはむしろ複雑に思われます。したがって、イメージをディスクに保存し、そこからロードすることもできます。

import sys 
from PyQt4 import QtGui 
import matplotlib.pyplot as plt 
import numpy as np 

def minionRatioGraph(): 
    plt.plot([1,3,2]) 
    plt.savefig(__file__+".png", format="png") 


class App(QtGui.QWidget): 

    def __init__(self): 
     super(App, self).__init__() 
     self.setGeometry(300, 300, 250, 150) 
     self.setLayout(QtGui.QVBoxLayout()) 
     label = QtGui.QLabel() 
     label2 = QtGui.QLabel("Some other text label") 

     minionRatioGraph() 

     qimg = QtGui.QImage(__file__+".png") 
     pixmap = QtGui.QPixmap(qimg) 

     label.setPixmap(pixmap) 
     self.layout().addWidget(label) 
     self.layout().addWidget(label2) 
     self.show() 


if __name__ == '__main__': 
    app = QtGui.QApplication([]) 
    ex = App() 
    sys.exit(app.exec_()) 
+0

感謝の男IOファイルを避けることに役立つかもしれない、あなたは命の恩人です。私はこの髪の上に私の髪を引っ張ってきた –

0

枕を使用して、スニペット、

im = PIL.Image.open("filename") 
with BytesIO() as f: 
    im.save(f, format='png') 
    f.seek(0) 
    image_data = f.read() 
    qimg = QImage.fromData(image_data) 
    patch_qt = QPixmap.fromImage(qimg) 
関連する問題