Getting 'ValueError: x and y must be 1D arrays of the same length' when they are in fact 1D arrays of same length

Getting 'ValueError: x and y must be 1D arrays of the same length' when they are in fact 1D arrays of same length

我有这个数据框:

    key variable    value
0   0.25    -0.2    606623.455859
1   0.27    -0.2    621462.029200
2   0.30    -0.2    640299.078053
3   0.33    -0.2    653686.910706
4   0.35    -0.2    659278.593742
5   0.37    -0.2    665684.466383
6   0.40    -0.2    671975.695814
7   0.25    0   530091.733402
8   0.27    0   542501.852937
9   0.30    0   557799.179433
10  0.33    0   571140.149887
11  0.35    0   575117.783803
12  0.37    0   582709.048163
13  0.40    0   588168.965913
14  0.25    0.2 466275.721535
15  0.27    0.2 478678.452615
16  0.30    0.2 492749.041489
17  0.33    0.2 500792.917910
18  0.35    0.2 503620.638204
19  0.37    0.2 507884.996510
20  0.40    0.2 512504.976664
21  0.25    0.5 351579.595889
22  0.27    0.5 359555.855803
23  0.30    0.5 368924.362358
24  0.33    0.5 375069.238800
25  0.35    0.5 377847.414729
26  0.37    0.5 381146.573247
27  0.40    0.5 383836.933547

我正在尝试使用此数据框和以下代码制作等高线图:

x = df['key'].values
y = df['variable'].values
z = df['value'].values
plt.tricontourf(x, y, z, colors='k')

我不断收到此错误:

ValueError: x and y must be 1D arrays of the same length

但是每当我检查 x 和 y 的 len、.size、.shape 和 .ndim 时,它们都是相同长度的一维数组。有谁知道为什么我会得到这个错误?

x.shapereturns(28L,)和y.shapereturns(28L,)还有

好吧,我找到了让它工作的方法。真的不确定为什么它不能以原来的方式工作,因为我正在提供 tricontourf 一维数组,但基本上我将数据包装在 list() 函数中只是为了双重确保它是一维数组。这使它起作用了。这是代码:

x = df_2020_pivot['key'].values
y = df_2020_pivot['variable'].values
z = df_2020_pivot['value'].values
plt.tricontourf(list(x), list(y), list(z))

plt.show()

And this is what it produced

我遇到了同样的问题。我传入了两个相同长度的 numpy 数组,得到了 'must be 1D arrays of same length' 错误。查看类型(数组),我传入的数组是 numpy.ndarrays。我使用 array.tolist() 将它们变成简单的 (1D) 列表,这为我消除了错误。如上所述包装在 list() 函数中也有效。

x = df['key'].values.tolist()
y = df['variable'].values.tolist()
z = df['value'].values
plt.tricontourf(x, y, z, colors='k')