wxmplot 2026.2.0__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.0/wxmplot.egg-info → wxmplot-2026.2.2}/PKG-INFO +1 -1
- wxmplot-2026.2.2/examples/simple.py +8 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/colors.py +7 -3
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/config.py +48 -24
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/image_canvas.py +1 -3
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/imageconf.py +79 -29
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/imageframe.py +17 -19
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/line_plot.py +2 -2
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/plotconfigframe.py +7 -38
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/version.py +3 -3
- {wxmplot-2026.2.0 → wxmplot-2026.2.2/wxmplot.egg-info}/PKG-INFO +1 -1
- {wxmplot-2026.2.0 → 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.0/examples/simple.py +0 -6
- wxmplot-2026.2.0/wxmplot.egg-info/scm_version.json +0 -8
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/ChangeLog +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/LICENSE +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/MANIFEST.in +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/README.md +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/BasicExamples.ipynb +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/DynamicExamples.ipynb +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/basic_screenshot.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/compare_dislin_mpl.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/compare_plplot.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/contour.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/demo.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/discrete_data.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/errorbar.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/extra_marker_and_line_reporting.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/fill_to_zero.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/fill_uncertainties.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/floatcontrol.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/histogram.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/image.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/image_canvas_ex.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/image_scroll.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/imagematrix.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/interactive_multiplewindows.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/leftright.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/multiple_yaxes.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/multiplot.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/pilatus_display.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/plot_fromdatafile.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/plot_many_traces.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/plotapp.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/rgb_image.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/scatterplot.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/scope_mode_function.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/scope_mode_generator.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/scope_mode_mpl_compare.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/stackedplot.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/stripchart.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/theme_compare.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/tiff_display.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/tifffile.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/time.dat +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/time_update.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/timedata.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/wxmplot_jupyter.ipynb +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/examples/xafs.dat +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/pyproject.toml +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/setup.cfg +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/setup.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/tests/basic_test.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/__init__.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/allow_idle_macosx.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/baseframe.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/basepanel.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/histogram.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/imagematrixframe.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/imagepanel.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/inputhook.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/interactive.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/multiframe.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/plotapp.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/plotframe.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/plotpanel.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/residualplotframe.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/stackedplotframe.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/utils.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot/vispy_utils.py +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot.egg-info/SOURCES.txt +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot.egg-info/dependency_links.txt +0 -0
- {wxmplot-2026.2.0 → wxmplot-2026.2.2}/wxmplot.egg-info/requires.txt +0 -0
- {wxmplot-2026.2.0 → 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'):
|
|
@@ -16,8 +16,6 @@ from wxmplot.colors import lookup_colormap
|
|
|
16
16
|
from wxutils.themes import get_theme
|
|
17
17
|
from wxutils.colors import get_color, register_darkdetect
|
|
18
18
|
|
|
19
|
-
vispy_init()
|
|
20
|
-
|
|
21
19
|
from vispy import scene # noqa: E402
|
|
22
20
|
|
|
23
21
|
__all__ = ["ImageCanvas", "BinMethod"]
|
|
@@ -78,7 +76,7 @@ class ImageCanvas(wx.Panel):
|
|
|
78
76
|
def __init__(self, parent: wx.Window) -> None:
|
|
79
77
|
"""Initializes the ImageCanvas."""
|
|
80
78
|
super().__init__(parent)
|
|
81
|
-
|
|
79
|
+
vispy_init()
|
|
82
80
|
self._canvas = scene.SceneCanvas(
|
|
83
81
|
keys=None,
|
|
84
82
|
parent=self,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import wx
|
|
2
2
|
import wx.lib.colourselect as csel
|
|
3
3
|
import wx.lib.scrolledpanel as scrolled
|
|
4
|
+
import wx.dataview as dv
|
|
4
5
|
|
|
5
6
|
from math import log10
|
|
6
7
|
|
|
@@ -11,13 +12,15 @@ import yaml
|
|
|
11
12
|
from matplotlib.ticker import FuncFormatter
|
|
12
13
|
|
|
13
14
|
from wxutils import (get_cwd, LabeledTextCtrl, SimpleText,
|
|
14
|
-
Check, Choice, HLine, FloatSpin, MenuItem,
|
|
15
|
+
Button, Check, Choice, HLine, FloatSpin, MenuItem,
|
|
15
16
|
flatnotebook, get_color, set_color)
|
|
16
17
|
|
|
17
18
|
from .colors import register_custom_colormaps, hexcolor, hex2rgb, mpl_color
|
|
18
19
|
from .config import ifnot_none
|
|
19
20
|
from .plotconfigframe import autopack
|
|
20
21
|
|
|
22
|
+
DVSTYLE = dv.DV_SINGLE|dv.DV_VERT_RULES|dv.DV_ROW_LINES
|
|
23
|
+
|
|
21
24
|
def get_mpl_cmaps():
|
|
22
25
|
try:
|
|
23
26
|
from matplotlib import colormaps
|
|
@@ -41,33 +44,33 @@ def get_mpl_cmaps():
|
|
|
41
44
|
_cmaps = register_custom_colormaps()
|
|
42
45
|
_cmaps.update(get_mpl_cmaps())
|
|
43
46
|
|
|
44
|
-
ColorMaps = {}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
for cname in ('gray', 'coolwarm', 'viridis', '
|
|
48
|
-
'
|
|
49
|
-
'
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'
|
|
53
|
-
'
|
|
54
|
-
'
|
|
55
|
-
'
|
|
56
|
-
'
|
|
57
|
-
'
|
|
58
|
-
'
|
|
59
|
-
'
|
|
60
|
-
'
|
|
61
|
-
|
|
62
|
-
'gist_rainbow', 'rainbow', 'jet', 'turbo', 'nipy_spectral',
|
|
63
|
-
'gist_ncar' ):
|
|
64
|
-
if cname in _cmaps:
|
|
47
|
+
ColorMaps = {} # dict of all colormaps, including reversed
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
for cname in ('gray', 'coolwarm', 'viridis', 'civids', 'inferno', 'plasma',
|
|
51
|
+
'magma', 'cividis', 'berlin', 'managua', 'vanimo', 'turbo',
|
|
52
|
+
'cool', 'hot', 'bone', 'Wistia', 'Grays', 'Purples', 'Blues',
|
|
53
|
+
'Greens', 'Oranges', 'Reds', 'red_white', 'green_white',
|
|
54
|
+
'blue_white','YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu',
|
|
55
|
+
'BuPu', 'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn',
|
|
56
|
+
'PiYG', 'PRGn', 'RdBu', 'RdPu', 'RdYlBu', 'RdYlGn', 'PiYG',
|
|
57
|
+
'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu', 'RdYlGn',
|
|
58
|
+
'Spectral', 'bwr','brg', 'seismic', 'pink', 'spring', 'summer',
|
|
59
|
+
'autumn', 'winter', 'afmhot', 'copper', 'red', 'green', 'blue',
|
|
60
|
+
'magenta', 'yellow', 'cyan', 'red_heat', 'green_heat',
|
|
61
|
+
'blue_heat', 'ocean', 'terrain', 'jet', 'stdgamma', 'Accent',
|
|
62
|
+
'Spectral', 'ocean', 'terrain', 'gnuplot', 'gnuplot2',
|
|
63
|
+
'CMRmap', 'cubehelix', 'rainbow'):
|
|
64
|
+
if cname in _cmaps and cname not in ColorMaps:
|
|
65
65
|
ColorMaps[cname] = _cmaps[cname]
|
|
66
|
-
ColorMap_Names.append(cname)
|
|
67
66
|
rname = f'{cname}_r'
|
|
68
|
-
if rname in _cmaps:
|
|
67
|
+
if rname in _cmaps and rname not in ColorMaps:
|
|
69
68
|
ColorMaps[rname] = _cmaps[rname]
|
|
70
69
|
|
|
70
|
+
# curated list of default of colormap names (not including '_r')
|
|
71
|
+
ColorMap_List = ['gray', 'coolwarm', 'viridis', 'cividis',
|
|
72
|
+
'inferno', 'plasma', 'magma', 'berlin',
|
|
73
|
+
'managua', 'vanimo', 'turbo', 'hot', 'cool', 'bone', 'Wistia']
|
|
71
74
|
|
|
72
75
|
Contrast_Levels = ('0', '0.00010', '0.00015', '0.00020', '0.0003', '0.0005',
|
|
73
76
|
'0.0007', '0.0010', '0.0015', '0.0020', '0.003', '0.005',
|
|
@@ -528,6 +531,36 @@ class ImageConfigFrame(wx.Frame):
|
|
|
528
531
|
|
|
529
532
|
return self.finish_subpanel(panel, sizer)
|
|
530
533
|
|
|
534
|
+
def make_colormap_panel(self, parent, font=None):
|
|
535
|
+
panel, sizer = self.begin_subpanel(parent, font=font)
|
|
536
|
+
|
|
537
|
+
label = SimpleText(panel, "ColorMaps:")
|
|
538
|
+
cmap_apply = Button(panel, 'Apply', size=(125, -1),
|
|
539
|
+
action=self.onColorMaps)
|
|
540
|
+
|
|
541
|
+
self.cmap_view = cview = dv.DataViewListCtrl(panel, style=DVSTYLE)
|
|
542
|
+
cview.SetMinSize((400, 450))
|
|
543
|
+
cview.AppendToggleColumn(' Use ', width=75, mode=dv.DATAVIEW_CELL_ACTIVATABLE)
|
|
544
|
+
cview.AppendTextColumn(' Color Map ', width=175)
|
|
545
|
+
for col in range(2):
|
|
546
|
+
this = cview.Columns[col]
|
|
547
|
+
this.Sortable = True
|
|
548
|
+
this.Alignment = this.Renderer.Alignment = wx.ALIGN_LEFT
|
|
549
|
+
|
|
550
|
+
self.cmap_view.DeleteAllItems()
|
|
551
|
+
for name in ColorMaps:
|
|
552
|
+
if not name.endswith('_r'):
|
|
553
|
+
self.cmap_view.AppendItem((name in ColorMap_List, name))
|
|
554
|
+
|
|
555
|
+
irow = 0
|
|
556
|
+
sizer.Add(label, (irow, 0), (1, 1), labstyle, 2)
|
|
557
|
+
sizer.Add(cmap_apply, (irow, 1), (1, 1), labstyle, 2)
|
|
558
|
+
irow += 1
|
|
559
|
+
sizer.Add(self.cmap_view, (irow, 0), (5, 3), labstyle, 2)
|
|
560
|
+
|
|
561
|
+
return self.finish_subpanel(panel, sizer)
|
|
562
|
+
|
|
563
|
+
|
|
531
564
|
def make_slice_panel(self, parent, font=None):
|
|
532
565
|
panel, sizer = self.begin_subpanel(parent, font=font)
|
|
533
566
|
|
|
@@ -724,18 +757,20 @@ class ImageConfigFrame(wx.Frame):
|
|
|
724
757
|
self.SetFont(font)
|
|
725
758
|
|
|
726
759
|
self.nb = flatnotebook(self, with_nav_buttons=True, with_smart_tabs=True)
|
|
727
|
-
self.nb.AddPage(self.
|
|
728
|
-
'
|
|
729
|
-
|
|
760
|
+
self.nb.AddPage(self.make_scalebar_panel(parent=self.nb, font=font),
|
|
761
|
+
'Scalebar', True)
|
|
730
762
|
self.nb.AddPage(self.make_grid_panel(parent=self.nb, font=font),
|
|
731
763
|
'Grid Overlay', True)
|
|
732
764
|
|
|
733
765
|
self.nb.AddPage(self.make_slice_panel(parent=self.nb, font=font),
|
|
734
766
|
'X/Y Slices', True)
|
|
735
767
|
|
|
736
|
-
self.nb.AddPage(self.
|
|
737
|
-
'
|
|
768
|
+
self.nb.AddPage(self.make_colormap_panel(parent=self.nb, font=font),
|
|
769
|
+
'Color Maps', True)
|
|
738
770
|
|
|
771
|
+
self.nb.AddPage(self.make_contour_panel(parent=self.nb, font=font),
|
|
772
|
+
'Contours', True)
|
|
773
|
+
self.nb.SetSelection(0)
|
|
739
774
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
740
775
|
sizer.Add(self.nb, 1, wx.GROW|wx.ALIGN_LEFT|wx.LEFT|wx.TOP|wx.BOTTOM|wx.EXPAND, 3)
|
|
741
776
|
autopack(self, sizer)
|
|
@@ -746,6 +781,21 @@ class ImageConfigFrame(wx.Frame):
|
|
|
746
781
|
self.Show()
|
|
747
782
|
self.Raise()
|
|
748
783
|
|
|
784
|
+
def onColorMaps(self, event=None):
|
|
785
|
+
selected = []
|
|
786
|
+
for row in range(self.cmap_view.GetItemCount()):
|
|
787
|
+
sel = self.cmap_view.GetValue(row, 0)
|
|
788
|
+
name = self.cmap_view.GetValue(row, 1)
|
|
789
|
+
if sel:
|
|
790
|
+
selected.append(name)
|
|
791
|
+
|
|
792
|
+
global ColorMap_List
|
|
793
|
+
ColorMap_List = selected
|
|
794
|
+
if len(self.parent.cmap_panels) == 1:
|
|
795
|
+
cmap_choice = self.parent.cmap_panels[0].cmap_choice
|
|
796
|
+
cmap_choice.Clear()
|
|
797
|
+
cmap_choice.AppendItems(selected)
|
|
798
|
+
|
|
749
799
|
def onGridEvents(self, event=None):
|
|
750
800
|
self.conf.show_grid = self.show_grid.IsChecked()
|
|
751
801
|
self.conf.grid_color = hexcolor(self.grid_color.GetValue()[:3])
|
|
@@ -18,7 +18,7 @@ from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
|
|
|
18
18
|
from wxutils import get_cwd
|
|
19
19
|
|
|
20
20
|
from .imagepanel import ImagePanel
|
|
21
|
-
from .imageconf import (ColorMaps,
|
|
21
|
+
from .imageconf import (ColorMaps, ColorMap_List, Interp_List, Contrast_Levels,
|
|
22
22
|
Slices_List, RGB_COLORS, ImageConfigFrame)
|
|
23
23
|
from .baseframe import BaseFrame
|
|
24
24
|
from .plotframe import PlotFrame
|
|
@@ -54,27 +54,25 @@ class ColorMapPanel(wx.Panel):
|
|
|
54
54
|
reverse = False
|
|
55
55
|
cmapname = default
|
|
56
56
|
|
|
57
|
-
if colormap_list is None
|
|
58
|
-
|
|
57
|
+
if colormap_list is not None:
|
|
58
|
+
cmap_choice = wx.Choice(self, size=(90, -1), choices=colormap_list)
|
|
59
|
+
cmap_choice.Bind(wx.EVT_CHOICE, self.onCMap)
|
|
60
|
+
self.cmap_choice = cmap_choice
|
|
59
61
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
self.cmap_choice = cmap_choice
|
|
62
|
+
if cmapname not in colormap_list:
|
|
63
|
+
cmapname = colormap_list[0]
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
if cmapname.endswith('_r'):
|
|
66
|
+
reverse = True
|
|
67
|
+
cmapname = cmapname[:-2]
|
|
68
|
+
cmap_choice.SetStringSelection(cmapname)
|
|
69
|
+
self.imgpanel.conf.cmap[color] = ColorMaps.get(cmapname, ColorMaps['gray'])
|
|
66
70
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
+
cmap_reverse = wx.CheckBox(self, label='Reverse', size=(60, -1))
|
|
72
|
+
cmap_reverse.Bind(wx.EVT_CHECKBOX, self.onCMapReverse)
|
|
73
|
+
cmap_reverse.SetValue(reverse)
|
|
74
|
+
self.cmap_reverse = cmap_reverse
|
|
71
75
|
|
|
72
|
-
cmap_reverse = wx.CheckBox(self, label='Reverse', size=(60, -1))
|
|
73
|
-
cmap_reverse.Bind(wx.EVT_CHECKBOX, self.onCMapReverse)
|
|
74
|
-
cmap_reverse.SetValue(reverse)
|
|
75
|
-
self.cmap_reverse = cmap_reverse
|
|
76
|
-
|
|
77
|
-
self.imgpanel.conf.cmap[color] = ColorMaps.get(cmapname, ColorMaps['gray'])
|
|
78
76
|
|
|
79
77
|
maxval = self.imgpanel.conf.cmap_range
|
|
80
78
|
wd, ht = 1.0, 0.15
|
|
@@ -678,7 +676,7 @@ Keyboard Shortcuts: (For Mac OSX, replace 'Ctrl' with 'Apple')
|
|
|
678
676
|
else:
|
|
679
677
|
self.cmap_panels[0] = ColorMapPanel(panel, self.panel,
|
|
680
678
|
default='gray',
|
|
681
|
-
colormap_list=
|
|
679
|
+
colormap_list=ColorMap_List)
|
|
682
680
|
|
|
683
681
|
sizer.Add(self.cmap_panels[0], 0, lsty, 1)
|
|
684
682
|
|
|
@@ -16,7 +16,6 @@ from wxutils.themes import get_theme
|
|
|
16
16
|
|
|
17
17
|
from wxmplot.vispy_utils import vispy_colour, vispy_init, vsync_for_platform
|
|
18
18
|
|
|
19
|
-
vispy_init()
|
|
20
19
|
|
|
21
20
|
from vispy import scene # noqa: E402
|
|
22
21
|
|
|
@@ -36,6 +35,8 @@ class LinePlot(wx.Panel):
|
|
|
36
35
|
) -> None:
|
|
37
36
|
"""Initialise the LinePlot panel."""
|
|
38
37
|
super().__init__(parent, style=wx.BORDER_NONE)
|
|
38
|
+
vispy_init()
|
|
39
|
+
|
|
39
40
|
self.SetMinSize((-1, 160))
|
|
40
41
|
self.SetBackgroundStyle(wx.BG_STYLE_PAINT)
|
|
41
42
|
|
|
@@ -624,4 +625,3 @@ class LinePlot(wx.Panel):
|
|
|
624
625
|
result = axes_rgb.copy()
|
|
625
626
|
result[mt:mt + ph, ml:ml + pw] = canvas_rgb
|
|
626
627
|
return result
|
|
627
|
-
|
|
@@ -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
|