【问题标题】:ValueError: need more than 1 value to unpack with matplotlibValueError:需要超过 1 个值才能使用 matplotlib 解包
【发布时间】:2019-07-31 04:45:43
【问题描述】:

我有一个 3D 数组,想使用 plt.pcolormesh 制作一个 2D 绘图,但我不断收到错误

ValueError: 需要超过 1 个值才能解压。

我的xy 数组的长度都是59,z 数组的长度是59*59=3481,因为xy 现在是一个矩阵。

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

points = [(54.5, 17.041667, 31.993), (54.5, 17.083333, 31.911), (54.458333, 17.041667, 31.945), (54.458333, 17.083333, 31.866)]
points = sorted(points)               # order points by x, then by y
(x1, y1, q11), (_x1, y2, q12), (x2, _y1, q21), (_x2, _y2, q22) = points

interp2d=[]

nums = np.linspace(x1, x2, num = 60, endpoint=True)
numms = np.linspace(y1, y2, num = 60, endpoint=True)

X, Y = np.meshgrid(nums[:-1], numms[:-1], indexing='xy')

for i in range(len(nums)-1):
    for j in range(len(numms)-1):
        x=nums[i]
        y=numms[j]

            interp = (q11 * (x2 - x) * (y2 - y) +
        q21 * (x - x1) * (y2 - y) +
        q12 * (x2 - x) * (y - y1) +
        q22 * (x - x1) * (y - y1)
       ) / ((x2 - x1) * (y2 - y1) + 0.0)

        interp2d.append(interp)

interp2d = np.asarray(interp2d)     
fig, (ax1, ax2) = plt.subplots(1,2, sharex=True)    

ax2.pcolormesh(X,Y,interp2d, cmap=plt.cm.BuPu_r)
cbar = plt.colorbar()
plt.show()

【问题讨论】:

  • 不要显示所有代码,只显示相关位。
  • 我猜你只需要interp2d.reshape(len(nums)-1, len(numms)-1)(在np.asarray(interp2d) 之后)让它像你的XY 一样成为2D,但我现在无法测试。
  • 感谢@Engineero。解决了它

标签: python matplotlib


【解决方案1】:

interp2d 的值应该是二维数组。所以,你可能想调查一下。其余代码与您提出的问题无关。所以,祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多