def getpgcmap(cmp='BuRd'): import pyqtgraph as pg import numpy as np if cmp =='bryw': STEPS = np.array([0.0, 0.2, 0.6, 1.0]) CLRS = ['k', 'r', 'y', 'w'] ## Create a ColorMap clrmp = pg.ColorMap(STEPS, np.array([pg.colorTuple(pg.Color(c)) for c in CLRS])) ## Get the LookupTable lut = clrmp.getLookupTable() elif cmp == 'TrmBlk': pos = np.array([0.0, 0.5, 1.0]) color = np.array([[0,0,0,255], [255,128,0,255], [255,255,0,255]], dtype=np.ubyte) map = pg.ColorMap(pos, color) lut = map.getLookupTable(0.0, 1.0, 256) elif cmp == 'RdBu': pos = np.array([0.0,0.5,1.0]) color = np.array([[255,0,0,0],[255,255,255,255],[0,0,255,0]],dtype=np.ubyte) map = pg.ColorMap(pos,color) lut = map.getLookupTable(0.0,1.0,256) elif cmp == 'BuRd': pos = np.array([0.0,0.5,1.0]) color = np.array([[0,0,255,0],[255,255,255,255],[255,0,0,0]],dtype=np.ubyte) map = pg.ColorMap(pos,color) lut = map.getLookupTable(0.0,1.0,256) return lut
def __init__(self, parent=None): pyqtgraph.setConfigOption('background', 'k') #before loading widget super(HyperSpecApp, self).__init__(parent) self.setupUi(self) self.updateBtn.clicked.connect(self.update) #self.view = pyqtgraph.ViewBox(self.gView0) #self.scene = pyqtgraph.ImageItem(self.view) STEPS = np.array([0.0, 0.2, 0.6, 1.0]) CLRS = ['k', 'r', 'y', 'w'] clrmp = pyqtgraph.ColorMap( STEPS, np.array([pyqtgraph.colorTuple(pyqtgraph.Color(c)) for c in CLRS])) data = np.random.normal(size=(100, 200, 200)) #imv = pyqtgraph.image(data) self.ImageView2.setImage(data) #self.ImageView2.ui.histogram.gradient.setColorMap(clrmp) #self.img_array = np.zeros((1000, CHUNKSZ / 2 + 1)) # bipolar colormap #pos = np.array([0., 1., 0.5, 0.25, 0.75]) #color = np.array([[0, 255, 255, 255], [255, 255, 0, 255], [0, 0, 0, 255], (0, 0, 255, 255), (255, 0, 0, 255)], # dtype=np.ubyte) #cmap = pyqtgraph.ColorMap(pos, color) #lut = cmap.getLookupTable(0.0, 1.0, 256) #self.img.setLookupTable(lut) self.pltView1.plotItem.showGrid(True, True, 0.7) self.pltView2.plotItem.showGrid(True, True, 0.7)
def init_ui(self): """""" from vnpy.app.realtime_monitor.ui.baseQtItems import MarketDataChartWidget self.setWindowTitle(self.title) self.resize(1300, 800) vbox = QtWidgets.QVBoxLayout() klineWidget = MarketDataChartWidget() klineWidget.update_all(self.marketData, self.tradeData, []) if not self.record_df.empty: record = self.record_df.asof( klineWidget.dt_ix_map.keys()).fillna(0) ixs = [] for _dt in record.index: ixs.append(klineWidget.dt_ix_map[_dt]) record.index = ixs candle = klineWidget.get_plot('candle') for n, s in record.items(): c = pg.PlotCurveItem() candle.addItem(c) h = sha256() h.update(n.encode()) c.setData(s.index.values, s.values, pen=pg.Color(int(h.hexdigest(), base=16))) vbox.addWidget(klineWidget) self.setLayout(vbox)
def plotPulses(self, t_start, t_end): # print('PlotCurrents') self.clear() # clear plot self.setBackground('w') # self.s d_plot = self.addPlot() d_plot.addLegend() d_plot.getAxis('left').setPen(pg.Color('k')) d_plot.getAxis('bottom').setPen(pg.Color('k')) d_plot.showGrid(x=True) digital_list = [] # list of active digital channels # print("Current channels_data", self.parent.channels_data) t_first = min( min([1000] + [x[0] for x in value if x[0] > 0]) for name, value in self.parent.channels_data.items() if 'C' in name) t_last = t_end # t_last = max(max(x[0] for x in value if x[0] > 0) for name, value in # self.globals['pulses'].items() if 'D' in name and len(value)>1) + 10 digital_counter = 0 for name in sorted(self.parent.channels_data.keys(), reverse=True): if 'C' not in name: continue digital_list.append(name) value = self.parent.channels_data[name] xx = [] yy = [] # construct points to show for i, point in enumerate(value): if i == 0: xx.append(t_first - (100 if t_first > 100 else t_first)) yy.append(point[1]) continue # if not i == len(value) - 1: xx.append(point[0]) yy.append(value[i - 1][1]) xx.append(point[0]) yy.append(point[1]) xx.append(t_last) yy.append(point[1]) d_plot.plot(np.array(xx), np.array(yy), pen=pg.mkPen(pg.intColor(digital_counter, hues=5), width=2), name=name) # plot data digital_counter += 1
def scanStarted(self): self.new_scan_started = False # flag to handle new scanse in series self.dataD = {} self.folder = self.globals['current_measurement_folder'] self.meas_type, self.conf_params, self.x_lbl, self.y_lbl, self.xaxis_calib = impr.get_x_calibration( self.folder, []) # if self.meas_type =='T': # self.fit_data_index=2 # else: # self.fit_data_index=0 self.fit_data_index = int(self.index_box.currentText()) self.single_meas_plot.setLabel('left', text=self.y_lbl) self.single_meas_plot.setLabel('bottom', text=self.x_lbl) self.single_meas_plot.setTitle(self.folder.split('/')[-1], color=pg.Color('k')) self.curve1.setData([], []) self.curve2.setData([], []) self.curve3.setData([], []) self.curve4.setData([], []) self.single_meas_plot.removeItem(self.plot_info) self.single_meas_plot.setXRange( self.xaxis_calib(min(self.globals['active_params_list'][0][0])), self.xaxis_calib(max(self.globals['active_params_list'][0][0])))
from misura.canon.indexer import SharedFile from misura.canon.reference import get_node_reference try: import pyqtgraph as pg import pyqtgraph.opengl as gl except: pg = False gl = False STEPS = np.array([0.0, 0.33, 0.66, 1.0]) CLRS = ['b', 'r', 'y', 'w'] if pg: clrmp = pg.ColorMap(STEPS, np.array([pg.colorTuple(pg.Color(c)) for c in CLRS])) #TODO: add decoding def read_file(profile, start=3500, end=-1, max_layers=1000, cut=0): xs = [] ys = [] zs = [] colors = [] c = 0. n = len(profile) if end < 0: end += n n = end - start + 1 step = max(n // max_layers, 1)
def plotPulses(self, t_start, t_end): print('PlotAnalogIn') self.clear() # clear plot self.setBackground('w') # self.s d_plot = self.addPlot() d_plot.getAxis('left').setPen(pg.Color('k')) d_plot.getAxis('bottom').setPen(pg.Color('k')) d_plot.showGrid(x=True) digital_height = 1.2 # place for each curve of height=1graphic digital_counter = 0 # number of plotted channel digital_list = [] # list of active digital channels # print(self.globals["pulses"]) if self.parent.channels_data == {}: return t_first = min( min(x[0] for x in value if x[0] > 0) for name, value in self.parent.channels_data.items() if 'I' in name) t_last = t_end # t_last = max(max(x[0] for x in value if x[0] > 0) for name, value in # self.globals['pulses'].items() if 'D' in name and len(value)>1) + 10 pulse_counter = 0 for name in sorted(self.parent.channels_data.keys(), reverse=True): if 'I' not in name: continue digital_list.append(name) value = self.parent.channels_data[name] # construct points to show for i, pulse in enumerate(value): xx = [ t_first - (100 if t_first > 100 else t_first), pulse[0], pulse[0], pulse[1], pulse[1], t_last - t_start ] yy = [0, 0, 1, 1, 0, 0] # xx.append(t_first-(100 if t_first > 100 else t_first)) # yy.append(0) # xx.append(pulse[0]) # yy.append(1) # xx.append(pulse[1]) # yy.append(0) # xx.append(t_last-t_start) # yy.append(0) d_plot.plot(np.array(xx), np.array(yy) + digital_counter * digital_height, pen=pg.mkPen(pg.intColor(pulse_counter), width=2)) # plot data pulse_counter += 1 d_plot.plot(np.array(xx), np.ones_like(xx) * digital_counter * digital_height, pen=pg.mkPen(width=0.5, style=Qt.DashLine)) # plot zero digital_counter += 1 # set ticks names tick_names = digital_list d_plot.getAxis('left').setTicks([ list( zip((np.arange(len(digital_list)) + 1 / 2) * digital_height, tick_names)) ])
def __init__(self, parent=None, signals=None, globals=None): super().__init__() self.dataD = {} self.fits_list = [] self.mdb_client = MongoClient( 'mongodb://192.168.1.59:27017/') # or IP of MongoDB server self.meas_database = self.mdb_client.measData.meas_data self.cb_axis_items = ['fit1D_x', 'fit1D_y', 'fit2D'] self.cb_index_items = ['0', '1', '2', '3', '4'] self.parent = parent self.signals = signals self.globals = globals self.signals.scanStarted.connect(self.scanStarted) self.signals.singleScanFinished.connect(self.onSingleScanFinished) self.signals.imageProcessed.connect( self.newDataArrived ) # replace signal by one emmited when image processing is over self.min_n_to_avr = 3 # minimal number of good images to start everaging main_layout = QHBoxLayout() info_layout = QVBoxLayout() info_layout.addWidget(QLabel('Fit')) self.axis_box = QComboBox() self.axis_box.addItems(self.cb_axis_items) self.axis_box.setCurrentIndex(1) self.axis_box.currentIndexChanged.connect(self.onFitParamChanged) info_layout.addWidget(self.axis_box) info_layout.addWidget(QLabel('Index')) self.index_box = QComboBox() self.index_box.addItems(self.cb_index_items) self.index_box.setCurrentIndex(0) self.index_box.currentIndexChanged.connect(self.onFitParamChanged) info_layout.addWidget(self.index_box) info_layout.addWidget(QLabel('Fit_func')) self.fit_func_box = QComboBox() self.fit_func_box.addItems( [s for s in dir(fit_func_lib) if s[0] != '_']) self.fit_func_box.setCurrentText('gaussian2') self.fit_func_box.currentIndexChanged.connect(self.onFitParamChanged) info_layout.addWidget(self.fit_func_box) info_layout.addWidget(QLabel('p0')) self.p0_line = QLineEdit() self.p0_line.setMaximumWidth(200) self.p0_line.editingFinished.connect(self.p0Edited) info_layout.addWidget(self.p0_line) info_layout.addWidget(QLabel('drop points (by #)')) self.drop_points_line = QLineEdit() self.drop_points_line.setMaximumWidth(200) self.drop_points_line.editingFinished.connect(self.dropPointsEdited) info_layout.addWidget(self.drop_points_line) info_layout.addStretch(1) main_layout.addLayout(info_layout) self.single_meas_plot = pg.PlotWidget(background='w', pen=pg.Color('k')) # self.single_meas_plot.setMaximumWidth(400) # self.single_meas_plot.showGrid(x=True, y=True,alpha=0.5) self.single_meas_plot.getAxis('left').setPen(pg.Color('k')) self.single_meas_plot.getAxis('bottom').setPen(pg.Color('k')) self.curve1 = self.single_meas_plot.plot(np.array([]), pen=None, symbol='o', symbolPen=None, symbolBrush=(0, 255, 0), symbolSize=7) self.curve2 = self.single_meas_plot.plot(np.array([]), pen=None, symbol='o', symbolPen=None, symbolBrush=(255, 0, 0), symbolSize=7) self.curve3 = self.single_meas_plot.plot(np.array([]), pen=None, symbol='+', symbolPen=None, symbolBrush=pg.Color('b'), symbolSize=15) self.curve4 = self.single_meas_plot.plot(np.array([]), pen=(0, 0, 255)) self.plot_info = pg.TextItem(' ', anchor=(0, 1), color=pg.Color('k')) main_layout.addWidget(self.single_meas_plot) # self.single_meas_plot2 = pg.PlotWidget(background='w',pen=pg.Color('k')) # self.single_meas_plot2.setMaximumWidth(400) # # self.single_meas_plot.showGrid(x=True, y=True,alpha=0.5) # self.single_meas_plot2.getAxis('left').setPen(pg.Color('k')) # self.single_meas_plot2.getAxis('bottom').setPen(pg.Color('k')) # self.curve21 = self.single_meas_plot2.plot(np.array([]), pen=None,symbol='o', # symbolPen=None,symbolBrush=(0,255,0),symbolSize=7) # self.curve22 = self.single_meas_plot2.plot(np.array([]), pen=None,symbol='o', # symbolPen=None,symbolBrush=(255,0,0),symbolSize=7) # self.curve23 = self.single_meas_plot2.plot(np.array([]), pen=None, symbol='+', # symbolPen=None,symbolBrush=pg.Color('b'),symbolSize=15) # self.curve24 = self.single_meas_plot2.plot(np.array([]), pen=(0,0,255)) # self.plot_info = pg.TextItem(' ', anchor=(0,1),color=pg.Color('k')) # main_layout.addWidget(self.single_meas_plot2) self.setLayout(main_layout)
def setColor(self, *args): """Set the color of the box. Arguments are the same as those accepted by functions.mkColor()""" self.__color = pg.Color(*args)
def __init__(self,map='map'): prefileMeas = sorted([x for x in [y for y in os.listdir("./")] if re.search("axion.m.[0-9]{5}$", x)]) fileMeas = [] for maes in prefileMeas: try: with h5py.File(maes, 'r') as f: if (map in f) : fileMeas.append(maes) except: print('Error opening file: %s'%maes) fileHdf5 = h5py.File(fileMeas[0], "r") self.Lx = fileHdf5["/"].attrs.get("Size") self.Ly = fileHdf5["/"].attrs.get("Size") self.Lz = fileHdf5["/"].attrs.get("Depth") self.z = fileHdf5["/"].attrs.get("z") self.R = self.z fileHdf5.close() self.allData = [] self.step = 1 self.tStep = 100 self.pause = False self.timer = pg.QtCore.QTimer() # Read all data self.i = 0 self.size = 0 # if os.path.exists("./Strings.PyDat"): # fp = gzip.open("./Strings.PyDat", "rb") # self.allData = pickle.load(fp) # fp.close() # self.size = len(self.allData) # else: for meas in fileMeas: # print(meas) fileHdf5 = h5py.File(meas, "r") Lx = fileHdf5["/"].attrs.get("Size") Ly = fileHdf5["/"].attrs.get("Size") Lz = fileHdf5["/"].attrs.get("Depth") zR = fileHdf5["/"].attrs.get("z") R = zR if 'R' in fileHdf5: R = fileHdf5["/"].attrs.get("R") fl = fileHdf5["/"].attrs.get("Field type").decode() if self.Lx != Lx or self.Ly != Ly or self.Lz != Lz: print("Error: Size mismatch (%d %d %d) vs (%d %d %d)\nAre you mixing files?\n" % (Lx, Ly, Lz, self.Lx, self.Ly, self.Lz)) exit() if fl == "Saxion": mTmp = fileHdf5[map]['m'].value.reshape(Ly,Lx,2) rData = np.sqrt(mTmp[:,:,0]**2 + mTmp[:,:,1]**2) rMax = np.amax(rData) rData = rData/R aData = (np.arctan2(mTmp[:,:,1], mTmp[:,:,0]) + 2*np.pi)/(4.*np.pi) elif fl == "Axion": aData = fileHdf5[map]['m'].value.reshape(Ly,Lx) # pm = np.amax(aData) # print ("BMax %f" % pm) aData = aData/R rData = np.ones(aData.shape) pData = np.ones(aData.shape)*(2*np.pi) aData = (aData + pData)/(4.*np.pi) # iData = np.trunc(aData/(2*np.pi)) # aData = aData - iData*(2*np.pi) # aData = aData - pData # pm = np.amax(aData) # print ("AMax %f" % pm) rMax = R else: print("Unrecognized field type %s" % fl) exit() self.allData.append([rData, aData, zR, rMax]) fileHdf5.close() self.size = self.size + 1 # fp = gzip.open("Strings.PyDat", "wb") # pickle.dump(self.allData, fp, protocol=2) # fp.close() self.app = QtGui.QApplication([]) self.pWin = pg.GraphicsLayoutWidget() self.pWin.setWindowTitle('Axion / Saxion evolution') self.pWin.resize(1600,1600) pg.setConfigOptions(antialias=True) self.aPlot = self.pWin.addPlot(row=0, col=0) self.sPlot = self.pWin.addPlot(row=0, col=1) self.aPlot.setXRange(0,Lx*1.2) self.aPlot.setYRange(0,Lx*1.2) self.sPlot.setXRange(0,Lx*1.2) self.sPlot.setYRange(0,Lx*1.2) self.zAtxt = pg.TextItem("z=0.000000") self.zStxt = pg.TextItem("z=0.000000") data = self.allData[0] aPos = np.array([0.00, 0.10, 0.25, 0.4, 0.5, 0.6, 0.75, 0.9, 1.0 ]) aCol = ['#006600', 'b', 'w', 'r', 'k', 'b', 'w', 'r', '#006600'] vb = self.aPlot.getViewBox() aSzeX = vb.size().width()*0.96 aSzeY = vb.size().height()*0.8 self.aMap = pg.ColorMap(aPos, np.array([pg.colorTuple(pg.Color(c)) for c in aCol])) self.aLut = self.aMap.getLookupTable() self.aLeg = pg.GradientLegend((aSzeX/20, aSzeY), (aSzeX, aSzeY/12.)) self.aLeg.setLabels({ "-pi": 0.0, "-pi/2": 0.25, "0.0": 0.50, "+pi/2": 0.75, "+pi": 1.00 }) self.aLeg.setParentItem(self.aPlot) self.aLeg.gradient.setColorAt(0.00, QtGui.QColor(255,255,255)) self.aLeg.gradient.setColorAt(0.25, QtGui.QColor(255, 0, 0)) self.aLeg.gradient.setColorAt(0.50, QtGui.QColor( 0, 0, 0)) self.aLeg.gradient.setColorAt(0.75, QtGui.QColor( 0, 0,255)) self.aLeg.gradient.setColorAt(1.00, QtGui.QColor(255,255,255)) self.aImg = pg.ImageItem(lut=self.aLut) self.aPlot.addItem(self.aImg) self.aPlot.addItem(self.zAtxt) # sPos = np.linspace(0.0, data[3], 5) sPos = np.array([0.00, 0.25, 0.50, 0.75, 1.00]) sLab = ["%.2f" % mod for mod in sPos] sCol = ['w', 'r', 'y', 'c', 'k'] vs = self.sPlot.getViewBox() sSzeX = vs.size().width()*0.96 sSzeY = vs.size().height()*0.8 self.sMap = pg.ColorMap(sPos, np.array([pg.colorTuple(pg.Color(c)) for c in sCol])) self.s**t = self.sMap.getLookupTable() self.sLeg = pg.GradientLegend((sSzeX/20, sSzeY), (aSzeX/0.96 + sSzeX, sSzeY/12.)) self.sLeg.setLabels({ sLab[0]: 0.0, sLab[1]: 0.25, sLab[2]: 0.50, sLab[3]: 0.75, sLab[4]: 1.00 }) self.sLeg.setParentItem(self.sPlot) self.sLeg.gradient.setColorAt(0.00, QtGui.QColor(255,255,255)) self.sLeg.gradient.setColorAt(0.25, QtGui.QColor(255, 0, 0)) self.sLeg.gradient.setColorAt(0.50, QtGui.QColor(255,255, 0)) self.sLeg.gradient.setColorAt(0.75, QtGui.QColor( 0,255,255)) self.sLeg.gradient.setColorAt(1.00, QtGui.QColor( 0, 0, 0)) self.sImg = pg.ImageItem(lut=self.s**t) self.sPlot.addItem(self.sImg) self.sPlot.addItem(self.zStxt) self.sImg.setImage(data[0], levels=(0.,1.)) self.aImg.setImage(data[1], levels=(0.,1.)) self.pWin.show() self.baseKeyPress = self.pWin.keyPressEvent