需要确认库错误

时间:2014-03-13 08:24:34

标签: python matplotlib color-mapping

我对Python很新,甚至我已经做了相当深入和长期的研究我认为在github上打开一个案例之前我需要社区的确认。

我正在绘制两个"hinton plots",但我使用颜色范围来表示矩阵值。
出于某种原因使用子图绘制最后一个子图中的第一个图的背景,第一个mymap颜色(在我的情况下为蓝色)。如果在任何情况下都覆盖set_facecolor = 'gray'(即使我在绘图后设置了背景颜色)。此外,我发现仅当matrix值大于0时才会产生此错误。
请参阅下面的图片(和图片说明)和代码。

第二个子图上第一张图片的背景为蓝色。 Background of the first picture on the second subplot is blue 第三个​​子图添加了没有数据,现在它是蓝色的,第二个子图的第一个方块不是。 Third subplot added with no data, now it is blue colored and first square of second subplot is not

对于第一张图片结果,将第6行更改为:fig, (axe_1, axe_2) = plt.subplots(1,2)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl


fig, (axe_1, axe_2, axe_3) = plt.subplots(1, 3)
my_min, my_max = (0, 10)
step = 1
mymap = mpl.colors.LinearSegmentedColormap.from_list("my list", ['blue','red'])
levels = range(my_min, my_max+step, step)
matrix = [None, None]
matrix[0] = np.asanyarray([[0, 1, 2], [3, 0, 5], [6, 7, 0]])
matrix[1] = np.asanyarray([[0, 9, 8], [7, 0, 6], [5, 4, 0]])

for iter, item in enumerate([axe_1, axe_2]):

    item.patch.set_facecolor('gray')
    item.set_aspect('equal', 'box')
    item.xaxis.set_major_locator(plt.NullLocator())
    item.yaxis.set_major_locator(plt.NullLocator())
    Z = [[0, 0], [0, 0]]
    CS3 = plt.contourf(Z, levels, cmap=mymap)
    for (x, y), z in np.ndenumerate(matrix[iter]):
        b = (float(z)-my_min)/(my_max-my_min)
        g = 0
        r = 1-b
        rect = plt.Rectangle([y, x], 0.9, 0.9, facecolor=(r, g, b), edgecolor="black")
        item.add_patch(rect)
    item.autoscale_view()
plt.show()

如果我没有犯任何愚蠢的错误,你会证实这是一个错误,我会在github上打开一个问题。

1 个答案:

答案 0 :(得分:1)

问题似乎是对plt.contourf的调用(我并不严格理解为什么会这样)。但是,它是通过状态机接口调用的,因此两次都通过循环图到axe_2(因为那是plt.gca()返回的)。您正在绘制2x2全0阵列的轮廓,它(正确地)绘制为[0,0,1,1]处的蓝色框,这是您看到的蓝色边缘。

在3轴的情况下“正确”工作,因为pyplot认为最后的轴是当前轴。