【问题标题】:matplotlib rgb color not working after upgrading matplotlib升级matplotlib后matplotlib rgb颜色不起作用
【发布时间】:2017-06-13 15:29:19
【问题描述】:

我刚刚将 matplotlib 升级到 matplotlib2.0。据我所知,基本用途没有任何改变,但我现在有了这个带有 rgb 编码的奇怪 bu:

myDF_DoMS.mean().plot(color =(0.2,0.2,0.7),xticks=np.arange(1,31,1))
plt.plot([1,32],[zeMeanS,zeMeanS],color=(0.2,0.7,0.9))
plt.xlabel('xlabel')
plt.ylabel('Some Score')
plt.title(Study+"\n A name")
plt.show()

来自内核的投诉:

ValueError:无效的 RGBA 参数:0.2

(下面是完整的错误堆栈)

突然 0.2 不再是浮点数了! 如果我输入'b',最糟糕的是它的工作原理 而在第 2 行,第 2 行的另一个 'rgb' 列表工作正常 (color=(0.2,0.7,0.9)) ...

我有点迷茫。

设置: jupyter notebook 中一个单元格的副本,可以完美地工作。 蟒蛇环境中的 Python 2.7。 Windows 10 作为操作系统。

这里是输出:

 ValueError                                Traceback (most recent call
 last) C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\IPython\core\formatters.pyc
 in __call__(self, obj)
     305                 pass
     306             else:
 --> 307                 return printer(obj)
     308             # Finally look for special method names
     309             method = get_real_method(obj, self.print_method)

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\IPython\core\pylabtools.pyc
 in <lambda>(fig)
     238 
     239     if 'png' in formats:
 --> 240         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
     241     if 'retina' in formats or 'png2x' in formats:
     242         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\IPython\core\pylabtools.pyc
 in print_figure(fig, fmt, bbox_inches, **kwargs)
     122 
     123     bytes_io = BytesIO()
 --> 124     fig.canvas.print_figure(bytes_io, **kw)
     125     data = bytes_io.getvalue()
     126     if fmt == 'svg':

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\backend_bases.pyc
 in print_figure(self, filename, dpi, facecolor, edgecolor,
 orientation, format, **kwargs)    2198                    
 orientation=orientation,    2199                     dryrun=True,
 -> 2200                     **kwargs)    2201                 renderer = self.figure._cachedRenderer    2202                 bbox_inches = self.figure.get_tightbbox(renderer)

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\backends\backend_agg.pyc
 in print_png(self, filename_or_obj, *args, **kwargs)
     543 
     544     def print_png(self, filename_or_obj, *args, **kwargs):
 --> 545         FigureCanvasAgg.draw(self)
     546         renderer = self.get_renderer()
     547         original_dpi = renderer.dpi

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\backends\backend_agg.pyc
 in draw(self)
     462 
     463         try:
 --> 464             self.figure.draw(self.renderer)
     465         finally:
     466             RendererAgg.lock.release()

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\artist.pyc
 in draw_wrapper(artist, renderer, *args, **kwargs)
      61     def draw_wrapper(artist, renderer, *args, **kwargs):
      62         before(artist, renderer)
 ---> 63         draw(artist, renderer, *args, **kwargs)
      64         after(artist, renderer)
      65 

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\figure.pyc
 in draw(self, renderer)    1142     1143            
 mimage._draw_list_compositing_images(
 -> 1144                 renderer, self, dsu, self.suppressComposite)    1145     1146             renderer.close_group('figure')

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\image.pyc
 in _draw_list_compositing_images(renderer, parent, dsu,
 suppress_composite)
     137     if not_composite or not has_images:
     138         for zorder, a in dsu:
 --> 139             a.draw(renderer)
     140     else:
     141         # Composite any adjacent images together

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\artist.pyc
 in draw_wrapper(artist, renderer, *args, **kwargs)
      61     def draw_wrapper(artist, renderer, *args, **kwargs):
      62         before(artist, renderer)
 ---> 63         draw(artist, renderer, *args, **kwargs)
      64         after(artist, renderer)
      65 

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\axes\_base.pyc
 in draw(self, renderer, inframe)    2424            
 renderer.stop_rasterizing()    2425 
 -> 2426         mimage._draw_list_compositing_images(renderer, self, dsu)    2427     2428         renderer.close_group('axes')

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\image.pyc
 in _draw_list_compositing_images(renderer, parent, dsu,
 suppress_composite)
     137     if not_composite or not has_images:
     138         for zorder, a in dsu:
 --> 139             a.draw(renderer)
     140     else:
     141         # Composite any adjacent images together

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\artist.pyc
 in draw_wrapper(artist, renderer, *args, **kwargs)
      61     def draw_wrapper(artist, renderer, *args, **kwargs):
      62         before(artist, renderer)
 ---> 63         draw(artist, renderer, *args, **kwargs)
      64         after(artist, renderer)
      65 

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\lines.pyc
 in draw(self, renderer)
     801                 self._set_gc_clip(gc)
     802 
 --> 803                 ln_color_rgba = self._get_rgba_ln_color()
     804                 gc.set_foreground(ln_color_rgba, isRGBA=True)
     805                 gc.set_alpha(ln_color_rgba[3])

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\lines.pyc
 in _get_rgba_ln_color(self, alt)    1342     1343     def
 _get_rgba_ln_color(self, alt=False):
 -> 1344         return mcolors.to_rgba(self._color, self._alpha)    1345     1346     # some aliases....

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\colors.pyc
 in to_rgba(c, alpha)
     141         rgba = _colors_full_map.cache[c, alpha]
     142     except (KeyError, TypeError):  # Not in cache, or unhashable.
 --> 143         rgba = _to_rgba_no_colorcycle(c, alpha)
     144         try:
     145             _colors_full_map.cache[c, alpha] = rgba

 C:\Program
 Files\Anaconda2\envs\moonshade\lib\site-packages\matplotlib\colors.pyc
 in _to_rgba_no_colorcycle(c, alpha)
     192         # float)` and `np.array(...).astype(float)` all convert "0.5" to 0.5.
     193         # Test dimensionality to reject single floats.
 --> 194         raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
     195     # Return a tuple to prevent the cached value from being modified.
     196     c = tuple(c.astype(float))

 ValueError: Invalid RGBA argument: 0.2

 <matplotlib.figure.Figure at 0x14e54ac8>

【问题讨论】:

  • 只是添加,调用的第一个对象是熊猫数据框。这个问题很容易解决,只需使用任何其他颜色代码,如 xkcd's 或 letter works ,这只是烦人的困惑(对我来说)。
  • 如果您忘记在您的问题中添加内容,只需edit 它,而不是评论。请注意,当您提供问题的minimal reproducible example 时,帮助您总是更容易。由于我们这里没有您的数据框,我们只能猜测。偶然绘制的数据框是否有 3 列?

标签: python matplotlib jupyter-notebook


【解决方案1】:

如果要绘制的数据框有 3 列,则 color=(0.2,0.2,0.7) 的颜色规范不明确。它可以很好地解释为颜色元组,在这种情况下,0.2 将是要绘制的第一列的颜色。但是,0.2 毕竟不是有效的颜色,因此会出现错误。

一个选项是使用

color=matplotlib.colors.to_hex((0.2,0.2,0.9))

或直接使用等效的十六进制

color="#3333e5"

顺便说一句,我认为这种行为在 matplotlib 版本之间没有改变,所以可能只是你现在使用了不同的数据框(?)。

【讨论】:

  • 是的,我可能已经切换了数据框的形状......无论如何,您的解决方案当然可以像切换格式一样工作。我承认对 matplotlib 完全陌生,所以我不能说我明白出了什么问题。但感谢您的回答和解决方法!
猜你喜欢
  • 2013-03-05
  • 2018-03-23
  • 2015-10-22
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2016-09-02
相关资源
最近更新 更多