Skip to content

Instantly share code, notes, and snippets.

@ahmedbesbes
Created July 14, 2019 22:22
Show Gist options
  • Save ahmedbesbes/5d74eb60897c0a70ffa32d44386bde9d to your computer and use it in GitHub Desktop.
Save ahmedbesbes/5d74eb60897c0a70ffa32d44386bde9d to your computer and use it in GitHub Desktop.
KneePlot
class KneePlot():
def __init__(self, cases, figsize=(15, 5)):
self.cases = cases
self.planes = {case: ['coronal', 'sagittal', 'axial'] for case in self.cases}
self.slice_nums = {}
for case in self.cases:
self.slice_nums[case] = {}
for plane in ['coronal', 'sagittal', 'axial']:
self.slice_nums[case][plane] = self.cases[case][plane].shape[0]
self.figsize = figsize
def _plot_slices(self, case, im_slice_coronal, im_slice_sagittal, im_slice_axial):
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=self.figsize)
ax1.imshow(self.cases[case]['coronal'][im_slice_coronal, :, :], 'gray')
ax1.set_title(f'MRI slice {im_slice_coronal} on coronal plane')
ax2.imshow(self.cases[case]['sagittal'][im_slice_sagittal, :, :], 'gray')
ax2.set_title(f'MRI slice {im_slice_sagittal} on sagittal plane')
ax3.imshow(self.cases[case]['axial'][im_slice_axial, :, :], 'gray')
ax3.set_title(f'MRI slice {im_slice_axial} on axial plane')
plt.show()
def draw(self):
case_widget = Dropdown(options=list(self.cases.keys()),
description='Case'
)
case_init = list(self.cases.keys())[0]
slice_init_coronal = self.slice_nums[case_init]['coronal'] - 1
slices_widget_coronal = IntSlider(min=0,
max=slice_init_coronal,
value=slice_init_coronal // 2,
description='Coronal')
slice_init_sagittal = self.slice_nums[case_init]['sagittal'] - 1
slices_widget_sagittal = IntSlider(min=0,
max=slice_init_sagittal,
value=slice_init_sagittal // 2,
description='Sagittal'
)
slice_init_axial = self.slice_nums[case_init]['axial'] - 1
slices_widget_axial = IntSlider(min=0,
max=slice_init_axial,
value=slice_init_axial // 2,
description='Axial'
)
def update_slices_widget(*args):
slices_widget_coronal.max = self.slice_nums[case_widget.value]['coronal'] - 1
slices_widget_coronal.value = slices_widget_coronal.max // 2
slices_widget_sagittal.max = self.slice_nums[case_widget.value]['sagittal'] - 1
slices_widget_sagittal.value = slices_widget_sagittal.max // 2
slices_widget_axial.max = self.slice_nums[case_widget.value]['axial'] - 1
slices_widget_axial.value = slices_widget_axial.max // 2
case_widget.observe(update_slices_widget, 'value')
interact(self._plot_slices,
case=case_widget,
im_slice_coronal=slices_widget_coronal,
im_slice_sagittal=slices_widget_sagittal,
im_slice_axial=slices_widget_axial
)
def resize(self, figsize):
self.figsize = figsize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment