Skip to content

Commit ee68b84

Browse files
committed
Add toggle to "plot 1D-curves from 0-value" in linear mode
1 parent e0af992 commit ee68b84

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

tools/Python/mccodelib/pqtgfrontend.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ def get_help_string():
3030
helplines.append('')
3131
helplines.append('q - quit')
3232
helplines.append('p - save png')
33-
if not os.name == 'nt':
34-
helplines.append('s - save svg')
35-
helplines.append('l - log toggle')
33+
#if not os.name == 'nt':
34+
helplines.append('s - save svg')
35+
helplines.append('l - log toggle (disables plot from zero)')
36+
helplines.append('0 - plot 1D-curves from zero (disables log)')
3637
helplines.append('t - textinfo toggle')
3738
helplines.append('c - cycle colormap')
3839
helplines.append('F1/h - help')
@@ -49,21 +50,31 @@ class ViewModel():
4950
It is a kind of viewmodel, originally a log logstate housekeeping object,
5051
extended by various other logstate variables as well.
5152
'''
52-
def __init__(self, log=False, legend=True, sourcedir=None):
53+
def __init__(self, log=False, fromzero=False, legend=True, sourcedir=None):
5354
self.log = log
55+
self.fromzero = fromzero
5456
self.icolormap = 0
5557
self.legend = legend
5658
self.sourcedir = sourcedir
5759
def flip_log(self):
5860
self.log = not self.log
61+
if self.log:
62+
self.fromzero=False
5963
return self.log
64+
def flip_fromzero(self):
65+
self.fromzero = not self.fromzero
66+
if self.fromzero:
67+
self.log=False
68+
return self.fromzero
6069
def inc_colormap(self):
6170
self.icolormap += 1
6271
def flip_legend(self):
6372
self.legend = not self.legend
6473
return self.legend
6574
def logstate(self):
6675
return self.log
76+
def fromzerostate(self):
77+
return self.fromzero
6778
def legendstate(self):
6879
return self.legend
6980
def cmapindex(self):
@@ -267,7 +278,7 @@ def show_help(self):
267278
def set_keyhandler(self, replot_cb, back_cb, key, modifier):
268279
''' sets a clickhadler according to input '''
269280

270-
def key_handler(ev, replot_cb, back_cb, savefile_cb, flip_log, flip_legend, inc_cmap, expand_sp, debug=False):
281+
def key_handler(ev, replot_cb, back_cb, savefile_cb, flip_log, flip_fromzero, flip_legend, inc_cmap, expand_sp, debug=False):
271282
''' global keypress handler, replot_cb is a function of log '''
272283

273284
if hasattr(QtCore.Qt, "Key"):
@@ -280,11 +291,14 @@ def key_handler(ev, replot_cb, back_cb, savefile_cb, flip_log, flip_legend, inc_
280291
elif ev.key() == k.Key_L: # l
281292
flip_log()
282293
replot_cb()
294+
elif ev.key() == k.Key_0: # 0
295+
flip_fromzero()
296+
replot_cb()
283297
elif ev.key() == k.Key_P: # p
284298
savefile_cb(format='png')
285299
elif ev.key() == 83: # s
286-
if not os.name == 'nt':
287-
savefile_cb(format='svg')
300+
#if not os.name == 'nt':
301+
savefile_cb(format='svg')
288302
elif ev.key() == k.Key_T: # t
289303
print("Toggle legend visibility")
290304
flip_legend()
@@ -313,6 +327,7 @@ def key_handler(ev, replot_cb, back_cb, savefile_cb, flip_log, flip_legend, inc_
313327
savefile_cb = savefile_cb,
314328
back_cb = back_cb,
315329
flip_log = self.viewmodel.flip_log,
330+
flip_fromzero = self.viewmodel.flip_fromzero,
316331
flip_legend = self.viewmodel.flip_legend,
317332
inc_cmap = self.viewmodel.inc_colormap,
318333
expand_sp = expand_sp)
@@ -411,10 +426,11 @@ def click_handler(event, node_list, node_cb, click, mod, debug=False):
411426
event, node_list=node_list, node_cb=node_cb, click=click, mod=modifier))
412427

413428

414-
def get_plot_func_opts(self, log, legend, icolormap, verbose, fontsize, cbmin=None, cbmax=None):
429+
def get_plot_func_opts(self, fromzero, log, legend, icolormap, verbose, fontsize, cbmin=None, cbmax=None):
415430
''' returns a dict for holding the plot options relevant for this plotting frontend '''
416431
d = {}
417432
d['log'] = log
433+
d['fromzero'] = fromzero
418434
d['legend'] = legend
419435
d['icolormap'] = icolormap
420436
d['verbose'] = verbose
@@ -470,7 +486,7 @@ def get_golden_rowlen(n):
470486
else:
471487
cbmin, cbmax = self.get_sweep_multiplot_colorbar_limits(node)
472488

473-
options = self.get_plot_func_opts(
489+
options = self.get_plot_func_opts(self.viewmodel.fromzerostate(),
474490
self.viewmodel.logstate(), self.viewmodel.legendstate(), self.viewmodel.cmapindex(),
475491
verbose, fontsize, cbmin, cbmax)
476492
view_box, plt_itm = self.plot_func(node, i, plt, options)

tools/Python/mcplot/pyqtgraph/plotfuncs.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def plot(node, i, plt, opts):
2727
data = node.getdata_idx(i)
2828

2929
if type(data) is Data1D:
30-
view_box = plot_Data1D(data, plt, log=opts['log'], legend=opts['legend'], icolormap=opts['icolormap'],
30+
view_box = plot_Data1D(data, plt, fromzero=opts['fromzero'], log=opts['log'], legend=opts['legend'], icolormap=opts['icolormap'],
3131
verbose=opts['verbose'], fontsize=opts['fontsize'])
3232
return view_box, plt
3333
elif type(data) is Data2D:
@@ -78,7 +78,7 @@ def plot_Data0D(data, plt, log=False, legend=True, icolormap=0, verbose=True, fo
7878
return plt.getViewBox()
7979

8080

81-
def plot_Data1D(data, plt, log=False, legend=True, icolormap=0, verbose=True, fontsize=10):
81+
def plot_Data1D(data, plt, log=False, fromzero=False, legend=True, icolormap=0, verbose=True, fontsize=10):
8282
''' create a plotItem and populate it with data, Data1D '''
8383
# data
8484
x = np.array(data.xvals).astype(float)
@@ -100,6 +100,9 @@ def plot_Data1D(data, plt, log=False, legend=True, icolormap=0, verbose=True, fo
100100
plt.setLogMode(y=False)
101101
else:
102102
plt.setLogMode(y=False)
103+
if fromzero:
104+
yp=np.append(y,0)
105+
plt.setYRange(np.min(yp), np.max(y), padding=0)
103106

104107
plt.setXRange(np.min(x), np.max(x), padding=0)
105108

@@ -199,7 +202,7 @@ def plot_Data2D(data, plt, log=False, legend=True, icolormap=0, verbose=False, f
199202
ymin = np.min(idx)/10
200203
if ymin <= 0:
201204
ymin=100*sys.float_info.min # Small, finite value.
202-
dataset[dataset<=0] = ymin
205+
dataset[dataset<=0] = ymin
203206
dataset = np.reshape(dataset, datashape)
204207
dataset = np.log10(dataset)
205208
else:

0 commit comments

Comments
 (0)