如何使用 Matplotlib 在 python 中定义和绘制 10*10 数组?

how can I define and plot an 10*10 array in python with Matplotlib?

我对 Python Matplot 很陌生。我正在尝试绘制一个 3d 条形图,其中条形图的高度为 z,条形图的位置为我数组的 x、y。

这是我的数据示例,我有一个 10*10 数组:

data = np.array([[0.1729,0.8658,0.9283,0.9381,0.9535,1.0000,1.0000,0.9999,0.9999,1.0000],
[-0.0430,0.3109,0.2788,0.5846,0.5369,0.5717,0.6357,0.5619,0.5866,0.6587],
[-0.2228,0.3427,0.1842,0.2106,0.4398,0.3896,0.4687,0.5749,0.4684,0.5484],
[0.0011,0.2899,0.1854,0.1040,0.3513,0.3863,0.3971,0.4485,0.2514,0.4946],
[-0.0096,0.0630,0.1564,-0.0077,0.0825,0.1637,0.2627,0.4800,0.3931,0.3244],
[0.0134,0.1198,0.3339,0.1243,-0.0864,0.4048,0.1996,0.3988,0.1970,0.5248],
[-0.0153,0.2806,0.1926,0.1918,0.0860,0.1054,0.3202,0.3063,0.2644,0.3791],
[-0.1118,0.3065,0.1396,0.0949,0.3459,0.1168,0.3730,0.0741,0.3518,0.2150],
[0.1022,0.3144,-0.1165,0.0509,0.1462,0.3265,0.2087,0.2549,0.3914,0.2683],
[-0.0083,-0.0228,0.0721,0.1086,0.2400,0.1899,0.0922,0.1006,0.2430,0.2768]])

我正在使用以下代码生成 3d 条形图:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = Axes3D(fig)

xpos = np.arange(data.shape[0])
ypos = np.arange(data.shape[1])
zpos = data

xposM, yposM = np.meshgrid(xpos, ypos, copy=False)

dx=0.5
dy=0.5
dz=zpos

ax1.bar3d(xposM.ravel(), yposM.ravel(), dz, dx, dy, dz)
plt.show()

但我收到此错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有人知道我的代码有什么问题吗?

您的代码有两个问题。

1:zpos不应该是=data;这是您遇到的主要问题。

2:您应该(可能)将 bar3d 称为 ax1.bar3d(xposM.ravel(), yposM.ravel(), zpos, dx, dy, dz)。就目前而言,您正在定位您的钢筋,使它们的底座位于它们应该去的地方。也就是说,高度为 3 的条将从 z=3 开始并到达 z=6,而高度为 -2.1 的条将从 z=-2.1 开始。

关于第一期,xpos 和ypos 的形状是(100,),而data 的形状是(10,10)。您需要它们具有相同的尺寸,因此我建议包括 zpos = np.zeros(len(data.ravel()))。这也意味着您需要设置 dz = data.ravel().