matplotlib中的pcolor

wvmv3b1j  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(77)

我在matplotlib中使用pcolor。我使用一个三维数组作为输入。我想安排第三个数组以对数刻度显示。是否有选项可以执行此操作?如果我在绘制第三个数组之前对它取对数,则sub1值变为负值,pcolor不再起作用。

n8ghc7c1

n8ghc7c11#

假设第三维的数据都是正的(因为负数的对数是未定义的),那么使用pcolor绘制这个图应该没有任何问题(注意:Matplotlib文档推荐使用pcolormesh而不是pcolor)。在这一点上,我将提请注意帖子的编辑历史,其中显示“sub one”用于表示“subzero”,这将产生NaN s;我稍后再谈。正如当前版本所说,小于1(大于0)的数字的对数是负数。您提到使用pcolor绘制负数时存在问题,但这应该不会影响任何内容。
假设是正数,下面的代码应该可以工作。

import numpy as np
import matplotlib.pyplot as plt

plt.close("all")

N = 20
x = np.linspace(0, 1, N)
y = np.linspace(0, 1, N)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y + 0.1

data = np.stack((X, Y, Z), axis=0)

fig, ax = plt.subplots()
p = ax.pcolor(data[0], data[1], np.log(data[2]))
fig.colorbar(p, ax=ax, label="ln(z)")
ax.set_xlabel("x")
ax.set_ylabel("y")

如果我们考虑原文,使用np.log作为负数将产生NaN s,如前所述。将我们的Z定义切换到Z = X**2 - Y + 0.1,我们将得到一个警告。

RuntimeWarning: invalid value encountered in log
  p = ax.pcolor(data[0], data[1], np.log(data[2]))

这仍然会生成一个图,但不会绘制数据为NaN的位置。

版本:

  • 简体中文(zh_cn)
  • Matplotlib:3.7.0
  • NumPy:1.23.5

相关问题