【问题标题】:How can I plot quadrilateral patches with pcolor in matplotlib?如何在 matplotlib 中使用 pcolor 绘制四边形补丁?
【发布时间】:2020-04-01 09:21:47
【问题描述】:

我在 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,也会出现同样的问题。

这是一个错误还是我只是瞎了眼?

【问题讨论】:

  • 您能否详细描述一下结果的意外之处?
  • 我添加了输出

标签: python matplotlib patch


【解决方案1】:

问题是xxyy的数据类型是int64。因此,当您尝试分配 yy[1, 0] = 2.9 时,它会被强制转换为 int,从而产生 yy[1, 0] == 2

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

import numpy as np
from matplotlib import pyplot as plt

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

xx = xx.astype('float64')
yy = yy.astype('float64')

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

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

ax = plt.subplot(2, 1, 2)
yy[1,0] = 3
ax.pcolor(xx, yy, val, edgecolors='black')

这将给出预期的结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多