Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要确认库错误吗_Python_Matplotlib_Color Mapping - Fatal编程技术网

Python 需要确认库错误吗

Python 需要确认库错误吗,python,matplotlib,color-mapping,Python,Matplotlib,Color Mapping,我是Python新手,即使我已经做了相当深入和长期的研究,我想在github上开始一个案例之前,我需要社区的确认 我正在绘制两个,但我使用颜色范围来表示矩阵值出于某种原因使用子图绘制最后一个子图中第一个绘图的背景,使用第一个mymapcolor(在我的例子中为蓝色)。如果在任何情况下覆盖set\u facecolor='gray'(即使我在打印后设置背景色)。我还发现,只有当matrix值大于0时,才会产生此错误请参见下面的图片(和图像描述)和代码 第二个子图上第一张图片的背景是蓝色的。 添加的

我是Python新手,即使我已经做了相当深入和长期的研究,我想在github上开始一个案例之前,我需要社区的确认

我正在绘制两个,但我使用颜色范围来表示矩阵值
出于某种原因使用子图绘制最后一个子图中第一个绘图的背景,使用第一个
mymap
color
(在我的例子中为蓝色)。如果在任何情况下覆盖
set\u facecolor='gray'
(即使我在打印后设置背景色)。我还发现,只有当
matrix
值大于0时,才会产生此错误
请参见下面的图片(和图像描述)和代码

第二个子图上第一张图片的背景是蓝色的。 添加的第三个子图没有数据,现在它是蓝色的,第二个子图的第一个正方形不是。

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


如果我没有犯任何愚蠢的错误,您将确认这是一个bug,我将在github上打开一个问题。

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


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

您能更清楚地说明您的问题是什么吗?更新的问题,我希望现在更清楚。我将我的代码简化为这个最小的示例,以便您不要阅读大量无关的代码,但是在我最初的项目中,我使用
plt.contourf
mpl.colorbar()
生成可映射的颜色级别差异。据我所知,这不是一个bug,不是吗?不,这不是bug,库按照它声称的方式正确地执行了您让它执行的操作;)使用
pcolor
并使边缘变厚(参见),而不是自己手工绘制矩形。是的,更仔细地阅读你正在做的事情(这是为了意义,而不是正确性),你正在重新发明几个轮子
pcolor
将为您完成颜色映射和矩形绘制。非常感谢,我期待使用此工具!
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()