Created
July 14, 2019 22:22
-
-
Save ahmedbesbes/5d74eb60897c0a70ffa32d44386bde9d to your computer and use it in GitHub Desktop.
KneePlot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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