【问题标题】:Matplotlib namespace issues?Matplotlib 命名空间问题?
【发布时间】:2016-05-14 00:08:40
【问题描述】:

我对 Matplotlib.pyplot 和命名空间有疑问。 见以下代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import cm

x=np.linspace(0,1,28)
color=iter(cm.gist_rainbow_r(np.linspace(0,1,28)))
plt.clf()
for s in range(28):
    c=next(color)
    plt.plot(x,x*s, c=c)

plt.show()

这个想法是用彩虹图的不同颜色绘制地块。 现在发生的事情是,在第一次执行时它可以工作,但是事情变得越来越奇怪。 在多次连续执行时,地图会停止使用,而是使用默认地图。

我发现问题可能出在 plot 函数中的“c=c”中,但是我尝试了不同的命名“c”、“color”、....问题在这里。

有人可以重现问题并且(至少连续尝试 5 次代码)能够解释这里发生了什么吗?

谢谢

【问题讨论】:

  • 这对我来说很好用。您能否上传一张显示问题所在的图片?
  • 对不起;我忘了说明我正在使用的版本。它是 Python 3.4.1 和 matplotlib 1.4.3。还;我只是试图在朋友的计算机上重现它(matplotlib 1.4.0.r...),但它没有用。或者更好:脚本的行为符合预期。
  • @tom:我相信它对你有用,因为我无法在另一台机器上重现它。然而;正如我可以解释的那样,我不需要上传失败的图像。有时,图中的 c 参数似乎没有正确传输,因为该图是使用默认颜色绘制的(几次后重复)。我什至尝试为绘图函数提供一个恒定的 rgba 元组,例如:“..., c=[0.0, 0.7, 0.2, 1.0]..”。然后我遇到了同样的问题。有时所有线条的颜色都相同,有时则不同。我真的不明白,这里发生了什么。

标签: matplotlib plot colors namespaces colormap


【解决方案1】:

这是 mpl + python3.4+ 的已知问题,已在 mpl v1.5+ 中修复。

许多样式参数有多个别名(例如 'c''color'),其中 mpl 没有正确合并,艺术家基本上被告知两种不同的颜色,这在内部意味着有一个字典,其中包含 'c''color' 在里面。

在 python 3.4+ 中,字典迭代的进程到进程顺序默认是随机的,因为底层哈希表的种子是随机的(这是为了防止基于故意哈希表冲突的可能的 DOS 攻击)。在旧版本的 python 中,用户提供的颜色总是在迭代顺序的后面出现,所以事情巧合地起作用了。

解决方法 (iirc) 的简单方法是使用 plot(x, y, color=c) 或更新到 mpl 1.5.1。

【讨论】:

  • 感谢您的解释。
猜你喜欢
  • 2011-02-05
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2011-04-11
  • 2014-09-07
相关资源
最近更新 更多