【问题标题】:Not enough values to unpack in plt.pcolormesh没有足够的值在 plt.pcolormesh 中解压
【发布时间】:2021-07-16 14:29:41
【问题描述】:

我正在测试基于两个数组绘制彩色网格。为此,我首先计算网格前半部分的值,然后计算第二部分的值。我得到两个数组并将它们保存到一个文件中。我也在存储带有坐标的数组。

k1s1 = np.linspace(-1.0, 1.0, 11)
k2s1 = np.linspace(-1.0, 0.0, 11)
grid1 = np.zeros([len(k1s), len(k2s)])

for i, k1 in enumerate(k1s1):
    for j, k2 in enumerate(k2s1):
        grid1[i][j] = 1

with open('/content/drive/My Drive/Colab Notebooks/arraytest1.txt', 'w') as f:
    np.savetxt(f, grid1)

k2s2 = np.linspace(0.0, 1.0, 11)
grid2 = np.zeros([len(k1s1), len(k2s2)])

for i, k1 in enumerate(k1s1):
    for j, k2 in enumerate(k2s2):
        grid2[i][j] = 2

with open('/content/drive/My Drive/Colab Notebooks/arraytest2.txt', 'w') as f:
    np.savetxt(f, grid2)

with open('/content/drive/My Drive/Colab Notebooks/k1s1.txt', 'w') as f:
    np.savetxt(f, k1s1)
with open('/content/drive/My Drive/Colab Notebooks/k2s1.txt', 'w') as f:
    np.savetxt(f, k2s1)
with open('/content/drive/My Drive/Colab Notebooks/k2s2.txt', 'w') as f:
    np.savetxt(f, k2s2)

然后我从文件中提取这些数组并将它们连接起来。

with open('/content/drive/My Drive/Colab Notebooks/arraytest1.txt', 'r') as f:
    grid1 = np.loadtxt(f)
with open('/content/drive/My Drive/Colab Notebooks/arraytest2.txt', 'r') as f:
    grid2 = np.loadtxt(f)
with open('/content/drive/My Drive/Colab Notebooks/k1s1.txt', 'r') as f:
    k1s1n = np.loadtxt(f)
with open('/content/drive/My Drive/Colab Notebooks/k2s1.txt', 'r') as f:
    k2s1n = np.loadtxt(f)
with open('/content/drive/My Drive/Colab Notebooks/k2s2.txt', 'r') as f:
    k2s2n = np.loadtxt(f)

grid3 = np.append(grid1, grid2)

k1s3 = k1s1n
k2s3 = np.append(k2s1n, k2s2n)

然后我尝试使用生成的数组构建一个颜色网格。

plt.pcolormesh(k1s3, k2s3, grid3, cmap=plt.cm.get_cmap('jet'))
plt.axes().set_aspect('equal', adjustable='box')
plt.colorbar()

然后就行了

plt.pcolormesh(k1s3, k2s3, grid3, cmap=plt.cm.get_cmap('jet'))

出现这样的错误:

    Traceback (most recent call last)
<ipython-input-44-76ec1e216ce3> in <module>()
----> 1 plt.pcolormesh(k1s3, k2s3, grid3, cmap=plt.cm.get_cmap('jet'))
      2 plt.axes().set_aspect('equal', adjustable='box')
      3 plt.colorbar()

3 frames
/usr/local/lib/python3.7/dist-packages/matplotlib/pyplot.py in pcolormesh(alpha, norm, cmap, vmin, vmax, shading, antialiased, data, *args, **kwargs)
   2723         *args, alpha=alpha, norm=norm, cmap=cmap, vmin=vmin,
   2724         vmax=vmax, shading=shading, antialiased=antialiased,
-> 2725         **({"data": data} if data is not None else {}), **kwargs)
   2726     sci(__ret)
   2727     return __ret

/usr/local/lib/python3.7/dist-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
   1563     def inner(ax, *args, data=None, **kwargs):
   1564         if data is None:
-> 1565             return func(ax, *map(sanitize_sequence, args), **kwargs)
   1566 
   1567         bound = new_sig.bind(ax, *args, **kwargs)

/usr/local/lib/python3.7/dist-packages/matplotlib/axes/_axes.py in pcolormesh(self, alpha, norm, cmap, vmin, vmax, shading, antialiased, *args, **kwargs)
   6102         allmatch = (shading == 'gouraud')
   6103 
-> 6104         X, Y, C = self._pcolorargs('pcolormesh', *args, allmatch=allmatch)
   6105         Ny, Nx = X.shape
   6106         X = X.ravel()

/usr/local/lib/python3.7/dist-packages/matplotlib/axes/_axes.py in _pcolorargs(funcname, allmatch, *args)
   5678                 if isinstance(Y, np.ma.core.MaskedArray):
   5679                     Y = Y.data
-> 5680             nrows, ncols = C.shape
   5681         else:
   5682             raise TypeError(

ValueError: not enough values to unpack (expected 2, got 1)

虽然我检查了所有数组的所有维度。请告诉我为什么会这样以及如何解决?

【问题讨论】:

  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
  • 如果某些行给您错误,那么首先您应该检查变量中的内容,您可以为此使用标准print() - 即。 print( k1s3, len(k1s3), type(k1s3) ) 与其他变量相同。也许您的值错误,或者您需要具有 smae numer 元素的变量,但它们具有不同数量的元素。或者你可能需要在函数中使用命名参数——正确发送值——你应该在文档中检查它。

标签: python matplotlib google-colaboratory


【解决方案1】:

好的,我找到了问题并解决了。 当我使用np.append() 函数连接二维数组 grid1 和 grid2 时,一个数组将附加到另一个数组的末尾,从而产生一个大的一维数组。

为了在连接后得到一个二维数组,你需要使用np.concatenate()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2017-04-17
    • 2021-08-21
    • 2021-12-12
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多