我有这个数据框:
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和y必须是长度相同的一维数组
但是,每当我检查x和y的len,.size,.shape和.ndim时,它们都是长度相同的一维数组。有谁知道为什么我会收到此错误?
x.shape也返回(28L),y.shape也返回(28L)
答案 0 :(得分:1)
我遇到了同样的问题。我传入了两个相同长度的 numpy 数组,并得到了“必须是相同长度的一维数组”错误。查看 type(array),我传入的数组是 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')
答案 1 :(得分:0)
好吧,我找到了一种使其工作的方法。真的不知道为什么它不能按原来的方式工作,因为我正在馈送tricontourf 1D数组,但是基本上我将数据打包在list()函数中只是为了加倍确保它是1D数组。这使它起作用。这是代码:
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()