matplotlib stackplot颜色ValueError和分段错误

时间:2016-02-09 22:02:06

标签: python macos matplotlib

我最近重新安装了我的OSX,Python和我的所有依赖项,但是当运行以前工作的旧代码时(请参阅问题:Wrong offset when using math mode and subscripts in Matplotlib and OSX)现在抛出异常和分段错误。完整代码在链接的问题中,并且没有任何更改。 这是我得到的错误:

  File "matplotlib-stacked.py", line 57, in <module>
    plt.stackplot(NP.arange(num_cols)+1,data,colors=colors)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3326, in stackplot
    ret = ax.stackplot(x, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py", line 1811, in inner
    return func(ax, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 4439, in stackplot
    return mstack.stackplot(self, x, *args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/stackplot.py", line 66, in stackplot
    axes.set_color_cycle(colors)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 1126, in set_color_cycle
    self.set_prop_cycle('color', clist)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 1112, in set_prop_cycle
    prop_cycle = cycler(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/rcsetup.py", line 720, in cycler
    vals = validator(vals)
  File "/usr/local/lib/python2.7/site-packages/matplotlib/rcsetup.py", line 90, in f
    raise ValueError(msg)
ValueError: 's' must be of type [ string | list | tuple ]
Segmentation fault: 11

我不知道在哪里看,熟悉matplotlib的人遇到过这个问题? python启动器似乎试图打开交互式绘图窗口,但后来我得到了分段错误。

1 个答案:

答案 0 :(得分:1)

我发现实际上有两个解决方法:

我设法将问题与传递给stackplot方法的颜色隔离开来。事实证明,matplotlib.pyplot.stackplotmatplotlib.cm.rainbow助手提供的颜色搭配不是很好。将RGBA的颜色转换为十六进制解决了这个问题。

colors = cm.rainbow(NP.linspace(0, 1, num_cols))
colors = [matplotlib.colors.rgb2hex(i) for i in colors]

然后我注意到我没有使用最新版本的matplotlib。从1.5.0升级到1.5.1也解决了问题(无论使用何种颜色格式)。

我希望这能帮助遇到同样神秘问题或无法升级matplotlib的人。