MRsources / MRzero-Core

GNU Affero General Public License v3.0
23 stars 5 forks source link

matplotlib error while trying to plot CustomVoxelPhantom #63

Closed nogakertes closed 3 months ago

nogakertes commented 3 months ago

Hi, I ran the following code for creating CustomVoxelPhantom and plotting it:

obj_p = mr0.CustomVoxelPhantom( pos=torch.tensor([[-0.25, -0.25, 0]]), PD=torch.tensor([10.0]), T1=torch.tensor([3.0]), T2=torch.tensor([0.5]), T2dash=torch.tensor([30e-3]), # 1/T2* = 1/T2 + 1/T2' D=torch.tensor([0.0]), B0=torch.tensor([500]), voxel_size=torch.tensor([0.1,0.1,0.1]), voxel_shape="box" )

obj_p.plot()

The error :


ValueError Traceback (most recent call last) File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\IPython\core\formatters.py:343, in BaseFormatter.call(self, obj) 341 pass 342 else: --> 343 return printer(obj) 344 # Finally look for special method names 345 method = get_real_method(obj, self.print_method)

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\IPython\core\pylabtools.py:170, in print_figure(fig, fmt, bbox_inches, base64, kwargs) 167 from matplotlib.backend_bases import FigureCanvasBase 168 FigureCanvasBase(fig) --> 170 fig.canvas.print_figure(bytes_io, kw) 171 data = bytes_io.getvalue() 172 if fmt == 'svg':

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\backend_bases.py:2189, in FigureCanvasBase.print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs) 2186 # we do this instead of self.figure.draw_without_rendering 2187 # so that we can inject the orientation 2188 with getattr(renderer, "_draw_disabled", nullcontext)(): -> 2189 self.figure.draw(renderer) 2190 if bbox_inches: 2191 if bbox_inches == "tight":

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\artist.py:95, in _finalize_rasterization..draw_wrapper(artist, renderer, *args, kwargs) 93 @wraps(draw) 94 def draw_wrapper(artist, renderer, *args, *kwargs): ---> 95 result = draw(artist, renderer, args, kwargs) 96 if renderer._rasterizing: 97 renderer.stop_rasterizing()

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\artist.py:72, in allow_rasterization..draw_wrapper(artist, renderer) 69 if artist.get_agg_filter() is not None: 70 renderer.start_filter() ---> 72 return draw(artist, renderer) 73 finally: 74 if artist.get_agg_filter() is not None:

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\figure.py:3155, in Figure.draw(self, renderer) 3152 # ValueError can occur when resizing a window. 3154 self.patch.draw(renderer) -> 3155 mimage._draw_list_compositing_images( 3156 renderer, self, artists, self.suppressComposite) 3158 renderer.close_group('figure') 3159 finally:

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite) 130 if not_composite or not has_images: 131 for a in artists: --> 132 a.draw(renderer) 133 else: 134 # Composite any adjacent images together 135 image_group = []

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\artist.py:72, in allow_rasterization..draw_wrapper(artist, renderer) 69 if artist.get_agg_filter() is not None: 70 renderer.start_filter() ---> 72 return draw(artist, renderer) 73 finally: 74 if artist.get_agg_filter() is not None:

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\axes_base.py:3073, in _AxesBase.draw(self, renderer) 3070 for spine in self.spines.values(): 3071 artists.remove(spine) -> 3073 self._update_title_position(renderer) 3075 if not self.axison: 3076 for _axis in self._axis_map.values():

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\axes_base.py:3027, in _AxesBase._update_title_position(self, renderer) 3025 _log.debug('top of Axes not in the figure, so title not moved') 3026 return -> 3027 if title.get_window_extent(renderer).ymin < top: 3028 _, y = self.transAxes.inverted().transform((0, top)) 3029 title.set_position((x, y))

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\text.py:956, in Text.get_window_extent(self, renderer, dpi) 951 raise RuntimeError( 952 "Cannot get window extent of text w/o renderer. You likely " 953 "want to call 'figure.draw_without_rendering()' first.") 955 with cbook._setattr_cm(self.figure, dpi=dpi): --> 956 bbox, info, descent = self._get_layout(self._renderer) 957 x, y = self.get_unitless_position() 958 x, y = self.get_transform().transform((x, y))

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\text.py:381, in Text._get_layout(self, renderer) 379 clean_line, ismath = self._preprocess_math(line) 380 if clean_line: --> 381 w, h, d = _get_text_metrics_with_cache( 382 renderer, clean_line, self._fontproperties, 383 ismath=ismath, dpi=self.figure.dpi) 384 else: 385 w = h = d = 0

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\text.py:69, in _get_text_metrics_with_cache(renderer, text, fontprop, ismath, dpi) 66 """Call renderer.get_text_width_height_descent, caching the results.""" 67 # Cached based on a copy of fontprop so that later in-place mutations of 68 # the passed-in argument do not mess up the cache. ---> 69 return _get_text_metrics_with_cache_impl( 70 weakref.ref(renderer), text, fontprop.copy(), ismath, dpi)

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\text.py:77, in _get_text_metrics_with_cache_impl(renderer_ref, text, fontprop, ismath, dpi) 73 @functools.lru_cache(4096) 74 def _get_text_metrics_with_cache_impl( 75 renderer_ref, text, fontprop, ismath, dpi): 76 # dpi is unused, but participates in cache invalidation (via the renderer). ---> 77 return renderer_ref().get_text_width_height_descent(text, fontprop, ismath)

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\backends\backend_agg.py:216, in RendererAgg.get_text_width_height_descent(self, s, prop, ismath) 212 return super().get_text_width_height_descent(s, prop, ismath) 214 if ismath: 215 ox, oy, width, height, descent, font_image = \ --> 216 self.mathtext_parser.parse(s, self.dpi, prop) 217 return width, height, descent 219 font = self._prepare_font(prop)

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\mathtext.py:79, in MathTextParser.parse(self, s, dpi, prop, antialiased) 77 prop = prop.copy() if prop is not None else None 78 antialiased = mpl._val_or_rc(antialiased, 'text.antialiased') ---> 79 return self._parse_cached(s, dpi, prop, antialiased)

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib\mathtext.py:100, in MathTextParser._parse_cached(self, s, dpi, prop, antialiased) 97 if self._parser is None: # Cache the parser globally. 98 self.class._parser = _mathtext.Parser() --> 100 box = self._parser.parse(s, fontset, fontsize, dpi) 101 output = _mathtext.ship(box) 102 if self._output_type == "vector":

File c:\Users\nogak\miniconda3\envs\mri336504\Lib\site-packages\matplotlib_mathtext.py:2173, in Parser.parse(self, s, fonts_object, fontsize, dpi) 2170 result = self._expression.parseString(s) 2171 except ParseBaseException as err: 2172 # explain becomes a plain method on pyparsing 3 (err.explain(0)). -> 2173 raise ValueError("\n" + ParseException.explain(err, 0)) from None 2174 self._state_stack = [] 2175 self._in_subscript_or_superscript = False

ValueError: $T_2#$ ^ ParseException: Expected end of text, found '$' (at char 0), (line:1, col:1)

J-Endres commented 3 months ago

Thank you for reporting this. It should be fixed by 8537df9fc5ed56cd483e58c6ddc184534933c3d0