matplotlib 中的 pcolor

发布于 2024-12-09 18:01:18 字数 116 浏览 0 评论 0原文

我在 matplotlib 中使用 pcolor。我使用三维数组作为输入。我想安排第三个数组以对数刻度显示。有没有办法做到这一点?如果我在绘制第三个数组之前对其取对数,则子值将变为负值,并且 pcolor 不再起作用。

I am using pcolor in matplotlib. I use a three dimensional array as the input. I want to arrange the third array to be displayed in a log scale. Is there an option to do this? If I take a logarithm of the third array before plotting it, the sub one values become negative and pcolor no longer works.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

莫相离 2024-12-16 18:01:18

假设你的第三个维度的数据都是正数(因为负数的对数未定义),那么使用 pcolor 绘制它应该不会有任何问题(注意:Matplotlib 文档建议使用 pcolormesh 而不是 pcolor)。此时,我将提请注意帖子的编辑历史记录,其中显示“sub one”过去常说“subzero”,这会产生 NaN;我稍后会解决这个问题。正如当前版本所说,小于 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,如前所述。将我们的 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 的位置。

版本

  • Python:3.10.9
  • Matplotlib:3.7.0
  • NumPy:1.23.5

Assuming the data of your third dimension are all positive (since the log of a negative number is undefined), then you should not have any issues plotting this using pcolor (note: the Matplotlib documentation recommends pcolormesh rather than pcolor). At this point, I'll call attention to the post's edit history which shows that "sub one" used to say "subzero", which would produce NaNs; I will address this later. As the current version says, the logarithm of a number less than 1 (and greater than 0) is negative. You mention having an issue plotting negative numbers using pcolor, but that should not affect anything.

Assuming positive numbers, the code below should work.

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")

If we take instead consider the original text, using np.log for the negative numbers will produce NaNs, as mentioned earlier. Switching our Z definition to Z = X**2 - Y + 0.1, we will get a warning.

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

This will still produce a plot, but the locations where the data are NaN will not be plotted.

Versions:

  • Python: 3.10.9
  • Matplotlib: 3.7.0
  • NumPy: 1.23.5
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文