Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
nam
ProxPython
Commits
7ad2bb43
Commit
7ad2bb43
authored
Mar 26, 2020
by
Matthijs
Browse files
MPL backend check
parent
8d3307f3
Changes
1
Hide whitespace changes
Inline
Side-by-side
proxtoolbox/Problems/OrbitalTomog/Graphics/stack_viewer.py
View file @
7ad2bb43
import
matplotlib.pyplot
as
plt
from
matplotlib
import
get_backend
from
numpy
import
max
,
min
from
matplotlib.widgets
import
Slider
from
warnings
import
warn
good_backends
=
[
'Qt5Agg'
,
'TkAgg'
,
'Qt4Agg'
]
class
SingleStackViewer
:
def
__init__
(
self
,
volume
):
...
...
@@ -11,6 +14,8 @@ class SingleStackViewer:
:param volume: real-valued np.ndarray (3D)
"""
if
get_backend
()
not
in
good_backends
:
warn
(
Warning
(
'Current matplotlib backend may not allow for optimal funcionality! Use, e.g., Qt'
))
fig
,
ax
=
plt
.
subplots
()
ax
.
volume
=
volume
ax
.
index
=
volume
.
shape
[
0
]
//
2
...
...
@@ -53,8 +58,12 @@ class XYZStackViewer:
:param cmap: color map to use (e.g. 'seismic' or 'viridis'). For 'seismic, will center on 0, else'
:param clim: tuple with the min-max values of the colorscale
"""
self
.
volume
=
volume
if
get_backend
()
not
in
good_backends
:
warn
(
Warning
(
'Current matplotlib backend may not allow for optimal funcionality! Use, e.g., Qt'
))
self
.
volume
=
volume
self
.
indices
=
[
s
//
2
for
s
in
volume
.
shape
]
self
.
shape
=
self
.
volume
.
shape
if
clim
[
0
]
is
not
None
:
self
.
minval
,
self
.
maxval
=
clim
elif
cmap
==
'seismic'
:
...
...
@@ -63,14 +72,11 @@ class XYZStackViewer:
else
:
self
.
maxval
=
max
(
volume
)
self
.
minval
=
min
([
0
,
min
(
volume
)])
self
.
indices
=
[
s
//
2
for
s
in
volume
.
shape
]
self
.
shape
=
self
.
volume
.
shape
self
.
fig
,
self
.
ax
=
plt
.
subplots
(
1
,
3
,
figsize
=
(
10
,
4
))
im
=
self
.
ax
[
0
].
imshow
(
volume
[
self
.
indices
[
0
],
:,
:],
cmap
=
cmap
,
vmin
=-
self
.
minval
,
vmax
=
self
.
maxval
)
im
=
self
.
ax
[
1
].
imshow
(
volume
[:,
self
.
indices
[
0
],
:],
cmap
=
cmap
,
vmin
=-
self
.
minval
,
vmax
=
self
.
maxval
)
im
=
self
.
ax
[
2
].
imshow
(
volume
[:,
:,
self
.
indices
[
0
]],
cmap
=
cmap
,
vmin
=-
self
.
minval
,
vmax
=
self
.
maxval
)
im
=
self
.
ax
[
0
].
imshow
(
volume
[
self
.
indices
[
0
],
:,
:],
cmap
=
cmap
,
vmin
=
self
.
minval
,
vmax
=
self
.
maxval
)
im
=
self
.
ax
[
1
].
imshow
(
volume
[:,
self
.
indices
[
0
],
:],
cmap
=
cmap
,
vmin
=
self
.
minval
,
vmax
=
self
.
maxval
)
im
=
self
.
ax
[
2
].
imshow
(
volume
[:,
:,
self
.
indices
[
0
]],
cmap
=
cmap
,
vmin
=
self
.
minval
,
vmax
=
self
.
maxval
)
self
.
ax
[
1
].
set_yticks
([])
self
.
ax
[
2
].
set_yticks
([])
...
...
@@ -116,3 +122,20 @@ class XYZStackViewer:
self
.
ax
[
2
].
images
[
0
].
set_array
(
self
.
volume
[:,
:,
int
(
n
)])
self
.
fig
.
canvas
.
draw_idle
()
# def process_key(self, event):
# """Look for special events captured by mpl_connect, send to correct function """
# fig = event.canvas.figure
# ax = fig.axes[0]
# if event.key == 'j':
# self.previous_slice(ax)
# elif event.key == 'k':
# self.next_slice(ax)
# fig.canvas.draw()
#
# def previous_slice(self, ax):
# """Go to the previous slice on all plots."""
# # do stuff: set_array for all, set self.indices, set_val for sliders
#
# def next_slice(self, ax):
# """Go to the next slice."""
# # do something
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment