MICA-MNI / BrainSpace

BrainSpace is an open-access toolbox that allows for the identification and analysis of gradients from neuroimaging and connectomics datasets | available in both Python and Matlab |
http://brainspace.readthedocs.io
BSD 3-Clause "New" or "Revised" License
180 stars 72 forks source link

error in ploting #118

Closed shuerye closed 3 weeks ago

shuerye commented 4 weeks ago

First load mean connectivity matrix and Schaefer parcellation

conn_matrix = load_group_fc('schaefer', scale=400) labeling = load_parcellation('schaefer', scale=400, join=True)

mask = labeling != 0

and load the conte69 hemisphere surfaces

surf_lh, surf_rh = load_conte69()

import numpy as np

from brainspace.gradient import GradientMaps from brainspace.plotting import plot_hemispheres from brainspace.utils.parcellation import map_to_labels

kernels = ['pearson', 'spearman', 'normalized_angle']

gradients_kernel = [None] * len(kernels) for i, k in enumerate(kernels): gm = GradientMaps(kernel=k, approach='dm', random_state=0) gm.fit(conn_matrix)

gradients_kernel[i] = map_to_labels(gm.gradients_[:, i], labeling, mask=mask,
                                    fill=np.nan)

label_text = ['Pearson', 'Spearman', 'Normalized\nAngle'] plot_hemispheres(surf_lh, surf_rh, array_name=gradients_kernel, size=(1200, 600), cmap='viridis_r', color_bar=True, label_text=label_text, zoom=1.45)

Error:

TypeError Traceback (most recent call last) File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\vtkmodules\util\vtkAlgorithm.py:152, in VTKPythonAlgorithmBase.InternalAlgorithm.ProcessRequest(self, vtkself, request, inInfo, outInfo) 151 def ProcessRequest(self, vtkself, request, inInfo, outInfo): --> 152 return vtkself.ProcessRequest(request, inInfo, outInfo)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\vtkmodules\util\vtkAlgorithm.py:198, in VTKPythonAlgorithmBase.ProcessRequest(self, request, inInfo, outInfo) 196 return self.RequestUpdateExtent(request, inInfo, outInfo) 197 elif request.Has(vtkDemandDrivenPipeline.REQUEST_DATA()): --> 198 return self.RequestData(request, inInfo, outInfo) 200 return 1

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\io_support\gifti_support.py:89, in vtkGIFTIReader.RequestData(self, request, inInfo, outInfo) 87 def RequestData(self, request, inInfo, outInfo): 88 opt = vtkPolyData.GetData(outInfo, 0) ---> 89 s = _read_gifti(self._FileName, self._fnames_pointdata) 90 opt.ShallowCopy(s) 91 return 1

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\io_support\gifti_support.py:32, in _read_gifti(ipth, ipths_pointdata) 30 points = g.get_arrays_from_intent(INTENT_POINTS)[0].data 31 cells = g.get_arrays_from_intent(INTENT_CELLS)[0].data ---> 32 s = build_polydata(points, cells=cells) 34 # for pth_data, keys in ipths_pointdata.items(): 35 # d = nb.load(pth_data) 36 # if len(d.darrays) != len(keys): (...) 48 # # random array names 49 # s.append_array(a1.data, name=None, at='p') 50 return s.VTKObject

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\mesh\mesh_creation.py:54, in build_polydata(points, cells) 52 s.SetLines(cells) 53 else: ---> 54 s.SetPolys(cells) 56 # Triangulation needed 57 return serial_connect(s, vtkTriangleFilter())

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\data_object.py:502, in BSPolyData.SetPolys(self, polys) 492 """Set polys. 493 494 Parameters (...) 499 500 """ 501 if isinstance(polys, np.ndarray): --> 502 polys = self._numpy2cells(polys) 503 self.VTKObject.SetPolys(polys)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\data_object.py:459, in BSPolyData._numpy2cells(cells) 457 # cells = dsa.numpyTovtkDataArray(vtk_cells, array_type=VTK_ID_TYPE) 458 ca = BSCellArray() --> 459 ca.SetCells(n_cells, vtk_cells) 460 return ca.VTKObject

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\decorators.py:99, in unwrap_input.._wrapper_decorator.._wrapper_wrap(*args, *kwds) 95 @functools.wraps(func) 96 def _wrapper_wrap(args, kwds): 97 args, kwds = _unwrap_input_data(args, kwds, xargs, skip=skip, 98 vtype=vtype) ---> 99 data = func(args, kwds) 100 return data

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\misc.py:97, in BSCellArray.SetCells(self, n_cells, cells) 95 @unwrap_input(2, vtype={2: VTK_ID_TYPE}) 96 def SetCells(self, n_cells, cells): ---> 97 self.VTKObject.SetCells(n_cells, cells)

TypeError: SetCells argument 2:

TypeError Traceback (most recent call last) File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\vtkmodules\util\vtkAlgorithm.py:152, in VTKPythonAlgorithmBase.InternalAlgorithm.ProcessRequest(self, vtkself, request, inInfo, outInfo) 151 def ProcessRequest(self, vtkself, request, inInfo, outInfo): --> 152 return vtkself.ProcessRequest(request, inInfo, outInfo)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\vtkmodules\util\vtkAlgorithm.py:198, in VTKPythonAlgorithmBase.ProcessRequest(self, request, inInfo, outInfo) 196 return self.RequestUpdateExtent(request, inInfo, outInfo) 197 elif request.Has(vtkDemandDrivenPipeline.REQUEST_DATA()): --> 198 return self.RequestData(request, inInfo, outInfo) 200 return 1

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\io_support\gifti_support.py:89, in vtkGIFTIReader.RequestData(self, request, inInfo, outInfo) 87 def RequestData(self, request, inInfo, outInfo): 88 opt = vtkPolyData.GetData(outInfo, 0) ---> 89 s = _read_gifti(self._FileName, self._fnames_pointdata) 90 opt.ShallowCopy(s) 91 return 1

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\io_support\gifti_support.py:32, in _read_gifti(ipth, ipths_pointdata) 30 points = g.get_arrays_from_intent(INTENT_POINTS)[0].data 31 cells = g.get_arrays_from_intent(INTENT_CELLS)[0].data ---> 32 s = build_polydata(points, cells=cells) 34 # for pth_data, keys in ipths_pointdata.items(): 35 # d = nb.load(pth_data) 36 # if len(d.darrays) != len(keys): (...) 48 # # random array names 49 # s.append_array(a1.data, name=None, at='p') 50 return s.VTKObject

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\mesh\mesh_creation.py:54, in build_polydata(points, cells) 52 s.SetLines(cells) 53 else: ---> 54 s.SetPolys(cells) 56 # Triangulation needed 57 return serial_connect(s, vtkTriangleFilter())

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\data_object.py:502, in BSPolyData.SetPolys(self, polys) 492 """Set polys. 493 494 Parameters (...) 499 500 """ 501 if isinstance(polys, np.ndarray): --> 502 polys = self._numpy2cells(polys) 503 self.VTKObject.SetPolys(polys)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\data_object.py:459, in BSPolyData._numpy2cells(cells) 457 # cells = dsa.numpyTovtkDataArray(vtk_cells, array_type=VTK_ID_TYPE) 458 ca = BSCellArray() --> 459 ca.SetCells(n_cells, vtk_cells) 460 return ca.VTKObject

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\decorators.py:99, in unwrap_input.._wrapper_decorator.._wrapper_wrap(*args, *kwds) 95 @functools.wraps(func) 96 def _wrapper_wrap(args, kwds): 97 args, kwds = _unwrap_input_data(args, kwds, xargs, skip=skip, 98 vtype=vtype) ---> 99 data = func(args, kwds) 100 return data

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\misc.py:97, in BSCellArray.SetCells(self, n_cells, cells) 95 @unwrap_input(2, vtype={2: VTK_ID_TYPE}) 96 def SetCells(self, n_cells, cells): ---> 97 self.VTKObject.SetCells(n_cells, cells)

TypeError: SetCells argument 2:

ValueError Traceback (most recent call last) Cell In[2], line 31 26 gradients_kernel[i] = map_tolabels(gm.gradients[:, i], labeling, mask=mask, 27 fill=np.nan) 30 label_text = ['Pearson', 'Spearman', 'Normalized\nAngle'] ---> 31 plot_hemispheres(surf_lh, surf_rh, array_name=gradients_kernel, size=(1200, 600), 32 cmap='viridis_r', color_bar=True, label_text=label_text, zoom=1.45)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\decorators.py:41, in wrap_input.._wrapper_decorator.._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 ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\plotting\surface_plotting.py:557, in plot_hemispheres(surf_lh, surf_rh, array_name, color_bar, color_range, label_text, layout_style, cmap, nan_color, zoom, background, size, interactive, embed_nb, screenshot, filename, scale, transparent_bg, **kwargs) 555 if isinstance(an, np.ndarray): 556 name = surf_lh.append_array(an[:n_pts_lh], at='p') --> 557 surf_rh.append_array(an[n_pts_lh:], name=name, at='p') 558 array_name2.append(name) 559 to_remove.append(name)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\data_object.py:214, in BSDataSet.append_array(self, array, name, at, convert_bool, overwrite) 211 raise ValueError('Array shape is not valid.') 213 if at in ['point', 'p']: --> 214 _array_overwrite(self.PointData, to_point) 215 elif at in ['cell', 'c']: 216 _array_overwrite(self.CellData, to_cell)

File ~\AppData\Local\Programs\Python\Python312\Lib\site-packages\brainspace\vtk_interface\wrappers\data_object.py:211, in BSDataSet.append_array.._array_overwrite(attributes, has_same_shape) 208 warnings.warn('Array was not appended. Array name already ' 209 'exists.') 210 else: --> 211 raise ValueError('Array shape is not valid.')

ValueError: Array shape is not valid.

shuerye commented 3 weeks ago

fixed with following settings:

anyio 4.4.0 argon2-cffi 23.1.0 argon2-cffi-bindings 21.2.0 arrow 1.3.0 asttokens 2.4.1 async-lru 2.0.4 attrs 24.2.0 babel 2.16.0 beautifulsoup4 4.12.3 bleach 6.1.0 brainspace 0.1.10 certifi 2024.7.4 cffi 1.17.0 charset-normalizer 3.3.2 colorama 0.4.6 comm 0.2.2 contourpy 1.2.1 cycler 0.12.1 debugpy 1.8.5 decorator 5.1.1 defusedxml 0.7.1 exceptiongroup 1.2.2 executing 2.0.1 fastjsonschema 2.20.0 fonttools 4.53.1 fqdn 1.5.1 h11 0.14.0 httpcore 1.0.5 httpx 0.27.0 idna 3.7 ipykernel 6.29.5 ipython 8.26.0 ipywidgets 8.1.3 isoduration 20.11.0 jedi 0.19.1 Jinja2 3.1.4 joblib 1.4.2 json5 0.9.25 jsonpointer 3.0.0 jsonschema 4.23.0 jsonschema-specifications 2023.12.1 jupyter 1.0.0 jupyter_client 8.6.2 jupyter-console 6.6.3 jupyter_core 5.7.2 jupyter-events 0.10.0 jupyter-lsp 2.2.5 jupyter_server 2.14.2 jupyter_server_terminals 0.5.3 jupyterlab 4.2.4 jupyterlab_pygments 0.3.0 jupyterlab_server 2.27.3 jupyterlab_widgets 3.0.11 kiwisolver 1.4.5 lxml 5.3.0 MarkupSafe 2.1.5 matplotlib 3.9.2 matplotlib-inline 0.1.7 mistune 3.0.2 nbclient 0.10.0 nbconvert 7.16.4 nbformat 5.10.4 nest-asyncio 1.6.0 neuromaps 0.0.5 nibabel 5.2.1 nilearn 0.10.3 notebook 7.2.1 notebook_shim 0.2.4 numpy 1.26.4 overrides 7.7.0 packaging 24.1 pandas 2.2.2 pandocfilters 1.5.1 parso 0.8.4 pillow 10.4.0 pip 21.2.3 platformdirs 4.2.2 prometheus_client 0.20.0 prompt_toolkit 3.0.47 psutil 6.0.0 pure_eval 0.2.3 pycparser 2.22 Pygments 2.18.0 pyparsing 3.1.2 python-dateutil 2.9.0.post0 python-json-logger 2.0.7 pytz 2024.1 pywin32 306 pywinpty 2.0.13 PyYAML 6.0.2 pyzmq 26.1.1 qtconsole 5.5.2 QtPy 2.4.1 referencing 0.35.1 requests 2.32.3 rfc3339-validator 0.1.4 rfc3986-validator 0.1.1 rpds-py 0.20.0 scikit-learn 1.5.1 scipy 1.14.0 Send2Trash 1.8.3 setuptools 57.4.0 six 1.16.0 sniffio 1.3.1 soupsieve 2.6 stack-data 0.6.3 surfplot 0.2.0 terminado 0.18.1 threadpoolctl 3.5.0 tinycss2 1.3.0 tomli 2.0.1 tornado 6.4.1 traitlets 5.14.3 types-python-dateutil 2.9.0.20240316 typing_extensions 4.12.2 tzdata 2024.1 uri-template 1.3.0 urllib3 2.2.2 vtk 9.3.1 wcwidth 0.2.13 webcolors 24.8.0 webencodings 0.5.1 websocket-client 1.8.0 widgetsnbextension 4.0.11