Python 如何在matplotlib中使用pcolor绘制四边形面片?
matplotlib中的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,
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='黑色〕
这将产生预期的结果
您能详细描述一下结果中的意外情况吗?我添加了输出