ckmah / bento-tools

A Python toolkit for subcellular analysis of spatial transcriptomics data
https://bento-tools.readthedocs.io/en/latest/
BSD 2-Clause "Simplified" License
56 stars 6 forks source link

Plotting and metadata setters #119

Closed ckmah closed 4 months ago

ckmah commented 4 months ago
Details

```python { "name": "ValueError", "message": "Buffer has wrong number of dimensions (expected 1, got 2)", "stack": "--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Cell In[10], line 1 ----> 1 bt.pl.points(data, hue=\"cell_boundaries\", legend=False) File ~/bento-tools/bento/plotting/_utils.py:30, in savefig..wrapper(*args, **kwds) 27 kwargs = get_default_args(plot_fn) 28 kwargs.update(kwds) ---> 30 plot_fn(*args, **kwds) 32 fname = kwargs[\"fname\"] 33 rc = { 34 \"image.interpolation\": \"none\", 35 \"svg.fonttype\": \"none\", (...) 38 \"pdf.fonttype\": 42, 39 } File ~/bento-tools/bento/plotting/_plotting.py:135, in points(sdata, points_key, instance_key, hue, hue_order, size, style, shapes, hide_outside, title, dx, units, square, axis_visible, frame_visible, ax, shapes_kws, fname, **kwargs) 116 ax = _setup_ax( 117 ax=ax, 118 dx=dx, (...) 123 title=title, 124 ) 125 points = _prepare_points_df( 126 sdata, 127 points_key=points_key, (...) 132 hue_order=hue_order 133 ) --> 135 _scatter(points, hue=hue, size=size, style=style, ax=ax, **kwargs) 136 _shapes(sdata, shapes=shapes, hide_outside=hide_outside, ax=ax, **shapes_kws) File ~/bento-tools/bento/plotting/_layers.py:34, in _scatter(points, ax, hue, size, style, **kwargs) 31 scatter_kws[\"c\"] = points[hue] 32 hue = None ---> 34 sns.scatterplot( 35 data=points, x=\"x\", y=\"y\", hue=hue, size=size, style=style, ax=ax, **scatter_kws 36 ) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/seaborn/relational.py:742, in scatterplot(data, x, y, hue, size, style, palette, hue_order, hue_norm, sizes, size_order, size_norm, markers, style_order, legend, ax, **kwargs) 732 def scatterplot( 733 data=None, *, 734 x=None, y=None, hue=None, size=None, style=None, (...) 738 **kwargs 739 ): 741 variables = _ScatterPlotter.get_semantics(locals()) --> 742 p = _ScatterPlotter(data=data, variables=variables, legend=legend) 744 p.map_hue(palette=palette, order=hue_order, norm=hue_norm) 745 p.map_size(sizes=sizes, order=size_order, norm=size_norm) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/seaborn/relational.py:538, in _ScatterPlotter.__init__(self, data, variables, legend) 529 def __init__(self, *, data=None, variables={}, legend=None): 530 531 # TODO this is messy, we want the mapping to be agnostic about 532 # the kind of plot to draw, but for the time being we need to set 533 # this information so the SizeMapping can use it 534 self._default_size_range = ( 535 np.r_[.5, 2] * np.square(mpl.rcParams[\"lines.markersize\"]) 536 ) --> 538 super().__init__(data=data, variables=variables) 540 self.legend = legend File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/seaborn/_oldcore.py:640, in VectorPlotter.__init__(self, data, variables) 635 # var_ordered is relevant only for categorical axis variables, and may 636 # be better handled by an internal axis information object that tracks 637 # such information and is set up by the scale_* methods. The analogous 638 # information for numeric axes would be information about log scales. 639 self._var_ordered = {\"x\": False, \"y\": False} # alt., used DefaultDict --> 640 self.assign_variables(data, variables) 642 for var, cls in self._semantic_mappings.items(): 643 644 # Create the mapping function 645 map_func = partial(cls.map, plotter=self) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/seaborn/_oldcore.py:701, in VectorPlotter.assign_variables(self, data, variables) 699 else: 700 self.input_format = \"long\" --> 701 plot_data, variables = self._assign_variables_longform( 702 data, **variables, 703 ) 705 self.plot_data = plot_data 706 self.variables = variables File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/seaborn/_oldcore.py:962, in VectorPlotter._assign_variables_longform(self, data, **kwargs) 958 variables[key] = getattr(val, \"name\", None) 960 # Construct a tidy plot DataFrame. This will convert a number of 961 # types automatically, aligning on index in case of pandas objects --> 962 plot_data = pd.DataFrame(plot_data) 964 # Reduce the variables dictionary to fields with valid data 965 variables = { 966 var: name 967 for var, name in variables.items() 968 if plot_data[var].notnull().any() 969 } File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/core/frame.py:664, in DataFrame.__init__(self, data, index, columns, dtype, copy) 658 mgr = self._init_mgr( 659 data, axes={\"index\": index, \"columns\": columns}, dtype=dtype, copy=copy 660 ) 662 elif isinstance(data, dict): 663 # GH#38939 de facto copy defaults to False only in non-dict cases --> 664 mgr = dict_to_mgr(data, index, columns, dtype=dtype, copy=copy, typ=manager) 665 elif isinstance(data, ma.MaskedArray): 666 import numpy.ma.mrecords as mrecords File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/core/internals/construction.py:493, in dict_to_mgr(data, index, columns, dtype, typ, copy) 489 else: 490 # dtype check to exclude e.g. range objects, scalars 491 arrays = [x.copy() if hasattr(x, \"dtype\") else x for x in arrays] --> 493 return arrays_to_mgr(arrays, columns, index, dtype=dtype, typ=typ, consolidate=copy) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/core/internals/construction.py:123, in arrays_to_mgr(arrays, columns, index, dtype, verify_integrity, typ, consolidate) 120 index = ensure_index(index) 122 # don't force copy because getting jammed in an ndarray anyway --> 123 arrays = _homogenize(arrays, index, dtype) 124 # _homogenize ensures 125 # - all(len(x) == len(index) for x in arrays) 126 # - all(x.ndim == 1 for x in arrays) (...) 129 130 else: 131 index = ensure_index(index) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/core/internals/construction.py:617, in _homogenize(data, index, dtype) 614 val = dict(val) 615 val = lib.fast_multiget(val, oindex._values, default=np.nan) --> 617 val = sanitize_array( 618 val, index, dtype=dtype, copy=False, raise_cast_failure=False 619 ) 620 com.require_length_match(val, index) 622 homogenized.append(val) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/core/construction.py:642, in sanitize_array(data, index, dtype, copy, raise_cast_failure, allow_2d) 640 raise 641 else: --> 642 subarr = maybe_convert_platform(data) 643 if subarr.dtype == object: 644 subarr = cast(np.ndarray, subarr) File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/core/dtypes/cast.py:135, in maybe_convert_platform(values) 133 if arr.dtype == _dtype_obj: 134 arr = cast(np.ndarray, arr) --> 135 arr = lib.maybe_convert_objects(arr) 137 return arr File ~/mambaforge/envs/bento-v2.1/lib/python3.9/site-packages/pandas/_libs/lib.pyx:2449, in pandas._libs.lib.maybe_convert_objects() ValueError: Buffer has wrong number of dimensions (expected 1, got 2)" } ```