【问题标题】:How to Add Zeros to Second Dimension of Array in Python?如何在 Python 中将零添加到数组的第二维?
【发布时间】:2020-08-28 15:15:09
【问题描述】:

我有一个形状为 (1111,) 的纬度数组,并且正在尝试使用 matplotlib pcolormesh,但由于我的数组不是二维的,所以我收到了错误 not enough values to unpack (expected 2, got 1)。有没有办法可以将 1111 个零添加到我的纬度数组的第二维?下面是导致错误的代码。

import matplotlib.cm as cm

cmap = cm.get_cmap('BrBG')

cs = plt.pcolormesh(longitude.values, latitude.values, dens, cmap = cmap)

plt.title('Satellite Trajectory')
plt.xlabel('Longitude')
plt.ylabel('Latitude')

plt.savefig('Satellite Trajectory', dpi=200, bbox_inches='tight', pad_inches=0.025)

cb = plt.colorbar(cs, orientation = 'vertical')
cb.set_label(r'Density')

这些是我的 Pandas 纬度数组的前几行:

0       50.224832
1       50.536422
2       50.847827
3       51.159044
4       51.470068
5       51.780895
6       52.091521
7       52.401941
8       52.712151
9       53.022145
10      53.331919

我对经度数组也有同样的问题。以下是一些经度值供参考。

0       108.873007
1       108.989510
2       109.107829
3       109.228010
4       109.350097
5       109.474136
6       109.600176
7       109.728265
8       109.858455
9       109.990798
10      110.125348

显示的另一个阵列是 dens,它是一个密度阵列,形状为 (5, 91, 181)。这里有几个值供参考:

[6.042968853864891e-12, 6.042894605467602e-12, 6.042777396826408e-12, 6.042616263531836e-12, 6.042410211830538e-12, 6.042158216350682e-12, 6.0361190688090634e-12, 6.038107492458882e-12, 6.039984972063208e-12, 6.041748879958635e-12, 6.030375732644546e-12, 6.027898597657696e-12, 6.0251851962303345e-12, 6.0390021800772395e-12, 6.035096323493865e-12, 6.030879347062723e-12, 6.026343416350273e-12, 6.021480432118012e-12, 6.01628202402901e-12, 6.042274874237314e-12, 6.040409269411221e-1

我只是不知道如何执行 pcolormesh 而不会出现以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-54-685815191229> in <module>
      7 
      8 
----> 9 cs = plt.pcolormesh(longitude.values, latitude.values, dens, cmap = cmap)
     10 
     11 plt.title('Satellite Trajectory')

~\Anaconda3\lib\site-packages\matplotlib\pyplot.py in pcolormesh(alpha, norm, cmap, vmin, vmax, shading, antialiased, data, *args, **kwargs)
   2771         *args, alpha=alpha, norm=norm, cmap=cmap, vmin=vmin,
   2772         vmax=vmax, shading=shading, antialiased=antialiased,
-> 2773         **({"data": data} if data is not None else {}), **kwargs)
   2774     sci(__ret)
   2775     return __ret

~\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs)
   1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
   1809                         RuntimeWarning, stacklevel=2)
-> 1810             return func(ax, *args, **kwargs)
   1811 
   1812         inner.__doc__ = _add_data_doc(inner.__doc__,

~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in pcolormesh(self, alpha, norm, cmap, vmin, vmax, shading, antialiased, *args, **kwargs)
   5980         allmatch = (shading == 'gouraud')
   5981 
-> 5982         X, Y, C = self._pcolorargs('pcolormesh', *args, allmatch=allmatch)
   5983         Ny, Nx = X.shape
   5984         X = X.ravel()

~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in _pcolorargs(funcname, allmatch, *args)
   5547                 if isinstance(Y, np.ma.core.MaskedArray):
   5548                     Y = Y.data
-> 5549             numRows, numCols = C.shape
   5550         else:
   5551             raise TypeError(

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

我假设这是因为经度和纬度数组形状,所以我请求帮助填充第二维,所以我有一个数组 (1111,1111) 而不是 (1111,)。

如果您有其他建议,我很乐意提供帮助。我是 Python 新手。

【问题讨论】:

    标签: python arrays matplotlib dimension


    【解决方案1】:

    在这种情况下使用 for 循环或列表推导式。

    latitude = [50.224832, 50.536422, 50.847827, 51.159044, 51.470068]
    longitude = [108.873007, 108.989510, 109.107829, 109.228010, 109.350097]
    density = [.15,.25,.35,.45,.55]
    
    output = [(latitude[i], longitude[i], density[i]) for i in range(len(latitude))]
    
    print(output)
    
    [(50.224832, 108.873007, 0.15), (50.536422, 108.98951, 0.25), (50.847827, 109.107829, 0.35), (51.159044, 109.22801, 0.45), (51.470068, 109.350097, 0.55)]
    

    【讨论】:

    • 我想在 x 轴上绘制经度,在 y 轴上绘制纬度,并让密度​​显示它们值的颜色。所以我将有三个用于绘图的数组,而不仅仅是一个。
    • 嗯,好的。所以要澄清。您正在寻找像“(纬度,经度,密度)”这样的输出?这是正确的吗?
    • 是的!因此,在 pcolormesh 中,我想要 x 和 y 轴的经度、纬度,然后将密度显示为颜色的密度。但是,我不认为我的纬度和经度数组是 2D 的,所以我遇到了错误。
    • 我已经更新了我的答案。让我知道这是否是您正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2014-02-22
    • 2012-01-01
    相关资源
    最近更新 更多