如何解决Seaborn ValueError:零尺寸数组到最小化运算的最小值,没有标识
我从他们自己的website中运行了这个散布图的原始示例,
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# this works:
ax = sns.scatterplot(x="total_bill",y="tip",data=tips)
# But adding 'hue' gives the error below:
ax = sns.scatterplot(x="total_bill",hue="time",data=tips)
此错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
e:\Anaconda3\lib\site-packages\IPython\core\formatters.py in __call__(self,obj)
339 pass
340 else:
--> 341 return printer(obj)
342 # Finally look for special method names
343 method = get_real_method(obj,self.print_method)
e:\Anaconda3\lib\site-packages\IPython\core\pylabtools.py in <lambda>(fig)
246
247 if 'png' in formats:
--> 248 png_formatter.for_type(Figure,lambda fig: print_figure(fig,'png',**kwargs))
249 if 'retina' in formats or 'png2x' in formats:
250 png_formatter.for_type(Figure,lambda fig: retina_figure(fig,**kwargs))
e:\Anaconda3\lib\site-packages\IPython\core\pylabtools.py in print_figure(fig,fmt,bbox_inches,**kwargs)
130 FigureCanvasBase(fig)
131
--> 132 fig.canvas.print_figure(bytes_io,**kw)
133 data = bytes_io.getvalue()
134 if fmt == 'svg':
e:\Anaconda3\lib\site-packages\matplotlib\backend_bases.py in print_figure(self,filename,dpi,facecolor,edgecolor,orientation,format,pad_inches,bbox_extra_artists,backend,**kwargs)
2191 else suppress())
2192 with ctx:
-> 2193 self.figure.draw(renderer)
2194
2195 bbox_inches = self.figure.get_tightbbox(
e:\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist,renderer,*args,**kwargs)
39 renderer.start_filter()
40
---> 41 return draw(artist,**kwargs)
42 finally:
43 if artist.get_agg_filter() is not None:
e:\Anaconda3\lib\site-packages\matplotlib\figure.py in draw(self,renderer)
1861
1862 self.patch.draw(renderer)
-> 1863 mimage._draw_list_compositing_images(
1864 renderer,self,artists,self.suppressComposite)
1865
e:\Anaconda3\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer,parent,suppress_composite)
129 if not_composite or not has_images:
130 for a in artists:
--> 131 a.draw(renderer)
132 else:
133 # Composite any adjacent images together
e:\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist,**kwargs)
42 finally:
43 if artist.get_agg_filter() is not None:
e:\Anaconda3\lib\site-packages\matplotlib\cbook\deprecation.py in wrapper(*inner_args,**inner_kwargs)
409 else deprecation_addendum,410 **kwargs)
--> 411 return func(*inner_args,**inner_kwargs)
412
413 return wrapper
e:\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in draw(self,inframe)
2746 renderer.stop_rasterizing()
2747
-> 2748 mimage._draw_list_compositing_images(renderer,artists)
2749
2750 renderer.close_group('axes')
e:\Anaconda3\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer,**kwargs)
42 finally:
43 if artist.get_agg_filter() is not None:
e:\Anaconda3\lib\site-packages\matplotlib\collections.py in draw(self,renderer)
929 def draw(self,renderer):
930 self.set_sizes(self._sizes,self.figure.dpi)
--> 931 Collection.draw(self,renderer)
932
933
e:\Anaconda3\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist,renderer)
383 else:
384 combined_transform = transform
--> 385 extents = paths[0].get_extents(combined_transform)
386 if (extents.width < self.figure.bbox.width
387 and extents.height < self.figure.bbox.height):
e:\Anaconda3\lib\site-packages\matplotlib\path.py in get_extents(self,transform,**kwargs)
601 xys.append(curve([0,*dzeros,1]))
602 xys = np.concatenate(xys)
--> 603 return Bbox([xys.min(axis=0),xys.max(axis=0)])
604
605 def intersects_path(self,other,filled=True):
e:\Anaconda3\lib\site-packages\numpy\core\_methods.py in _amin(a,axis,out,keepdims,initial,where)
41 def _amin(a,axis=None,out=None,keepdims=False,42 initial=_NoValue,where=True):
---> 43 return umr_minimum(a,None,where)
44
45 def _sum(a,dtype=None,ValueError: zero-size array to reduction operation minimum which has no identity
昨天确实有效。但是,我运行了使用conda update --all
的更新。有什么改变吗?
这是怎么回事?
我在Linux机器上运行python。
Pandas: 1.1.0.
Numpy: 1.19.1.
Seaborn api: 0.10.1.
解决方法
-
matplotlib==3.3.2
的这个问题似乎已解决 - seaborn: Scatterplot fails with matplotlib==3.3.1 #2194
- 使用
matplotlib
版3.3.1
- 一种解决方法是使用
list
将hue
发送到.tolist()
- 使用
hue=tips.time.tolist()
。
- 使用
- 正常行为会在图例中添加
title
,但是向list
发送hue
不会添加图例标题。- 图例标题可以手动添加。
import seaborn as sns
# load data
tips = sns.load_dataset("tips")
# But adding 'hue' gives the error below:
ax = sns.scatterplot(x="total_bill",y="tip",hue=tips.time.tolist(),data=tips)
ax.legend(title='time') # add a title to the legend
,
鉴于3.3.1中存在已知错误,我运行了conda install -c conda-forge matplotlib==3.3.0
。
正确的答案,但不是一个好的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。