Python 如何在matplotlib中使用pcolor绘制四边形面片?

Python 如何在matplotlib中使用pcolor绘制四边形面片?,python,matplotlib,patch,Python,Matplotlib,Patch,matplotlib中的pcolor()出现问题。我想画一个四边形的补丁。(它们有一个不规则的形状,但有4个角,并且不重叠)。 为了演示我的问题,这里有一个生成意外行为的最小代码 import numpy as np from matplotlib import pyplot as plt x = [0, 1] y = [0, 2] val = [[1]] xx, yy = np.meshgrid(x, y) fig, ax = plt.subplots(1, 2, figsize=[10,

matplotlib中的
pcolor()
出现问题。我想画一个四边形的补丁。(它们有一个不规则的形状,但有4个角,并且不重叠)。 为了演示我的问题,这里有一个生成意外行为的最小代码

import numpy as np
from matplotlib import pyplot as plt

x = [0, 1]
y = [0, 2]
val = [[1]]
xx, yy = np.meshgrid(x, y)

fig, ax = plt.subplots(1, 2, figsize=[10, 10])

ax = plt.subplot(2, 1, 1)
yy[1,0] =2.9
#displays a 1x2 rectangle
ax.pcolor(xx, yy, val, edgecolors='black')

ax = plt.subplot(2, 1, 2)
yy[1,0] =3
#displays the expected 1x3(x2) trapezoid
ax.pcolor(xx, yy, val, edgecolors='black')

plt.show()
(我们期望高度为2.9的梯形,但它输出2x1的矩形。高度为3的第二个示例可以正常工作)

这是输出

此外,使用
pcolormesh
,也会出现相同的问题


这是一个bug还是我只是瞎了眼?

问题是
xx
的数据类型,
yy
int64
。因此,当您尝试赋值
yy[1,0]=2.9
时,它被转换为
int
,结果是
yy[1,0]==2

解决方案是将数据类型更改为
float
,最简单的方法是使用
numpy.ndarray.astype

将numpy导入为np
从matplotlib导入pyplot作为plt
x=[0,1]
y=[0,2]
val=[[1]]
xx,yy=np.meshgrid(x,y)
xx=xx.astype('float64')
yy=yy.astype('float64')
图,ax=plt.子批次(1,2,figsize=[10,10])
ax=plt.子批次(2,1,1)
yy[1,0]=2.9
X.P颜色(xx、yy、val、edgecolors='黑色〕
ax=plt.子批次(2,1,2)
yy[1,0]=3
X.P颜色(xx、yy、val、edgecolors='黑色〕
这将产生预期的结果


您能详细描述一下结果中的意外情况吗?我添加了输出