MICA-MNI / ENIGMA

The ENIGMA Toolbox is an open-source repository for accessing 100+ ENIGMA statistical maps, visualizing cortical and subcortical surface data, and relating neuroimaging findings to micro- and macroscale brain organization. 🤠
https://enigma-toolbox.readthedocs.io
BSD 3-Clause "New" or "Revised" License
125 stars 29 forks source link

embed_nb for plot_cortical #24

Open araikes opened 1 year ago

araikes commented 1 year ago

Hi @saratheriver,

I'm attempting to do some fairly simple visualization (for testing purposes) using my own data. I've attempted to use plot_cortical inside of Jupyter notebook but receive an error (see below). I have no problem with exporting to a file.

Call:

plot_cortical(array_name=CT_schaefer_fsa5, surface_name="fsa5", cmap = 'viridis', embed_nb = True)

Error:

TypeError                                 Traceback (most recent call last)
Cell In[19], line 8
      5 CT_schaefer_fsa5 = parcel_to_surface(CT_schaefer_200, 'schaefer_200_fsa5')
      7 # Project the results on the surface brain
----> 8 plot_cortical(array_name=CT_schaefer_fsa5, surface_name="fsa5", cmap = 'viridis', embed_nb = True)

File ~\.conda\envs\brainstat\lib\site-packages\enigmatoolbox\vtk_interface\decorators.py:41, in wrap_input.<locals>._wrapper_decorator.<locals>._wrapper_wrap(*args, **kwds)
     38 @functools.wraps(func)
     39 def _wrapper_wrap(*args, **kwds):
     40     args, kwds = _wrap_input_data(args, kwds, *xargs, skip=skip)
---> 41     data = func(*args, **kwds)
     42     return data

File ~\.conda\envs\brainstat\lib\site-packages\enigmatoolbox\plotting\surface_plotting.py:528, in plot_cortical(array_name, surface_name, color_bar, color_range, label_text, cmap, nan_color, zoom, background, size, interactive, embed_nb, screenshot, filename, scale, transparent_bg, **kwargs)
    526 kwds = {'view': view, 'share': 'r'}
    527 kwds.update(kwargs)
--> 528 return plot_surf(surfs, layout, array_name=array_name, color_bar=color_bar,
    529                  color_range=color_range, label_text=label_text, cmap=cmap,
    530                  nan_color=nan_color, zoom=zoom, background=background,
    531                  size=size, interactive=interactive, embed_nb=embed_nb,
    532                  screenshot=screenshot, filename=filename, scale=scale,
    533                  transparent_bg=transparent_bg, **kwds)

File ~\.conda\envs\brainstat\lib\site-packages\enigmatoolbox\plotting\surface_plotting.py:419, in plot_surf(surfs, layout, array_name, view, color_bar, color_range, share, label_text, cmap, nan_color, zoom, background, size, embed_nb, interactive, scale, transparent_bg, screenshot, filename, return_plotter, **kwargs)
    415 if screenshot:
    416     return p.screenshot(filename, transparent_bg=transparent_bg,
    417                         scale=scale)
--> 419 return p.show(embed_nb=embed_nb, interactive=interactive, scale=scale,
    420               transparent_bg=transparent_bg)

File ~\.conda\envs\brainstat\lib\site-packages\enigmatoolbox\plotting\base.py:308, in Plotter.show(self, embed_nb, interactive, transparent_bg, scale)
    306     if interactive:
    307         return self.to_panel(scale)
--> 308     return self.to_notebook(transparent_bg, scale)
    310 else:
    312     self._check_closed()

File ~\.conda\envs\brainstat\lib\site-packages\enigmatoolbox\plotting\base.py:413, in Plotter.to_notebook(self, transparent_bg, scale)
    411 writer = BSPNGWriter(writeToMemory=True)
    412 result = serial_connect(wimg, writer, as_data=False).result
--> 413 data = memoryview(result).tobytes()
    414 from IPython.display import Image
    415 return Image(data)

TypeError: memoryview: a bytes-like object is required, not 'BSVTKObjectWrapper'

What am I missing about the use of the embed_nb flag?

saratheriver commented 1 year ago

Hello -

I can't seem to reproduce your error. Would you mind providing me with more information, please? Eg python version, enigmaa toolbox version, etc

Dominic-Arold commented 1 year ago

Hi all, I get the same error message with embed_nb=True. I work in Jupyterlab 3.6.2. The used python kernel has Python 3.8.10 and enigmatoolbox 2.0.3.

Call:

from enigmatoolbox.plotting import plot_cortical
from enigmatoolbox.utils.parcellation import parcel_to_surface
plot_cortical(array_name = parcel_to_surface(CT_values, 'aparc_fsa5'), surface_name='fsa5', interactive=False, embed_nb=True)

Error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[84], line 8
      5 df_th, df_area, df_vol, dropped = ukb_to_enigmatoolbox_feature_set(df_p)
      6 CT_values = df_th.values.reshape(-1)
----> 8 plot_cortical(array_name = parcel_to_surface(CT_values, 'aparc_fsa5'), surface_name='fsa5', interactive=False, embed_nb=True)

File ~/.cache/pypoetry/virtualenvs/nafld-xc7jJsTU-py3.8/lib/python3.8/site-packages/enigmatoolbox/vtk_interface/decorators.py:41, in wrap_input.<locals>._wrapper_decorator.<locals>._wrapper_wrap(*args, **kwds)
     38 @functools.wraps(func)
     39 def _wrapper_wrap(*args, **kwds):
     40     args, kwds = _wrap_input_data(args, kwds, *xargs, skip=skip)
---> 41     data = func(*args, **kwds)
     42     return data

File ~/.cache/pypoetry/virtualenvs/nafld-xc7jJsTU-py3.8/lib/python3.8/site-packages/enigmatoolbox/plotting/surface_plotting.py:528, in plot_cortical(array_name, surface_name, color_bar, color_range, label_text, cmap, nan_color, zoom, background, size, interactive, embed_nb, screenshot, filename, scale, transparent_bg, **kwargs)
    526 kwds = {'view': view, 'share': 'r'}
    527 kwds.update(kwargs)
--> 528 return plot_surf(surfs, layout, array_name=array_name, color_bar=color_bar,
    529                  color_range=color_range, label_text=label_text, cmap=cmap,
    530                  nan_color=nan_color, zoom=zoom, background=background,
    531                  size=size, interactive=interactive, embed_nb=embed_nb,
    532                  screenshot=screenshot, filename=filename, scale=scale,
    533                  transparent_bg=transparent_bg, **kwds)

File ~/.cache/pypoetry/virtualenvs/nafld-xc7jJsTU-py3.8/lib/python3.8/site-packages/enigmatoolbox/plotting/surface_plotting.py:419, in plot_surf(surfs, layout, array_name, view, color_bar, color_range, share, label_text, cmap, nan_color, zoom, background, size, embed_nb, interactive, scale, transparent_bg, screenshot, filename, return_plotter, **kwargs)
    415 if screenshot:
    416     return p.screenshot(filename, transparent_bg=transparent_bg,
    417                         scale=scale)
--> 419 return p.show(embed_nb=embed_nb, interactive=interactive, scale=scale,
    420               transparent_bg=transparent_bg)

File ~/.cache/pypoetry/virtualenvs/nafld-xc7jJsTU-py3.8/lib/python3.8/site-packages/enigmatoolbox/plotting/base.py:308, in Plotter.show(self, embed_nb, interactive, transparent_bg, scale)
    306     if interactive:
    307         return self.to_panel(scale)
--> 308     return self.to_notebook(transparent_bg, scale)
    310 else:
    312     self._check_closed()

File ~/.cache/pypoetry/virtualenvs/nafld-xc7jJsTU-py3.8/lib/python3.8/site-packages/enigmatoolbox/plotting/base.py:413, in Plotter.to_notebook(self, transparent_bg, scale)
    411 writer = BSPNGWriter(writeToMemory=True)
    412 result = serial_connect(wimg, writer, as_data=False).result
--> 413 data = memoryview(result).tobytes()
    414 from IPython.display import Image
    415 return Image(data)

TypeError: memoryview: a bytes-like object is required, not 'BSVTKObjectWrapper'
teanijarv commented 11 months ago

Same error for me. Has anyone managed to fix it?

chenfei-ye commented 7 months ago

Same error for me. Has anyone managed to fix it?