python - 在 matplotlib 中使用 3D 数据生成热图

标签 python numpy matplotlib visualization

我有一个返回三个列表的函数 returnValuesAtTime - x_valsy_valsswe_vals。所有三个列表的长度相同,swe_vals 中的每个元素对应于 x_vals 中的 x-valuey-value 来自 y_vals。我希望生成一个带有图例的热图,该图例使用 (x,y) 坐标和 swe_vals 作为强度。

我写了下面的代码:

def plotValuesAtTimeMap(t):
    x_vals,y_vals,swe_vals=returnValuesAtTime(t)
    x_points=len(x_vals)
    y_points=len(y_vals)
    xx=np.linspace(x_vals[0],x_vals[-1],x_points)
    yy=np.linspace(y_vals[0],y_vals[-1],y_points)
    fig,ax=plt.subplots()
    im=ax.pcolormesh(xx,yy,z)
    fig.colorbar(im)
    ax.axis('tight')
    plt.show()

使用 returnValuesAtTime(t) 获得三个列表后,我将计算 x_valsy_vals 的长度。然后我使用这些生成 x 和 y 方向的间距,限制是 x_valsy_vals 的第一个和最后一个元素。然后我尝试生成 colormesh。但这给了我一个没有值的空 colormesh

可能出了什么问题?使用 3D numpy 数组而不是三个列表可以解决问题吗?

每个列表的前 10 个元素是:

x_vals[0:10]

[439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893,
 439936.86573189893]

y_vals[0:10]

[4514018.2797159087,
 4513898.2797159087,
 4513778.2797159087,
 4513658.2797159087,
 4513538.2797159087,
 4513418.2797159087,
 4513298.2797159087,
 4513178.2797159087,
 4513058.2797159087,
 4512938.2797159087]

swe_vals[0:10]

[2.7520323,
 2.7456229,
 2.7456021,
 2.745455,
 2.7478349,
 2.7445269,
 2.7484877,
 2.7524617,
 2.75491,
 2.7509627]

编辑:

我添加了一个散点图,显示下面的 (x,y) 网格范围:

enter image description here

x 和 y 值在列表中,每个长度为 6804。每个 (x,y) 点在单独的列表中都有一个对应的 z 值,该列表的长度也是 6804。为了阐明我希望实现的目标,我想生成一个类似热图的绘图,其中 z 轴的大小由绘图上每个网格的颜色表示。如下所示:

enter image description here

在示例图中,所有 z 值都相同。所以整个网格空间的颜色是相同的。

使用新的结果情节进行编辑(根据成员 CT Zhu 的建议):

enter image description here

最佳答案

看起来如果将 x, y, z reshape 为方阵,你可以做一个 contourf情节:

In [7]:X
Out[7]:
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

In [8]:Y
Out[8]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
       [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
       [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
       [8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
       [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]])

plt.contourf(X,Y,np.random.random((10,10))) #reshape Z too!
plt.colorbar()

enter image description here

关于python - 在 matplotlib 中使用 3D 数据生成热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22872061/

相关文章:

python - 使用请求填写表单并检索结果

python - python 中 scipy.signal.medfilt2d 背后的概念

python - Pip 正在尝试构建 numpy 而不是在 M1 Mac 上使用预构建的版本

python - python 中的曲线拟合

python - 使用类列表作为 django_tables2 中表类的模型

python - 寻找完美的正方形

python - 任何用于并行和分布式任务的 python 库?

python - 将 np.arrays 分类为重复项

python - 如何将 unicode 字体加载到 matplotlib 中?

python - Matplotlib set_data xdata 和 ydata must be same length 错误