''' Atomic plot functions for mcplot-pyqtgraph ''' import os import sys import numpy as np import pyqtgraph as pg from pyqtgraph.Qt import QtGui from pyqtgraph.graphicsItems.LegendItem import LegendItem, ItemSample sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) from mccodelib.plotgraph import PNMultiple, PNSingle from mccodelib.mcplotloader import Data0D, Data1D, Data2D def plot(node, i, plt, opts): ''' node : plot node containing data i : index of said data in node opts : dict containing options such as --> log, legend, icolormap, verbose, fontsize ''' if type(node) == PNSingle and i != 0: raise Exception("inconsistent plot request, idx=%s" % str(i)) data = node.getdata_idx(i) if type(data) is Data1D: view_box = plot_Data1D(data, plt, log=opts['log'], legend=opts['legend'], icolormap=opts['icolormap'], verbose=opts['verbose'], fontsize=opts['fontsize']) return view_box, plt elif type(data) is Data2D: view_box, lyt = plot_Data2D(data, plt, log=opts['log'], legend=opts['legend'], icolormap=opts['icolormap'], verbose=opts['verbose'], fontsize=opts['fontsize'], cbmin=opts.get('cbmin', None), cbmax=opts.get('cbmax', None)) return view_box, lyt elif type(data) is Data0D: view_box = plot_Data0D(data, plt, log=opts['log'], legend=opts['legend'], icolormap=opts['icolormap'], verbose=opts['verbose'], fontsize=opts['fontsize']) return view_box, plt else: # File was not loaded, silently ignore return None, None GlobalColormap='none' class ModLegend(pg.LegendItem): """ Modified LegendItem to remove the ugly / in the label. Also reduces text size and padding. """ def __init__(self, offset, text_size='9pt'): self.text_size = text_size LegendItem.__init__(self, None, offset) def addItem(self, item, name): label = pg.LabelItem(name, size=self.text_size) if isinstance(item, ItemSample): sample = item else: sample = ItemSample(item) self.layout.setContentsMargins(0, 0, 0, 0) row = self.layout.rowCount() self.items.append((sample, label)) self.layout.addItem(label, row, 1) self.updateSize() def paint(self, p, *args): p.setPen(pg.functions.mkPen(255,255,255,100)) p.setBrush(pg.functions.mkBrush(0,0,0,100)) p.drawRect(self.boundingRect()) def plot_Data0D(data, plt, log=False, legend=True, icolormap=0, verbose=True, fontsize=10): ''' creates an empty plot ''' plt.setTitle("zero-dim monitor") return plt.getViewBox() def plot_Data1D(data, plt, log=False, legend=True, icolormap=0, verbose=True, fontsize=10): ''' create a plotItem and populate it with data, Data1D ''' # data x = np.array(data.xvals).astype(np.float) y = np.array(data.yvals).astype(np.float) e = np.array(data.y_err_vals).astype(np.float) if log: nonzeros=[] zeros=[] for i in range(len(y)): if y[i]>0: nonzeros.append(i) else: zeros.append(i) if len(nonzeros)>0: y[zeros] = np.min(y[nonzeros])/10 plt.setLogMode(y=True) else: plt.setLogMode(y=False) else: plt.setLogMode(y=False) plt.setXRange(np.min(x), np.max(x), padding=0) # labels plt.setTitle(" ") plt.getAxis('bottom').setLabel(data.xlabel) plt.getAxis('left').setLabel(data.ylabel) # how to add labels with html styling: #plt.titleLabel.item.setHtml('data.component
hest
') #axis_style = {'color': '#FFF', 'font-size': '5pt'} #plt.setLabel(axis='left', text=data.ylabel, **axis_style) #plt.setLabel(axis='bottom', text=data.xlabel, **axis_style) # error bars beam = 0 if len(x) > 1: beam = (x[1]-x[0])*0.5 # TODO: Find solution for adding errorbars in the log case if not log: err = pg.ErrorBarItem(x=x, y=y, height=e, beam=beam) plt.addItem(err) # commit if legend: plt.legend = ModLegend(offset=(-1, 1), text_size='%spt' % str(fontsize)) plt.legend.setParentItem(plt.vb) # this construct reduces the requiremet for header data in Data1D, in case of an error during parsing of the string try: lname1 = '
%s
I = %s
' % (data.component, data.values[0]) if verbose: lname1 = '%s [%s]

%s

I = %s Err = %s N = %s; %s' % (data.component, data.filename, data.title, data.values[0], data.values[1], data.values[2], data.statistics) except: lname1 = '%s
[%s]' % (data.component, data.filename) if lname1: plt.plot([x[0]], [y[0]], name=lname1) # plots data plt.plot(x, y) plt.setMenuEnabled(False) vb = plt.getViewBox() return vb def get_color_map(idx, pos_min, pos_max): # The contents of this function was generated from Matlab using the generate_colormaps.m script # # < Paste from next line > colormaps={ 'jet' : np.array([[ 0, 0, 143, 255], [ 0, 0, 159, 255], [ 0, 0, 175, 255], [ 0, 0, 191, 255], [ 0, 0, 207, 255], [ 0, 0, 223, 255], [ 0, 0, 239, 255], [ 0, 0, 255, 255], [ 0, 16, 255, 255], [ 0, 32, 255, 255], [ 0, 48, 255, 255], [ 0, 64, 255, 255], [ 0, 80, 255, 255], [ 0, 96, 255, 255], [ 0, 112, 255, 255], [ 0, 128, 255, 255], [ 0, 143, 255, 255], [ 0, 159, 255, 255], [ 0, 175, 255, 255], [ 0, 191, 255, 255], [ 0, 207, 255, 255], [ 0, 223, 255, 255], [ 0, 239, 255, 255], [ 0, 255, 255, 255], [ 16, 255, 239, 255], [ 32, 255, 223, 255], [ 48, 255, 207, 255], [ 64, 255, 191, 255], [ 80, 255, 175, 255], [ 96, 255, 159, 255], [112, 255, 143, 255], [128, 255, 128, 255], [143, 255, 112, 255], [159, 255, 96, 255], [175, 255, 80, 255], [191, 255, 64, 255], [207, 255, 48, 255], [223, 255, 32, 255], [239, 255, 16, 255], [255, 255, 0, 255], [255, 239, 0, 255], [255, 223, 0, 255], [255, 207, 0, 255], [255, 191, 0, 255], [255, 175, 0, 255], [255, 159, 0, 255], [255, 143, 0, 255], [255, 128, 0, 255], [255, 112, 0, 255], [255, 96, 0, 255], [255, 80, 0, 255], [255, 64, 0, 255], [255, 48, 0, 255], [255, 32, 0, 255], [255, 16, 0, 255], [255, 0, 0, 255], [239, 0, 0, 255], [223, 0, 0, 255], [207, 0, 0, 255], [191, 0, 0, 255], [175, 0, 0, 255], [159, 0, 0, 255], [143, 0, 0, 255], [128, 0, 0, 255]], dtype=np.ubyte), 'autumn' : np.array([[255, 0, 0, 255], [255, 4, 0, 255], [255, 8, 0, 255], [255, 12, 0, 255], [255, 16, 0, 255], [255, 20, 0, 255], [255, 24, 0, 255], [255, 28, 0, 255], [255, 32, 0, 255], [255, 36, 0, 255], [255, 40, 0, 255], [255, 45, 0, 255], [255, 49, 0, 255], [255, 53, 0, 255], [255, 57, 0, 255], [255, 61, 0, 255], [255, 65, 0, 255], [255, 69, 0, 255], [255, 73, 0, 255], [255, 77, 0, 255] , [255, 81, 0, 255], [255, 85, 0, 255], [255, 89, 0, 255], [255, 93, 0, 255], [255, 97, 0, 255], [255, 101, 0, 255], [255, 105, 0, 255], [255, 109, 0, 255], [255, 113, 0, 255], [255, 117, 0, 255], [255, 121, 0, 255], [255, 125, 0, 255], [255, 130, 0, 255], [255, 134, 0, 255], [255, 138, 0, 255], [255, 142, 0, 255], [255, 146, 0, 255], [255, 150, 0, 255], [255, 154, 0, 255], [255, 158, 0, 255], [255, 162, 0, 255], [255, 166, 0, 255], [255, 170, 0, 255], [255, 174, 0, 255], [255, 178, 0, 255], [255, 182, 0, 255], [255, 186, 0, 255], [255, 190, 0, 255], [255, 194, 0, 255], [255, 198, 0, 255], [255, 202, 0, 255], [255, 206, 0, 255], [255, 210, 0, 255], [255, 215, 0, 255], [255, 219, 0, 255], [255, 223, 0, 255], [255, 227, 0, 255], [255, 231, 0, 255], [255, 235, 0, 255], [255, 239, 0, 255], [255, 243, 0, 255], [255, 247, 0, 255], [255, 251, 0, 255], [255, 255, 0, 255]], dtype=np.ubyte), 'bone' : np.array([[ 0, 0, 1, 255], [ 4, 4, 6, 255], [ 7, 7, 11, 255], [ 11, 11, 16, 255], [ 14, 14, 21, 255], [ 18, 18, 26, 255], [ 21, 21, 31, 255], [ 25, 25, 35, 255], [ 28, 28, 40, 255], [ 32, 32, 45, 255], [ 35, 35, 50, 255], [ 39, 39, 55, 255], [ 43, 43, 60, 255], [ 46, 46, 65, 255], [ 50, 50, 70, 255], [ 53, 53, 74, 255], [ 57, 57, 79, 255], [ 60, 60, 84, 255], [ 64, 64, 89, 255], [ 67, 67, 94, 255], [ 71, 71, 99, 255], [ 74, 74, 104, 255], [ 78, 78, 108, 255], [ 81, 81, 113, 255], [ 85, 86, 117, 255], [ 89, 91, 120, 255], [ 92, 96, 124, 255], [ 96, 101, 128, 255], [ 99, 106, 131, 255], [103, 111, 135, 255], [106, 116, 138, 255], [110, 120, 142, 255], [113, 125, 145, 255], [117, 130, 149, 255], [120, 135, 152, 255], [124, 140, 156, 255], [128, 145, 159, 255], [131, 150, 163, 255], [135, 155, 166, 255], [138, 159, 170, 255], [142, 164, 174, 255], [145, 169, 177, 255], [149, 174, 181, 255], [152, 179, 184, 255], [156, 184, 188, 255], [159, 189, 191, 255], [163, 193, 195, 255], [166, 198, 198, 255], [172, 202, 202, 255], [178, 205, 205, 255], [183, 209, 209, 255], [189, 213, 213, 255], [194, 216, 216, 255], [200, 220, 220, 255], [205, 223, 223, 255], [211, 227, 227, 255], [216, 230, 230, 255], [222, 234, 234, 255], [227, 237, 237, 255], [233, 241, 241, 255], [238, 244, 244, 255], [244, 248, 248, 255], [249, 251, 251, 255], [255, 255, 255, 255]], dtype=np.ubyte), 'colorcube' : np.array([[ 85, 85, 0, 255], [ 85, 170, 0, 255], [ 85, 255, 0, 255], [170, 85, 0, 255], [170, 170, 0, 255], [170, 255, 0, 255], [255, 85, 0, 255], [255, 170, 0, 255], [255, 255, 0, 255], [ 0, 85, 128, 255], [ 0, 170, 128, 255], [ 0, 255, 128, 255], [ 85, 0, 128, 255], [ 85, 85, 128, 255], [ 85, 170, 128, 255], [ 85, 255, 128, 255], [170, 0, 128, 255], [170, 85, 128, 255], [170, 170, 128, 255], [170, 255, 128, 255], [255, 0, 128, 255], [255, 85, 128, 255], [255, 170, 128, 255], [255, 255, 128, 255], [ 0, 85, 255, 255], [ 0, 170, 255, 255], [ 0, 255, 255, 255], [ 85, 0, 255, 255], [ 85, 85, 255, 255], [ 85, 170, 255, 255], [ 85, 255, 255, 255], [170, 0, 255, 255], [170, 85, 255, 255], [170, 170, 255, 255], [170, 255, 255, 255], [255, 0, 255, 255], [255, 85, 255, 255], [255, 170, 255, 255], [ 43, 0, 0, 255], [ 85, 0, 0, 255], [128, 0, 0, 255], [170, 0, 0, 255], [213, 0, 0, 255], [255, 0, 0, 255], [ 0, 43, 0, 255], [ 0, 85, 0, 255], [ 0, 128, 0, 255], [ 0, 170, 0, 255], [ 0, 213, 0, 255], [ 0, 255, 0, 255], [ 0, 0, 43, 255], [ 0, 0, 85, 255], [ 0, 0, 128, 255], [ 0, 0, 170, 255], [ 0, 0, 213, 255], [ 0, 0, 255, 255], [ 0, 0, 0, 255], [ 36, 36, 36, 255], [ 73, 73, 73, 255], [109, 109, 109, 255], [146, 146, 146, 255], [182, 182, 182, 255], [219, 219, 219, 255], [255, 255, 255, 255]], dtype=np.ubyte), 'cool' : np.array([[ 0, 255, 255, 255], [ 4, 251, 255, 255], [ 8, 247, 255, 255], [ 12, 243, 255, 255], [ 16, 239, 255, 255], [ 20, 235, 255, 255], [ 24, 231, 255, 255], [ 28, 227, 255, 255], [ 32, 223, 255, 255], [ 36, 219, 255, 255], [ 40, 215, 255, 255], [ 45, 210, 255, 255], [ 49, 206, 255, 255], [ 53, 202, 255, 255], [ 57, 198, 255, 255], [ 61, 194, 255, 255], [ 65, 190, 255, 255], [ 69, 186, 255, 255], [ 73, 182, 255, 255], [ 77, 178, 255, 255], [ 81, 174, 255, 255], [ 85, 170, 255, 255], [ 89, 166, 255, 255], [ 93, 162, 255, 255], [ 97, 158, 255, 255], [101, 154, 255, 255], [105, 150, 255, 255], [109, 146, 255, 255], [113, 142, 255, 255], [117, 138, 255, 255], [121, 134, 255, 255], [125, 130, 255, 255], [130, 125, 255, 255], [134, 121, 255, 255], [138, 117, 255, 255], [142, 113, 255, 255], [146, 109, 255, 255], [150, 105, 255, 255], [154, 101, 255, 255], [158, 97, 255, 255], [162, 93, 255, 255], [166, 89, 255, 255], [170, 85, 255, 255], [174, 81, 255, 255], [178, 77, 255, 255], [182, 73, 255, 255], [186, 69, 255, 255], [190, 65, 255, 255], [194, 61, 255, 255], [198, 57, 255, 255], [202, 53, 255, 255], [206, 49, 255, 255], [210, 45, 255, 255], [215, 40, 255, 255], [219, 36, 255, 255], [223, 32, 255, 255], [227, 28, 255, 255], [231, 24, 255, 255], [235, 20, 255, 255], [239, 16, 255, 255], [243, 12, 255, 255], [247, 8, 255, 255], [251, 4, 255, 255], [255, 0, 255, 255]], dtype=np.ubyte), 'copper' : np.array([[ 0, 0, 0, 255], [ 5, 3, 2, 255], [ 10, 6, 4, 255], [ 15, 9, 6, 255], [ 20, 13, 8, 255], [ 25, 16, 10, 255], [ 30, 19, 12, 255], [ 35, 22, 14, 255], [ 40, 25, 16, 255], [ 46, 28, 18, 255], [ 51, 32, 20, 255], [ 56, 35, 22, 255], [ 61, 38, 24, 255], [ 66, 41, 26, 255], [ 71, 44, 28, 255], [ 76, 47, 30, 255], [ 81, 51, 32, 255], [ 86, 54, 34, 255], [ 91, 57, 36, 255], [ 96, 60, 38, 255], [101, 63, 40, 255], [106, 66, 42, 255], [111, 70, 44, 255], [116, 73, 46, 255], [121, 76, 48, 255], [126, 79, 50, 255], [132, 82, 52, 255], [137, 85, 54, 255], [142, 89, 56, 255], [147, 92, 58, 255], [152, 95, 60, 255], [157, 98, 62, 255], [162, 101, 64, 255], [167, 104, 66, 255], [172, 108, 68, 255], [177, 111, 70, 255], [182, 114, 72, 255], [187, 117, 75, 255], [192, 120, 77, 255], [197, 123, 79, 255], [202, 126, 81, 255], [207, 130, 83, 255], [212, 133, 85, 255], [218, 136, 87, 255], [223, 139, 89, 255], [228, 142, 91, 255], [233, 145, 93, 255], [238, 149, 95, 255], [243, 152, 97, 255], [248, 155, 99, 255], [253, 158, 101, 255], [255, 161, 103, 255], [255, 164, 105, 255], [255, 168, 107, 255], [255, 171, 109, 255], [255, 174, 111, 255], [255, 177, 113, 255], [255, 180, 115, 255], [255, 183, 117, 255], [255, 187, 119, 255], [255, 190, 121, 255], [255, 193, 123, 255], [255, 196, 125, 255], [255, 199, 127, 255]], dtype=np.ubyte), 'gray' : np.array([[ 0, 0, 0, 255], [ 4, 4, 4, 255], [ 8, 8, 8, 255], [ 12, 12, 12, 255], [ 16, 16, 16, 255], [ 20, 20, 20, 255], [ 24, 24, 24, 255], [ 28, 28, 28, 255], [ 32, 32, 32, 255], [ 36, 36, 36, 255], [ 40, 40, 40, 255], [ 45, 45, 45, 255], [ 49, 49, 49, 255], [ 53, 53, 53, 255], [ 57, 57, 57, 255], [ 61, 61, 61, 255], [ 65, 65, 65, 255], [ 69, 69, 69, 255], [ 73, 73, 73, 255], [ 77, 77, 77, 255], [ 81, 81, 81, 255], [ 85, 85, 85, 255], [ 89, 89, 89, 255], [ 93, 93, 93, 255], [ 97, 97, 97, 255], [101, 101, 101, 255], [105, 105, 105, 255], [109, 109, 109, 255], [113, 113, 113, 255], [117, 117, 117, 255], [121, 121, 121, 255], [125, 125, 125, 255], [130, 130, 130, 255], [134, 134, 134, 255], [138, 138, 138, 255], [142, 142, 142, 255], [146, 146, 146, 255], [150, 150, 150, 255], [154, 154, 154, 255], [158, 158, 158, 255], [162, 162, 162, 255], [166, 166, 166, 255], [170, 170, 170, 255], [174, 174, 174, 255], [178, 178, 178, 255], [182, 182, 182, 255], [186, 186, 186, 255], [190, 190, 190, 255], [194, 194, 194, 255], [198, 198, 198, 255], [202, 202, 202, 255], [206, 206, 206, 255], [210, 210, 210, 255], [215, 215, 215, 255], [219, 219, 219, 255], [223, 223, 223, 255], [227, 227, 227, 255], [231, 231, 231, 255], [235, 235, 235, 255], [239, 239, 239, 255], [243, 243, 243, 255], [247, 247, 247, 255], [251, 251, 251, 255], [255, 255, 255, 255]], dtype=np.ubyte), 'hot' : np.array([[ 11, 0, 0, 255], [ 21, 0, 0, 255], [ 32, 0, 0, 255], [ 43, 0, 0, 255], [ 53, 0, 0, 255], [ 64, 0, 0, 255], [ 74, 0, 0, 255], [ 85, 0, 0, 255], [ 96, 0, 0, 255], [106, 0, 0, 255], [117, 0, 0, 255], [128, 0, 0, 255], [138, 0, 0, 255], [149, 0, 0, 255], [159, 0, 0, 255], [170, 0, 0, 255], [181, 0, 0, 255], [191, 0, 0, 255], [202, 0, 0, 255], [213, 0, 0, 255], [223, 0, 0, 255], [234, 0, 0, 255], [244, 0, 0, 255], [255, 0, 0, 255], [255, 11, 0, 255], [255, 21, 0, 255], [255, 32, 0, 255], [255, 43, 0, 255], [255, 53, 0, 255], [255, 64, 0, 255], [255, 74, 0, 255], [255, 85, 0, 255], [255, 96, 0, 255], [255, 106, 0, 255], [255, 117, 0, 255], [255, 128, 0, 255], [255, 138, 0, 255], [255, 149, 0, 255], [255, 159, 0, 255], [255, 170, 0, 255], [255, 181, 0, 255], [255, 191, 0, 255], [255, 202, 0, 255], [255, 213, 0, 255], [255, 223, 0, 255], [255, 234, 0, 255], [255, 244, 0, 255], [255, 255, 0, 255], [255, 255, 16, 255], [255, 255, 32, 255], [255, 255, 48, 255], [255, 255, 64, 255], [255, 255, 80, 255], [255, 255, 96, 255], [255, 255, 112, 255], [255, 255, 128, 255], [255, 255, 143, 255], [255, 255, 159, 255], [255, 255, 175, 255], [255, 255, 191, 255], [255, 255, 207, 255], [255, 255, 223, 255], [255, 255, 239, 255], [255, 255, 255, 255]], dtype=np.ubyte), 'hsv' : np.array([[255, 0, 0, 255], [255, 24, 0, 255], [255, 48, 0, 255], [255, 72, 0, 255], [255, 96, 0, 255], [255, 120, 0, 255], [255, 143, 0, 255], [255, 167, 0, 255], [255, 191, 0, 255], [255, 215, 0, 255], [255, 239, 0, 255], [247, 255, 0, 255], [223, 255, 0, 255], [199, 255, 0, 255], [175, 255, 0, 255], [151, 255, 0, 255], [128, 255, 0, 255], [104, 255, 0, 255], [ 80, 255, 0, 255], [ 56, 255, 0, 255], [ 32, 255, 0, 255], [ 8, 255, 0, 255], [ 0, 255, 16, 255], [ 0, 255, 40, 255], [ 0, 255, 64, 255], [ 0, 255, 88, 255], [ 0, 255, 112, 255], [ 0, 255, 135, 255], [ 0, 255, 159, 255], [ 0, 255, 183, 255], [ 0, 255, 207, 255], [ 0, 255, 231, 255], [ 0, 255, 255, 255], [ 0, 231, 255, 255], [ 0, 207, 255, 255], [ 0, 183, 255, 255], [ 0, 159, 255, 255], [ 0, 135, 255, 255], [ 0, 112, 255, 255], [ 0, 88, 255, 255], [ 0, 64, 255, 255], [ 0, 40, 255, 255], [ 0, 16, 255, 255], [ 8, 0, 255, 255], [ 32, 0, 255, 255], [ 56, 0, 255, 255], [ 80, 0, 255, 255], [104, 0, 255, 255], [128, 0, 255, 255], [151, 0, 255, 255], [175, 0, 255, 255], [199, 0, 255, 255], [223, 0, 255, 255], [247, 0, 255, 255], [255, 0, 239, 255], [255, 0, 215, 255], [255, 0, 191, 255], [255, 0, 167, 255], [255, 0, 143, 255], [255, 0, 120, 255], [255, 0, 96, 255], [255, 0, 72, 255], [255, 0, 48, 255], [255, 0, 24, 255]], dtype=np.ubyte), 'parula' : np.array([[ 53, 42, 135, 255], [ 54, 48, 147, 255], [ 54, 55, 160, 255], [ 53, 61, 173, 255], [ 50, 67, 186, 255], [ 44, 74, 199, 255], [ 32, 83, 212, 255], [ 15, 92, 221, 255], [ 3, 99, 225, 255], [ 2, 104, 225, 255], [ 4, 109, 224, 255], [ 8, 113, 222, 255], [ 13, 117, 220, 255], [ 16, 121, 218, 255], [ 18, 125, 216, 255], [ 20, 129, 214, 255], [ 20, 133, 212, 255], [ 19, 137, 211, 255], [ 16, 142, 210, 255], [ 12, 147, 210, 255], [ 9, 152, 209, 255], [ 7, 156, 207, 255], [ 6, 160, 205, 255], [ 6, 164, 202, 255], [ 6, 167, 198, 255], [ 7, 169, 194, 255], [ 10, 172, 190, 255], [ 15, 174, 185, 255], [ 21, 177, 180, 255], [ 29, 179, 175, 255], [ 37, 181, 169, 255], [ 46, 183, 164, 255], [ 56, 185, 158, 255], [ 66, 187, 152, 255], [ 77, 188, 146, 255], [ 89, 189, 140, 255], [101, 190, 134, 255], [113, 191, 128, 255], [124, 191, 123, 255], [135, 191, 119, 255], [146, 191, 115, 255], [156, 191, 111, 255], [165, 190, 107, 255], [174, 190, 103, 255], [183, 189, 100, 255], [192, 188, 96, 255], [200, 188, 93, 255], [209, 187, 89, 255], [217, 186, 86, 255], [225, 185, 82, 255], [233, 185, 78, 255], [241, 185, 74, 255], [248, 187, 68, 255], [253, 190, 61, 255], [255, 195, 55, 255], [254, 200, 50, 255], [252, 206, 46, 255], [250, 211, 42, 255], [247, 216, 38, 255], [245, 222, 33, 255], [245, 228, 29, 255], [245, 235, 24, 255], [246, 243, 19, 255], [249, 251, 14, 255]], dtype=np.ubyte), 'pink' : np.array([[ 30, 0, 0, 255], [ 50, 26, 26, 255], [ 64, 37, 37, 255], [ 75, 45, 45, 255], [ 85, 52, 52, 255], [ 94, 59, 59, 255], [102, 64, 64, 255], [110, 69, 69, 255], [117, 74, 74, 255], [123, 79, 79, 255], [130, 83, 83, 255], [136, 87, 87, 255], [141, 91, 91, 255], [147, 95, 95, 255], [152, 98, 98, 255], [157, 102, 102, 255], [162, 105, 105, 255], [167, 108, 108, 255], [172, 111, 111, 255], [176, 114, 114, 255], [181, 117, 117, 255], [185, 120, 120, 255], [189, 123, 123, 255], [194, 126, 126, 255], [195, 132, 129, 255], [197, 138, 131, 255], [199, 144, 134, 255], [201, 149, 136, 255], [202, 154, 139, 255], [204, 159, 141, 255], [206, 164, 144, 255], [207, 169, 146, 255], [209, 174, 148, 255], [211, 178, 151, 255], [212, 183, 153, 255], [214, 187, 155, 255], [216, 191, 157, 255], [217, 195, 160, 255], [219, 199, 162, 255], [220, 203, 164, 255], [222, 207, 166, 255], [223, 211, 168, 255], [225, 215, 170, 255], [226, 218, 172, 255], [228, 222, 174, 255], [229, 225, 176, 255], [231, 229, 178, 255], [232, 232, 180, 255], [234, 234, 185, 255], [235, 235, 191, 255], [237, 237, 196, 255], [238, 238, 201, 255], [240, 240, 206, 255], [241, 241, 211, 255], [243, 243, 216, 255], [244, 244, 221, 255], [245, 245, 225, 255], [247, 247, 230, 255], [248, 248, 234, 255], [250, 250, 238, 255], [251, 251, 243, 255], [252, 252, 247, 255], [254, 254, 251, 255], [255, 255, 255, 255]], dtype=np.ubyte), 'spring' : np.array([[255, 0, 255, 255], [255, 4, 251, 255], [255, 8, 247, 255], [255, 12, 243, 255], [255, 16, 239, 255], [255, 20, 235, 255], [255, 24, 231, 255], [255, 28, 227, 255], [255, 32, 223, 255], [255, 36, 219, 255], [255, 40, 215, 255], [255, 45, 210, 255], [255, 49, 206, 255], [255, 53, 202, 255], [255, 57, 198, 255], [255, 61, 194, 255], [255, 65, 190, 255], [255, 69, 186, 255], [255, 73, 182, 255], [255, 77, 178, 255], [255, 81, 174, 255], [255, 85, 170, 255], [255, 89, 166, 255], [255, 93, 162, 255], [255, 97, 158, 255], [255, 101, 154, 255], [255, 105, 150, 255], [255, 109, 146, 255], [255, 113, 142, 255], [255, 117, 138, 255], [255, 121, 134, 255], [255, 125, 130, 255], [255, 130, 125, 255], [255, 134, 121, 255], [255, 138, 117, 255], [255, 142, 113, 255], [255, 146, 109, 255], [255, 150, 105, 255], [255, 154, 101, 255], [255, 158, 97, 255], [255, 162, 93, 255], [255, 166, 89, 255], [255, 170, 85, 255], [255, 174, 81, 255], [255, 178, 77, 255], [255, 182, 73, 255], [255, 186, 69, 255], [255, 190, 65, 255], [255, 194, 61, 255], [255, 198, 57, 255], [255, 202, 53, 255], [255, 206, 49, 255], [255, 210, 45, 255], [255, 215, 40, 255], [255, 219, 36, 255], [255, 223, 32, 255], [255, 227, 28, 255], [255, 231, 24, 255], [255, 235, 20, 255], [255, 239, 16, 255], [255, 243, 12, 255], [255, 247, 8, 255], [255, 251, 4, 255], [255, 255, 0, 255]], dtype=np.ubyte), 'summer' : np.array([[ 0, 128, 102, 255], [ 4, 130, 102, 255], [ 8, 132, 102, 255], [ 12, 134, 102, 255], [ 16, 136, 102, 255], [ 20, 138, 102, 255], [ 24, 140, 102, 255], [ 28, 142, 102, 255], [ 32, 144, 102, 255], [ 36, 146, 102, 255], [ 40, 148, 102, 255], [ 45, 150, 102, 255], [ 49, 152, 102, 255], [ 53, 154, 102, 255], [ 57, 156, 102, 255], [ 61, 158, 102, 255], [ 65, 160, 102, 255], [ 69, 162, 102, 255], [ 73, 164, 102, 255], [ 77, 166, 102, 255], [ 81, 168, 102, 255], [ 85, 170, 102, 255], [ 89, 172, 102, 255], [ 93, 174, 102, 255], [ 97, 176, 102, 255], [101, 178, 102, 255], [105, 180, 102, 255], [109, 182, 102, 255], [113, 184, 102, 255], [117, 186, 102, 255], [121, 188, 102, 255], [125, 190, 102, 255], [130, 192, 102, 255], [134, 194, 102, 255], [138, 196, 102, 255], [142, 198, 102, 255], [146, 200, 102, 255], [150, 202, 102, 255], [154, 204, 102, 255], [158, 206, 102, 255], [162, 208, 102, 255], [166, 210, 102, 255], [170, 212, 102, 255], [174, 215, 102, 255], [178, 217, 102, 255], [182, 219, 102, 255], [186, 221, 102, 255], [190, 223, 102, 255], [194, 225, 102, 255], [198, 227, 102, 255], [202, 229, 102, 255], [206, 231, 102, 255], [210, 233, 102, 255], [215, 235, 102, 255], [219, 237, 102, 255], [223, 239, 102, 255], [227, 241, 102, 255], [231, 243, 102, 255], [235, 245, 102, 255], [239, 247, 102, 255], [243, 249, 102, 255], [247, 251, 102, 255], [251, 253, 102, 255], [255, 255, 102, 255]], dtype=np.ubyte), 'winter' : np.array([[ 0, 0, 255, 255], [ 0, 4, 253, 255], [ 0, 8, 251, 255], [ 0, 12, 249, 255], [ 0, 16, 247, 255], [ 0, 20, 245, 255], [ 0, 24, 243, 255], [ 0, 28, 241, 255], [ 0, 32, 239, 255], [ 0, 36, 237, 255], [ 0, 40, 235, 255], [ 0, 45, 233, 255], [ 0, 49, 231, 255], [ 0, 53, 229, 255], [ 0, 57, 227, 255], [ 0, 61, 225, 255], [ 0, 65, 223, 255], [ 0, 69, 221, 255], [ 0, 73, 219, 255], [ 0, 77, 217, 255], [ 0, 81, 215, 255], [ 0, 85, 213, 255], [ 0, 89, 210, 255], [ 0, 93, 208, 255], [ 0, 97, 206, 255], [ 0, 101, 204, 255], [ 0, 105, 202, 255], [ 0, 109, 200, 255], [ 0, 113, 198, 255], [ 0, 117, 196, 255], [ 0, 121, 194, 255], [ 0, 125, 192, 255], [ 0, 130, 190, 255], [ 0, 134, 188, 255], [ 0, 138, 186, 255], [ 0, 142, 184, 255], [ 0, 146, 182, 255], [ 0, 150, 180, 255], [ 0, 154, 178, 255], [ 0, 158, 176, 255], [ 0, 162, 174, 255], [ 0, 166, 172, 255], [ 0, 170, 170, 255], [ 0, 174, 168, 255], [ 0, 178, 166, 255], [ 0, 182, 164, 255], [ 0, 186, 162, 255], [ 0, 190, 160, 255], [ 0, 194, 158, 255], [ 0, 198, 156, 255], [ 0, 202, 154, 255], [ 0, 206, 152, 255], [ 0, 210, 150, 255], [ 0, 215, 148, 255], [ 0, 219, 146, 255], [ 0, 223, 144, 255], [ 0, 227, 142, 255], [ 0, 231, 140, 255], [ 0, 235, 138, 255], [ 0, 239, 136, 255], [ 0, 243, 134, 255], [ 0, 247, 132, 255], [ 0, 251, 130, 255], [ 0, 255, 128, 255]], dtype=np.ubyte), } # < To this line > keys=['jet','autumn','bone','colorcube','cool','copper','gray','hot','hsv','parula','pink','spring','summer','winter'] idx = idx % len(keys) colormap = colormaps[keys[idx]] pos = pos_min + (pos_max - pos_min) * np.arange(len(colormap))/(len(colormap)-1) global GlobalColormap if not GlobalColormap == keys[idx]: print('Active colormap: ' + keys[idx]) GlobalColormap=keys[idx] return pg.ColorMap(pos, colormap) def plot_Data2D(data, plt, log=False, legend=True, icolormap=0, verbose=False, fontsize=10, cbmin=None, cbmax=None): ''' create a layout and populate a plotItem with data Data2D, adding a color bar ''' # data img = pg.ImageItem() dataset = np.array(data.zvals) dataset = np.transpose(dataset) datashape = dataset.shape ymin = 1e-19 if log: dataset = np.reshape(dataset, (1, datashape[0]*datashape[1])) idx = dataset[dataset>0] if len(idx) > 0: ymin = np.min(idx)/10 dataset[dataset<=0] = ymin dataset = np.reshape(dataset, datashape) dataset = np.log10(dataset) else: dataset = np.reshape(dataset, datashape) img.setImage(dataset) # scale(x,y) is in %, translate(x,y) is in the original units dx = (data.xlimits[1] - data.xlimits[0])/datashape[0] dy = (data.xlimits[3] - data.xlimits[2])/datashape[1] tr = QtGui.QTransform() tr.scale(dx,dy) tr.translate(data.xlimits[0]/dx,data.xlimits[2]/dy) # Calculate translation in original pixel units img.setTransform(tr) # color map (by lookup table) cb_pos_min = cbmin if cbmin else np.min(dataset) cb_pos_max = cbmax if cbmax else np.max(dataset) colormap = get_color_map(icolormap, cb_pos_min, cb_pos_max) lut = colormap.getLookupTable(cb_pos_min, cb_pos_max, 256) img.setLookupTable(lut) # graphics layout with a plotitem and a gradienteditoritem layout = pg.GraphicsLayout() layout.setContentsMargins(0, 0, 20, 5) # plot area layout.addLabel(' ', 0, 0, colspan=2) layout.addItem(plt, 1, 0) labelStyle = {'color': '#FFF', 'font-size': '%spt' % fontsize} plt.getAxis('bottom').setLabel(data.xlabel, **labelStyle) plt.getAxis('left').setLabel(data.ylabel, **labelStyle) plt.setMenuEnabled(False) if legend: plt.legend = ModLegend(offset=(-1, 1), text_size='%spt' % str(fontsize)) plt.legend.setParentItem(plt.vb) try: lname1 = '
%s
I = %s
' % (data.component, data.values[0]) if verbose: lname1 = '%s [%s]

%s

I = %s Err = %s N = %s; %s' % (data.component, data.filename, data.title, data.values[0], data.values[1], data.values[2], data.statistics) except: lname1 = '%s
[%s]' % (data.component, data.filename) if lname1: plt.plot([0], [0], name=lname1) plt.addItem(img) # Set the x and y ranges correctly plt.getViewBox().setXRange(data.xlimits[0], data.xlimits[1], padding=0) plt.getViewBox().setYRange(data.xlimits[2], data.xlimits[3], padding=0) # # color bar # if (fontsize >= 8): cbimg = pg.ImageItem() numsteps = 100 arr_1 = cb_pos_min + (cb_pos_max - cb_pos_min) * np.arange(numsteps)/(numsteps) cbimg.setImage(np.array([arr_1])) # calculate scaling and translation for the y-axis dy = (cb_pos_max - cb_pos_min) / numsteps # Prevent division by 0 if (dy==0): dy=1; ty = (cb_pos_min) / dy tr = QtGui.QTransform() tr.scale(dx,dy) tr.translate(1,ty) cbimg.setTransform(tr) #cbimg.translate(ty) cbimg.setLookupTable(lut) colorbar = layout.addPlot(1, 1) colorbar.addItem(cbimg) colorbar.setFixedWidth(40) pg.GradientEditorItem colorbar.axes['top']['item'].show() colorbar.axes['top']['item'].setStyle(showValues=False) colorbar.axes['bottom']['item'].show() colorbar.axes['bottom']['item'].setStyle(showValues=False) colorbar.axes['left']['item'].show() colorbar.axes['left']['item'].setStyle(showValues=False) colorbar.axes['right']['item'].show() colorbar.getViewBox().autoRange(padding=0) plt.layout_2d = layout # return layout so it doesn't get garbage collected, but the proper plot viewBox pointer for click events return plt.getViewBox(), layout