【问题标题】:How to plot an array as if the indices i,j were the x,y coordinates?如何绘制一个数组,好像索引 i,j 是 x,y 坐标?
【发布时间】:2020-03-20 02:34:26
【问题描述】:

大家好,这里的第一个问题,正在寻找答案但找不到任何东西,我会尽力而为。

我目前正在研究计算物理领域的一个问题,我正在使用有限差分法对 Navier-Stokes 方程进行数值求解。这是我第一次使用 Python(使用带有 Python 3 的 Google Colaboratory notebook)。我正在求解二维平面中的点网格的方程。我创建了这个网格使用 np.arrays

import numpy as np
import matplotlib.pyplot as plt
N = 10
data = np.zeros((N,N))

然后对其进行操作。例如

for i in range(N):
    for j in range(N):
        data[i,j] = i

这使得数组的值随着索引i 而增加。但是,如果我现在使用

绘制我的数据数组
x = np.arange(N)
y = np.arange(N)

plt.contourf(x, y, data)
plt.colorbar()

示例结果:

它表明绘制的数据沿 y 轴增加,即使我对数组的操作应该使其沿 x 轴增加。 我注意到发生这种情况是因为数组 (i,j) 的索引与 x 轴和 y 轴的标准方向不同,但是我怎样才能像 i=xj=y 一样绘制我的数据数组?

【问题讨论】:

  • 你通过a.T 得到一个numpy 数组a 的转置。也许请注意,numpy 索引与数学矩阵表示法一致,第一维是行,第二维是列。所以也许当你开始做这一切的时候,考虑一下采用这个标准。
  • 跟进该评论。在您的情况下,您将拥有plt.contourf(x,y,data.T) 尽管我也鼓励您查看pcolormeshimshow

标签: python numpy matplotlib numpy-ndarray


【解决方案1】:

您可以使用 numpy 的 ndindex 函数根据形状获取索引,然后解压缩结果。

x,y=list(zip(*np.ndindex((N,N))))

数据是逐列的,可以用meshgrid获取。如果您对相同的操作感兴趣。您可以使用 meshgrid 将数据设为

dx,dy=np.meshgrid(np.arange(N),np.arange(N))

然后绘制 dy 以获得 x 轴的变化。

【讨论】:

    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2023-04-05
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多