wxmplot 2026.2.1__tar.gz → 2026.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wxmplot-2026.2.1/wxmplot.egg-info → wxmplot-2026.2.2}/PKG-INFO +1 -1
- wxmplot-2026.2.2/examples/simple.py +8 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/colors.py +7 -3
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/config.py +48 -24
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/plotconfigframe.py +7 -38
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/version.py +3 -3
- {wxmplot-2026.2.1 → wxmplot-2026.2.2/wxmplot.egg-info}/PKG-INFO +1 -1
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot.egg-info/scm_file_list.json +121 -121
- wxmplot-2026.2.2/wxmplot.egg-info/scm_version.json +8 -0
- wxmplot-2026.2.1/examples/simple.py +0 -6
- wxmplot-2026.2.1/wxmplot.egg-info/scm_version.json +0 -8
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/ChangeLog +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/LICENSE +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/MANIFEST.in +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/README.md +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/BasicExamples.ipynb +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/DynamicExamples.ipynb +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/basic_screenshot.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/compare_dislin_mpl.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/compare_plplot.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/contour.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/demo.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/discrete_data.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/errorbar.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/extra_marker_and_line_reporting.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/fill_to_zero.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/fill_uncertainties.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/floatcontrol.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/histogram.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/image.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/image_canvas_ex.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/image_scroll.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/imagematrix.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/interactive_multiplewindows.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/leftright.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/multiple_yaxes.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/multiplot.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/pilatus_display.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/plot_fromdatafile.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/plot_many_traces.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/plotapp.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/rgb_image.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/scatterplot.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/scope_mode_function.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/scope_mode_generator.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/scope_mode_mpl_compare.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/stackedplot.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/stripchart.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/theme_compare.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/tiff_display.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/tifffile.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/time.dat +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/time_update.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/timedata.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/wxmplot_jupyter.ipynb +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/examples/xafs.dat +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/pyproject.toml +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/setup.cfg +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/setup.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/tests/basic_test.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/__init__.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/allow_idle_macosx.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/baseframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/basepanel.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/histogram.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/image_canvas.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/imageconf.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/imageframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/imagematrixframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/imagepanel.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/inputhook.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/interactive.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/line_plot.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/multiframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/plotapp.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/plotframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/plotpanel.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/residualplotframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/stackedplotframe.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/utils.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot/vispy_utils.py +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot.egg-info/SOURCES.txt +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot.egg-info/dependency_links.txt +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot.egg-info/requires.txt +0 -0
- {wxmplot-2026.2.1 → wxmplot-2026.2.2}/wxmplot.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
import numpy as np
|
|
3
|
+
import wxmplot.interactive as wi
|
|
4
|
+
|
|
5
|
+
x = np.linspace(0.0, 20.0, 201)
|
|
6
|
+
wi.plot(x, np.sin(x)/(x+1),
|
|
7
|
+
title='Titles can include latex: $\\chi^2/\\epsilon $ \n and newlines',
|
|
8
|
+
ylabel='unicde can also be used [\u03c7] (\u212B)', xlabel='T (sec)')
|
|
@@ -56,10 +56,14 @@ def hexcolor(color):
|
|
|
56
56
|
|
|
57
57
|
# now, get color to an rgba tuple
|
|
58
58
|
cvals = (0, 0, 0)
|
|
59
|
-
if isinstance(color,
|
|
60
|
-
cvals = color
|
|
61
|
-
elif isinstance(color, list):
|
|
59
|
+
if isinstance(color, list):
|
|
62
60
|
cvals = tuple(color)
|
|
61
|
+
|
|
62
|
+
if isinstance(color, tuple):
|
|
63
|
+
cvals = (min(255, max(0, c)) for c in color)
|
|
64
|
+
if isinstance(color[0], float) and color[0] < 2.0:
|
|
65
|
+
cvals = [int(255*c) for c in color]
|
|
66
|
+
|
|
63
67
|
elif isinstance(color, str):
|
|
64
68
|
c = color.lower().replace(' ', '').replace('gray', 'grey')
|
|
65
69
|
if c in X11_COLORS:
|
|
@@ -222,6 +222,36 @@ def ifnot_none(val, default):
|
|
|
222
222
|
return val if val is not None else default
|
|
223
223
|
|
|
224
224
|
|
|
225
|
+
def clean_texmath(text):
|
|
226
|
+
"""
|
|
227
|
+
clean a string with mixed TeX math and control strings
|
|
228
|
+
|
|
229
|
+
inside of TeX dollar signs, the text is preserved.
|
|
230
|
+
|
|
231
|
+
outsde of TeX dollar signs '\\n' will be replaced in '\n', and `\\t' with '\t'
|
|
232
|
+
"""
|
|
233
|
+
def clean_escape(s):
|
|
234
|
+
s = s.replace('\\n', '\n').replace('\\t', '\t').replace('\\r', '\r')
|
|
235
|
+
if '\\N{' in s or '\\u' in s:
|
|
236
|
+
s = s.encode("utf-8").decode("unicode_escape")
|
|
237
|
+
return s
|
|
238
|
+
|
|
239
|
+
if '$' not in text:
|
|
240
|
+
return clean_escape(text)
|
|
241
|
+
|
|
242
|
+
ndollar = text.count('$')
|
|
243
|
+
if ndollar == 0 or ndollar % 2 == 1:
|
|
244
|
+
return clean_escape(text)
|
|
245
|
+
|
|
246
|
+
sections = []
|
|
247
|
+
for isect, sect in enumerate(text.split('$')):
|
|
248
|
+
if isect % 2 == 0:
|
|
249
|
+
sect = clean_escape(sect)
|
|
250
|
+
sections.append(sect)
|
|
251
|
+
return '$'.join(sections)
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
|
|
225
255
|
class LineProps:
|
|
226
256
|
""" abstraction for Line2D properties, closely related to a
|
|
227
257
|
MatPlotlib Line2D. used to set internal line properties, and
|
|
@@ -246,7 +276,7 @@ class LineProps:
|
|
|
246
276
|
if markercolor is None:
|
|
247
277
|
markercolor = color
|
|
248
278
|
self.markercolor= markercolor
|
|
249
|
-
self.label = label
|
|
279
|
+
self.label = clean_texmath(label)
|
|
250
280
|
self.zorder = zorder
|
|
251
281
|
self.mpline = mpline
|
|
252
282
|
self.yaxes = yaxes
|
|
@@ -267,7 +297,7 @@ class LineProps:
|
|
|
267
297
|
self.marker = ifnot_none(marker, self.marker)
|
|
268
298
|
self.markersize = ifnot_none(markersize, self.markersize)
|
|
269
299
|
self.markercolor= ifnot_none(markercolor,self.markercolor)
|
|
270
|
-
self.label = ifnot_none(label, self.label)
|
|
300
|
+
self.label = ifnot_none(clean_texmath(label), self.label)
|
|
271
301
|
self.zorder = ifnot_none(zorder, self.zorder)
|
|
272
302
|
self.alpha = ifnot_none(alpha, self.alpha)
|
|
273
303
|
self.yaxes = ifnot_none(yaxes, self.yaxes)
|
|
@@ -425,12 +455,10 @@ class PlotConfig:
|
|
|
425
455
|
elif attr in conf:
|
|
426
456
|
setattr(self, attr, conf[attr])
|
|
427
457
|
|
|
428
|
-
|
|
429
|
-
self.set_margins(l, r, t, b, delay_draw=True)
|
|
458
|
+
self.set_margins(*self.margins, delay_draw=True)
|
|
430
459
|
if self.auto_margins:
|
|
431
460
|
self.panel.autoset_margins()
|
|
432
461
|
|
|
433
|
-
ntrace = self.ntrace
|
|
434
462
|
self.reset_trace_properties()
|
|
435
463
|
|
|
436
464
|
if 'traces' in conf:
|
|
@@ -547,17 +575,17 @@ class PlotConfig:
|
|
|
547
575
|
rcParams['xtick.labelsize'] = rcParams['ytick.labelsize'] = n
|
|
548
576
|
|
|
549
577
|
if xlabel is not None:
|
|
550
|
-
self.xlabel = xlabel
|
|
578
|
+
self.xlabel = clean_texmath(xlabel)
|
|
551
579
|
if ylabel is not None:
|
|
552
|
-
self.ylabel = ylabel
|
|
580
|
+
self.ylabel = clean_texmath(ylabel)
|
|
553
581
|
if y2label is not None:
|
|
554
|
-
self.y2label = y2label
|
|
582
|
+
self.y2label = clean_texmath(y2label)
|
|
555
583
|
if y3label is not None:
|
|
556
|
-
self.y3label = y3label
|
|
584
|
+
self.y3label = clean_texmath(y3label)
|
|
557
585
|
if y4label is not None:
|
|
558
|
-
self.y4label = y4label
|
|
586
|
+
self.y4label = clean_texmath(y4label)
|
|
559
587
|
if title is not None:
|
|
560
|
-
self.title = title
|
|
588
|
+
self.title = clean_texmath(title)
|
|
561
589
|
if self.canvas is None:
|
|
562
590
|
return
|
|
563
591
|
axes = self.canvas.figure.get_axes()
|
|
@@ -928,8 +956,7 @@ class PlotConfig:
|
|
|
928
956
|
if yaxes_tracecolor is not None:
|
|
929
957
|
self.yaxes_tracecolor = bool(yaxes_tracecolor)
|
|
930
958
|
|
|
931
|
-
|
|
932
|
-
tcolor = mpl2hexcolor(self.textcolor) # cur_theme['ytick.color'])
|
|
959
|
+
tcolor = mpl2hexcolor(self.textcolor)
|
|
933
960
|
|
|
934
961
|
axes = self.canvas.figure.get_axes()
|
|
935
962
|
colors = [tcolor]*(len(axes)+2)
|
|
@@ -1096,7 +1123,7 @@ class PlotConfig:
|
|
|
1096
1123
|
for trace, lines in enumerate(ax.get_lines()):
|
|
1097
1124
|
try:
|
|
1098
1125
|
dats = copy(self.data_save[ax][trace])
|
|
1099
|
-
except:
|
|
1126
|
+
except Exception:
|
|
1100
1127
|
return
|
|
1101
1128
|
xd, yd = np.asarray(dats[0][:]), np.asarray(dats[1][:])
|
|
1102
1129
|
if expr == 'Y*X':
|
|
@@ -1152,7 +1179,7 @@ class PlotConfig:
|
|
|
1152
1179
|
x_minpos= min(x[np.where(x>0)])
|
|
1153
1180
|
else:
|
|
1154
1181
|
x_minpos= min(x_minpos, min(x[np.where(x>0)]))
|
|
1155
|
-
except:
|
|
1182
|
+
except Exception:
|
|
1156
1183
|
pass
|
|
1157
1184
|
if limits == [None, None, None, None]:
|
|
1158
1185
|
limits = [min(x), max(x), min(y), max(y)]
|
|
@@ -1177,14 +1204,14 @@ class PlotConfig:
|
|
|
1177
1204
|
try:
|
|
1178
1205
|
if xrange < 1.e-10:
|
|
1179
1206
|
xrange = max(1.e-10, (limits[1] + limits[0] )/2.0)
|
|
1180
|
-
except:
|
|
1207
|
+
except Exception:
|
|
1181
1208
|
pass
|
|
1182
1209
|
|
|
1183
1210
|
yrange = limits[3] - limits[2]
|
|
1184
1211
|
try:
|
|
1185
1212
|
if yrange < 1.e-10:
|
|
1186
1213
|
yrange = max(1.e-10, (limits[3] + limits[2] )/2.0)
|
|
1187
|
-
except:
|
|
1214
|
+
except Exception:
|
|
1188
1215
|
pass
|
|
1189
1216
|
|
|
1190
1217
|
limits[0] = limits[0] - xrange * self.viewpad /100.0
|
|
@@ -1208,11 +1235,11 @@ class PlotConfig:
|
|
|
1208
1235
|
all_limits.append(limits)
|
|
1209
1236
|
try:
|
|
1210
1237
|
ax.set_xlim((limits[0], limits[1]), emit=True)
|
|
1211
|
-
except:
|
|
1238
|
+
except Exception:
|
|
1212
1239
|
pass
|
|
1213
1240
|
try:
|
|
1214
1241
|
ax.set_ylim((limits[2], limits[3]), emit=True)
|
|
1215
|
-
except:
|
|
1242
|
+
except Exception:
|
|
1216
1243
|
pass
|
|
1217
1244
|
return all_limits
|
|
1218
1245
|
|
|
@@ -1235,11 +1262,11 @@ class PlotConfig:
|
|
|
1235
1262
|
if i in (1, 2, 3):
|
|
1236
1263
|
ys = getattr(self, f'y{i+1}scale', 'linear')
|
|
1237
1264
|
axes.set_yscale(ys)
|
|
1238
|
-
except:
|
|
1265
|
+
except Exception:
|
|
1239
1266
|
axes.set_yscale('linear')
|
|
1240
1267
|
try:
|
|
1241
1268
|
axes.set_xscale(self.xscale)
|
|
1242
|
-
except:
|
|
1269
|
+
except Exception:
|
|
1243
1270
|
axes.set_xscale('linear')
|
|
1244
1271
|
if not delay_draw:
|
|
1245
1272
|
self.process_data()
|
|
@@ -1255,10 +1282,7 @@ class PlotConfig:
|
|
|
1255
1282
|
"""make keywords for axes.hist()"""
|
|
1256
1283
|
kwargs = {}
|
|
1257
1284
|
|
|
1258
|
-
# print("make hist kwargs")
|
|
1259
1285
|
trace = self.get_trace(trace)
|
|
1260
|
-
prop = self.traces[trace]
|
|
1261
|
-
# print("L Trace ", prop)
|
|
1262
1286
|
|
|
1263
1287
|
for key in ('bins', 'density', 'cumulative', 'histtype',
|
|
1264
1288
|
'orientation', 'align', 'stacked', 'rwidth'):
|
|
@@ -3,14 +3,12 @@
|
|
|
3
3
|
# wxmplott GUI to Configure Line Plots
|
|
4
4
|
|
|
5
5
|
from functools import partial
|
|
6
|
-
import yaml
|
|
7
6
|
import numpy as np
|
|
8
7
|
import wx
|
|
9
8
|
import wx.lib.colourselect as csel
|
|
10
9
|
import wx.lib.scrolledpanel as scrolled
|
|
11
10
|
|
|
12
|
-
from wxutils import (flatnotebook, get_color
|
|
13
|
-
SimpleText, TextCtrl)
|
|
11
|
+
from wxutils import (flatnotebook, get_color)
|
|
14
12
|
|
|
15
13
|
from .utils import LabeledTextCtrl, MenuItem, Choice, FloatSpin
|
|
16
14
|
from .config import PlotConfig
|
|
@@ -29,39 +27,10 @@ def ffmt(val):
|
|
|
29
27
|
if val is not None:
|
|
30
28
|
try:
|
|
31
29
|
return "%.5g" % val
|
|
32
|
-
except:
|
|
30
|
+
except Exception:
|
|
33
31
|
pass
|
|
34
32
|
return repr(val)
|
|
35
33
|
|
|
36
|
-
def clean_texmath(txt):
|
|
37
|
-
"""
|
|
38
|
-
clean tex math string, preserving control sequences
|
|
39
|
-
(incluing \n, so also '\nu') inside $ $, while allowing
|
|
40
|
-
\n and \t to be meaningful in the text string
|
|
41
|
-
"""
|
|
42
|
-
s = "%s " % txt
|
|
43
|
-
out = []
|
|
44
|
-
i = 0
|
|
45
|
-
while i < len(s)-1:
|
|
46
|
-
if s[i] == '\\' and s[i+1] in ('n', 't'):
|
|
47
|
-
if s[i+1] == 'n':
|
|
48
|
-
out.append('\n')
|
|
49
|
-
elif s[i+1] == 't':
|
|
50
|
-
out.append('\t')
|
|
51
|
-
i += 1
|
|
52
|
-
elif s[i] == '$':
|
|
53
|
-
j = s[i+1:].find('$')
|
|
54
|
-
if j < 0:
|
|
55
|
-
j = len(s)
|
|
56
|
-
out.append(s[i:j+2])
|
|
57
|
-
i += j+2
|
|
58
|
-
else:
|
|
59
|
-
out.append(s[i])
|
|
60
|
-
i += 1
|
|
61
|
-
if i > 5000:
|
|
62
|
-
break
|
|
63
|
-
return ''.join(out).strip()
|
|
64
|
-
|
|
65
34
|
############################################################
|
|
66
35
|
# monkey-patch of ColourSelect text setting
|
|
67
36
|
# yes, a PR has been submitted to wx, no it is not merged or released.
|
|
@@ -245,13 +214,13 @@ class PlotConfigFrame(wx.Frame):
|
|
|
245
214
|
raxes = axes[1]
|
|
246
215
|
try:
|
|
247
216
|
user_lims = self.conf.user_limits[laxes]
|
|
248
|
-
except:
|
|
217
|
+
except Exception:
|
|
249
218
|
user_lims = 4*[None]
|
|
250
219
|
auto_b = wx.CheckBox(panel,-1, ' From Data ', (-1, -1), (-1, -1))
|
|
251
220
|
auto_b.Bind(wx.EVT_CHECKBOX,self.onAutoBounds)
|
|
252
221
|
try:
|
|
253
222
|
auto_b.SetValue(self.conf.user_limits[laxes] == 4*[None])
|
|
254
|
-
except:
|
|
223
|
+
except Exception:
|
|
255
224
|
pass
|
|
256
225
|
|
|
257
226
|
self.vpad_val = FloatSpin(panel, value=2.5, min_val=0, max_val=100,
|
|
@@ -962,7 +931,7 @@ class PlotConfigFrame(wx.Frame):
|
|
|
962
931
|
return None
|
|
963
932
|
try:
|
|
964
933
|
return float(v)
|
|
965
|
-
except:
|
|
934
|
+
except Exception:
|
|
966
935
|
return None
|
|
967
936
|
|
|
968
937
|
axes = self.canvas.figure.get_axes()
|
|
@@ -1096,7 +1065,7 @@ class PlotConfigFrame(wx.Frame):
|
|
|
1096
1065
|
self.conf.relabel(**kws)
|
|
1097
1066
|
wid.SetBackgroundColour(get_color('text_bg'))
|
|
1098
1067
|
wid.SetForegroundColour(get_color('text'))
|
|
1099
|
-
except: # as from latex error
|
|
1068
|
+
except Exception: # as from latex error
|
|
1100
1069
|
print("invalid text for item ", item, s)
|
|
1101
1070
|
|
|
1102
1071
|
wid.SetBackgroundColour(get_color('text_invalid_bg'))
|
|
@@ -1104,7 +1073,7 @@ class PlotConfigFrame(wx.Frame):
|
|
|
1104
1073
|
elif item == 'trace':
|
|
1105
1074
|
try:
|
|
1106
1075
|
self.conf.set_trace_label(s, trace=trace)
|
|
1107
|
-
except:
|
|
1076
|
+
except Exception:
|
|
1108
1077
|
pass
|
|
1109
1078
|
|
|
1110
1079
|
def onShowGrid(self,event):
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2026.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (2026, 2,
|
|
21
|
+
__version__ = version = '2026.2.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (2026, 2, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gbb23702e8'
|
|
@@ -1,149 +1,149 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": [
|
|
3
|
-
"LICENSE",
|
|
4
|
-
"ChangeLog",
|
|
5
|
-
"pyproject.toml",
|
|
6
|
-
"MANIFEST.in",
|
|
7
|
-
"README.md",
|
|
8
|
-
"setup.py",
|
|
9
|
-
".gitignore",
|
|
10
3
|
".gitattributes",
|
|
11
|
-
"tests/basic_test.py",
|
|
12
|
-
"wxmplot/config.py",
|
|
13
|
-
"wxmplot/baseframe.py",
|
|
14
|
-
"wxmplot/vispy_utils.py",
|
|
15
|
-
"wxmplot/histogram.py",
|
|
16
|
-
"wxmplot/multiframe.py",
|
|
17
|
-
"wxmplot/basepanel.py",
|
|
18
|
-
"wxmplot/imagematrixframe.py",
|
|
19
|
-
"wxmplot/residualplotframe.py",
|
|
20
|
-
"wxmplot/plotapp.py",
|
|
21
|
-
"wxmplot/__init__.py",
|
|
22
|
-
"wxmplot/stackedplotframe.py",
|
|
23
|
-
"wxmplot/allow_idle_macosx.py",
|
|
24
|
-
"wxmplot/utils.py",
|
|
25
|
-
"wxmplot/imageframe.py",
|
|
26
|
-
"wxmplot/plotpanel.py",
|
|
27
|
-
"wxmplot/interactive.py",
|
|
28
|
-
"wxmplot/inputhook.py",
|
|
29
|
-
"wxmplot/image_canvas.py",
|
|
30
|
-
"wxmplot/plotframe.py",
|
|
31
|
-
"wxmplot/imageconf.py",
|
|
32
|
-
"wxmplot/line_plot.py",
|
|
33
|
-
"wxmplot/imagepanel.py",
|
|
34
|
-
"wxmplot/plotconfigframe.py",
|
|
35
|
-
"wxmplot/colors.py",
|
|
36
|
-
"examples/stackedplot.py",
|
|
37
|
-
"examples/scope_mode_generator.py",
|
|
38
|
-
"examples/time_update.py",
|
|
39
|
-
"examples/extra_marker_and_line_reporting.py",
|
|
40
|
-
"examples/time.dat",
|
|
41
|
-
"examples/scope_mode_mpl_compare.py",
|
|
42
|
-
"examples/rgb_image.py",
|
|
43
|
-
"examples/scatterplot.py",
|
|
44
|
-
"examples/pilatus_display.py",
|
|
45
|
-
"examples/image_canvas_ex.py",
|
|
46
|
-
"examples/tifffile.py",
|
|
47
|
-
"examples/histogram.py",
|
|
48
|
-
"examples/leftright.py",
|
|
49
|
-
"examples/wxmplot_jupyter.ipynb",
|
|
50
|
-
"examples/BasicExamples.ipynb",
|
|
51
|
-
"examples/DynamicExamples.ipynb",
|
|
52
|
-
"examples/plotapp.py",
|
|
53
|
-
"examples/scope_mode_function.py",
|
|
54
|
-
"examples/discrete_data.py",
|
|
55
|
-
"examples/basic_screenshot.py",
|
|
56
|
-
"examples/image_scroll.py",
|
|
57
|
-
"examples/compare_dislin_mpl.py",
|
|
58
|
-
"examples/Pilatus.tiff",
|
|
59
|
-
"examples/timedata.py",
|
|
60
|
-
"examples/fill_uncertainties.py",
|
|
61
|
-
"examples/ceo2.tiff",
|
|
62
|
-
"examples/plot_many_traces.py",
|
|
63
|
-
"examples/floatcontrol.py",
|
|
64
|
-
"examples/multiple_yaxes.py",
|
|
65
|
-
"examples/xafs.dat",
|
|
66
|
-
"examples/interactive_multiplewindows.py",
|
|
67
|
-
"examples/stripchart.py",
|
|
68
|
-
"examples/tiff_display.py",
|
|
69
|
-
"examples/fill_to_zero.py",
|
|
70
|
-
"examples/theme_compare.py",
|
|
71
|
-
"examples/demo.py",
|
|
72
|
-
"examples/compare_plplot.py",
|
|
73
|
-
"examples/simple.py",
|
|
74
|
-
"examples/errorbar.py",
|
|
75
|
-
"examples/contour.py",
|
|
76
|
-
"examples/imagematrix.py",
|
|
77
|
-
"examples/image.py",
|
|
78
|
-
"examples/multiplot.py",
|
|
79
|
-
"examples/plot_fromdatafile.py",
|
|
80
4
|
".github/dependabot.yml",
|
|
81
5
|
".github/workflows/test_wxmplot_install.yml",
|
|
82
|
-
"
|
|
6
|
+
".gitignore",
|
|
7
|
+
"ChangeLog",
|
|
8
|
+
"LICENSE",
|
|
9
|
+
"MANIFEST.in",
|
|
10
|
+
"README.md",
|
|
83
11
|
"doc/Makefile",
|
|
12
|
+
"doc/_static/empty",
|
|
13
|
+
"doc/_static/scope_mode_function.mp4",
|
|
14
|
+
"doc/_static/scope_mode_generator.mp4",
|
|
15
|
+
"doc/_static/scope_mode_mpl_compare.mp4",
|
|
16
|
+
"doc/_templates/indexsidebar.html",
|
|
84
17
|
"doc/comparisons.rst",
|
|
85
18
|
"doc/conf.py",
|
|
86
19
|
"doc/examples.rst",
|
|
87
20
|
"doc/imagepanel.rst",
|
|
88
|
-
"doc/
|
|
89
|
-
"doc/interactive.rst",
|
|
90
|
-
"doc/installation.rst",
|
|
91
|
-
"doc/other.rst",
|
|
92
|
-
"doc/plotpanel.rst",
|
|
93
|
-
"doc/images/plot_compare_wxplot_wx.png",
|
|
94
|
-
"doc/images/imagedisplay.png",
|
|
95
|
-
"doc/images/wxmplot_dislin.png",
|
|
96
|
-
"doc/images/contour_wxmplot.png",
|
|
97
|
-
"doc/images/plot_alphafill_config.png",
|
|
98
|
-
"doc/images/plot_compare_plotly.png",
|
|
21
|
+
"doc/images/ImageConfig.png",
|
|
99
22
|
"doc/images/PlotConfig_LineProps.png",
|
|
100
23
|
"doc/images/PlotConfig_LinePropsAlphaFill.png",
|
|
24
|
+
"doc/images/PlotConfig_Ranges.png",
|
|
25
|
+
"doc/images/PlotConfig_Scatter.png",
|
|
101
26
|
"doc/images/PlotConfig_Text.png",
|
|
102
|
-
"doc/images/
|
|
103
|
-
"doc/images/wxmplot_leftright.png",
|
|
104
|
-
"doc/images/discrete_data.png",
|
|
105
|
-
"doc/images/imshow_wxmplot.png",
|
|
27
|
+
"doc/images/basic_screenshot.png",
|
|
106
28
|
"doc/images/contour.png",
|
|
107
|
-
"doc/images/
|
|
108
|
-
"doc/images/
|
|
109
|
-
"doc/images/
|
|
110
|
-
"doc/images/two_axes.png",
|
|
111
|
-
"doc/images/image_3color_white.png",
|
|
112
|
-
"doc/images/PlotConfig_Scatter.png",
|
|
113
|
-
"doc/images/plot_alphafill_to_dy.png",
|
|
114
|
-
"doc/images/plot_alphafill_to_zero.png",
|
|
29
|
+
"doc/images/contour_wxmplot.png",
|
|
30
|
+
"doc/images/datafile_plot.png",
|
|
31
|
+
"doc/images/discrete_data.png",
|
|
115
32
|
"doc/images/errorbar.png",
|
|
116
33
|
"doc/images/histogram.png",
|
|
117
|
-
"doc/images/
|
|
34
|
+
"doc/images/image_3color.png",
|
|
35
|
+
"doc/images/image_3color_white.png",
|
|
36
|
+
"doc/images/imagedisplay.png",
|
|
37
|
+
"doc/images/imagematrix.png",
|
|
38
|
+
"doc/images/imshow_high_contrast.png",
|
|
39
|
+
"doc/images/imshow_low_contrast.png",
|
|
118
40
|
"doc/images/imshow_mpl.png",
|
|
41
|
+
"doc/images/imshow_no_contrast.png",
|
|
42
|
+
"doc/images/imshow_scalebar.png",
|
|
43
|
+
"doc/images/imshow_wxmplot.png",
|
|
44
|
+
"doc/images/interactive1.png",
|
|
45
|
+
"doc/images/interactive2.png",
|
|
119
46
|
"doc/images/multiple_yaxes.png",
|
|
120
|
-
"doc/images/
|
|
47
|
+
"doc/images/multiplot.png",
|
|
48
|
+
"doc/images/plot_alphafill_config.png",
|
|
49
|
+
"doc/images/plot_alphafill_to_dy.png",
|
|
50
|
+
"doc/images/plot_alphafill_to_zero.png",
|
|
51
|
+
"doc/images/plot_compare_dislin.png",
|
|
52
|
+
"doc/images/plot_compare_plotly.png",
|
|
121
53
|
"doc/images/plot_compare_plplot.png",
|
|
54
|
+
"doc/images/plot_compare_qt.png",
|
|
122
55
|
"doc/images/plot_compare_qttutorial1.png",
|
|
56
|
+
"doc/images/plot_compare_qttutorial1_qt.png",
|
|
57
|
+
"doc/images/plot_compare_wxplot_wx.png",
|
|
58
|
+
"doc/images/plot_compare_wxplot_wxmplot.png",
|
|
123
59
|
"doc/images/plot_mpl.png",
|
|
124
|
-
"doc/images/scatterplot.png",
|
|
125
|
-
"doc/images/PlotConfig_Ranges.png",
|
|
126
60
|
"doc/images/plot_wxmplot.png",
|
|
127
|
-
"doc/images/
|
|
128
|
-
"doc/images/imagematrix.png",
|
|
129
|
-
"doc/images/plot_compare_qt.png",
|
|
130
|
-
"doc/images/wxmplot_histogram.png",
|
|
61
|
+
"doc/images/scatterplot.png",
|
|
131
62
|
"doc/images/stackedplot.png",
|
|
132
|
-
"doc/images/ImageConfig.png",
|
|
133
63
|
"doc/images/tiff_display.png",
|
|
134
|
-
"doc/images/imshow_low_contrast.png",
|
|
135
64
|
"doc/images/tifffile_image.png",
|
|
65
|
+
"doc/images/two_axes.png",
|
|
66
|
+
"doc/images/wxmplot_composite.png",
|
|
67
|
+
"doc/images/wxmplot_dislin.png",
|
|
68
|
+
"doc/images/wxmplot_histogram.png",
|
|
69
|
+
"doc/images/wxmplot_leftright.png",
|
|
136
70
|
"doc/images/wxmplot_plplot.png",
|
|
137
|
-
"doc/
|
|
138
|
-
"doc/
|
|
139
|
-
"doc/
|
|
140
|
-
"doc/
|
|
141
|
-
"doc/
|
|
142
|
-
"doc/
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
71
|
+
"doc/index.rst",
|
|
72
|
+
"doc/installation.rst",
|
|
73
|
+
"doc/interactive.rst",
|
|
74
|
+
"doc/other.rst",
|
|
75
|
+
"doc/overview.rst",
|
|
76
|
+
"doc/plotpanel.rst",
|
|
77
|
+
"examples/BasicExamples.ipynb",
|
|
78
|
+
"examples/DynamicExamples.ipynb",
|
|
79
|
+
"examples/Pilatus.tiff",
|
|
80
|
+
"examples/basic_screenshot.py",
|
|
81
|
+
"examples/ceo2.tiff",
|
|
82
|
+
"examples/compare_dislin_mpl.py",
|
|
83
|
+
"examples/compare_plplot.py",
|
|
84
|
+
"examples/contour.py",
|
|
85
|
+
"examples/demo.py",
|
|
86
|
+
"examples/discrete_data.py",
|
|
87
|
+
"examples/errorbar.py",
|
|
88
|
+
"examples/extra_marker_and_line_reporting.py",
|
|
89
|
+
"examples/fill_to_zero.py",
|
|
90
|
+
"examples/fill_uncertainties.py",
|
|
91
|
+
"examples/floatcontrol.py",
|
|
92
|
+
"examples/histogram.py",
|
|
93
|
+
"examples/image.py",
|
|
94
|
+
"examples/image_canvas_ex.py",
|
|
95
|
+
"examples/image_scroll.py",
|
|
96
|
+
"examples/imagematrix.py",
|
|
97
|
+
"examples/interactive_multiplewindows.py",
|
|
98
|
+
"examples/leftright.py",
|
|
99
|
+
"examples/multiple_yaxes.py",
|
|
100
|
+
"examples/multiplot.py",
|
|
101
|
+
"examples/pilatus_display.py",
|
|
102
|
+
"examples/plot_fromdatafile.py",
|
|
103
|
+
"examples/plot_many_traces.py",
|
|
104
|
+
"examples/plotapp.py",
|
|
105
|
+
"examples/rgb_image.py",
|
|
106
|
+
"examples/scatterplot.py",
|
|
107
|
+
"examples/scope_mode_function.py",
|
|
108
|
+
"examples/scope_mode_generator.py",
|
|
109
|
+
"examples/scope_mode_mpl_compare.py",
|
|
110
|
+
"examples/simple.py",
|
|
111
|
+
"examples/stackedplot.py",
|
|
112
|
+
"examples/stripchart.py",
|
|
113
|
+
"examples/theme_compare.py",
|
|
114
|
+
"examples/tiff_display.py",
|
|
115
|
+
"examples/tifffile.py",
|
|
116
|
+
"examples/time.dat",
|
|
117
|
+
"examples/time_update.py",
|
|
118
|
+
"examples/timedata.py",
|
|
119
|
+
"examples/wxmplot_jupyter.ipynb",
|
|
120
|
+
"examples/xafs.dat",
|
|
121
|
+
"pyproject.toml",
|
|
122
|
+
"setup.py",
|
|
123
|
+
"tests/basic_test.py",
|
|
124
|
+
"wxmplot/__init__.py",
|
|
125
|
+
"wxmplot/allow_idle_macosx.py",
|
|
126
|
+
"wxmplot/baseframe.py",
|
|
127
|
+
"wxmplot/basepanel.py",
|
|
128
|
+
"wxmplot/colors.py",
|
|
129
|
+
"wxmplot/config.py",
|
|
130
|
+
"wxmplot/histogram.py",
|
|
131
|
+
"wxmplot/image_canvas.py",
|
|
132
|
+
"wxmplot/imageconf.py",
|
|
133
|
+
"wxmplot/imageframe.py",
|
|
134
|
+
"wxmplot/imagematrixframe.py",
|
|
135
|
+
"wxmplot/imagepanel.py",
|
|
136
|
+
"wxmplot/inputhook.py",
|
|
137
|
+
"wxmplot/interactive.py",
|
|
138
|
+
"wxmplot/line_plot.py",
|
|
139
|
+
"wxmplot/multiframe.py",
|
|
140
|
+
"wxmplot/plotapp.py",
|
|
141
|
+
"wxmplot/plotconfigframe.py",
|
|
142
|
+
"wxmplot/plotframe.py",
|
|
143
|
+
"wxmplot/plotpanel.py",
|
|
144
|
+
"wxmplot/residualplotframe.py",
|
|
145
|
+
"wxmplot/stackedplotframe.py",
|
|
146
|
+
"wxmplot/utils.py",
|
|
147
|
+
"wxmplot/vispy_utils.py"
|
|
148
148
|
]
|
|
149
149
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|