75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
|
import pyqtgraph as pg
|
||
|
from pyqtgraph.Qt import QtGui, QtCore
|
||
|
from Exporter import Exporter
|
||
|
|
||
|
|
||
|
__all__ = ['MatplotlibExporter']
|
||
|
|
||
|
|
||
|
class MatplotlibExporter(Exporter):
|
||
|
Name = "Matplotlib Window"
|
||
|
windows = []
|
||
|
def __init__(self, item):
|
||
|
Exporter.__init__(self, item)
|
||
|
|
||
|
def parameters(self):
|
||
|
return None
|
||
|
|
||
|
def export(self, fileName=None):
|
||
|
|
||
|
if isinstance(self.item, pg.PlotItem):
|
||
|
mpw = MatplotlibWindow()
|
||
|
MatplotlibExporter.windows.append(mpw)
|
||
|
fig = mpw.getFigure()
|
||
|
|
||
|
ax = fig.add_subplot(111)
|
||
|
ax.clear()
|
||
|
#ax.grid(True)
|
||
|
|
||
|
for item in self.item.curves:
|
||
|
x, y = item.getData()
|
||
|
opts = item.opts
|
||
|
pen = pg.mkPen(opts['pen'])
|
||
|
if pen.style() == QtCore.Qt.NoPen:
|
||
|
linestyle = ''
|
||
|
else:
|
||
|
linestyle = '-'
|
||
|
color = tuple([c/255. for c in pg.colorTuple(pen.color())])
|
||
|
symbol = opts['symbol']
|
||
|
if symbol == 't':
|
||
|
symbol = '^'
|
||
|
symbolPen = pg.mkPen(opts['symbolPen'])
|
||
|
symbolBrush = pg.mkBrush(opts['symbolBrush'])
|
||
|
markeredgecolor = tuple([c/255. for c in pg.colorTuple(symbolPen.color())])
|
||
|
markerfacecolor = tuple([c/255. for c in pg.colorTuple(symbolBrush.color())])
|
||
|
|
||
|
if opts['fillLevel'] is not None and opts['fillBrush'] is not None:
|
||
|
fillBrush = pg.mkBrush(opts['fillBrush'])
|
||
|
fillcolor = tuple([c/255. for c in pg.colorTuple(fillBrush.color())])
|
||
|
ax.fill_between(x=x, y1=y, y2=opts['fillLevel'], facecolor=fillcolor)
|
||
|
|
||
|
ax.plot(x, y, marker=symbol, color=color, linewidth=pen.width(), linestyle=linestyle, markeredgecolor=markeredgecolor, markerfacecolor=markerfacecolor)
|
||
|
|
||
|
xr, yr = self.item.viewRange()
|
||
|
ax.set_xbound(*xr)
|
||
|
ax.set_ybound(*yr)
|
||
|
mpw.draw()
|
||
|
else:
|
||
|
raise Exception("Matplotlib export currently only works with plot items")
|
||
|
|
||
|
|
||
|
|
||
|
class MatplotlibWindow(QtGui.QMainWindow):
|
||
|
def __init__(self):
|
||
|
import pyqtgraph.widgets.MatplotlibWidget
|
||
|
QtGui.QMainWindow.__init__(self)
|
||
|
self.mpl = pyqtgraph.widgets.MatplotlibWidget.MatplotlibWidget()
|
||
|
self.setCentralWidget(self.mpl)
|
||
|
self.show()
|
||
|
|
||
|
def __getattr__(self, attr):
|
||
|
return getattr(self.mpl, attr)
|
||
|
|
||
|
def closeEvent(self, ev):
|
||
|
MatplotlibExporter.windows.remove(self)
|