Невозможно построить 3D-бар, используйте matplotlib - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу построить 3D-бар, используя matplotlib.У меня есть такой фрейм данных

In[1]: mf
Out[1]:     1           2          4
        0           
       6N   45.238806   104.102564  16.804965
      12S   25.597015   95.128205   13.156028
      18S   29.689055   76.730769   17.078014
       7S   0.000000    156.602564  20.106383
      12S   25.597015   95.128205   13.156028
      25S   0.000000    151.217949  16.929078
       2S   4.962687    49.358974   32.517730
      14N   0.000000    0.000000    33.386525
      24S   10.447761   71.346154   25.343972

Я хочу построить 3D-бар в соответствующей позиции фрейма данных.Мой код выглядит так:

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

fig = plt.figure()
ax1 = fig.add_subplot(111, projection='3d')

xpos = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9]
ypos = [3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1]
zpos = np.zeros(27)

dx = np.ones(27)
dy = np.ones(27)
# to reshape my dataframe to a np vector
nf = mf.values
dz = np.reshape(nf,(1,27))

ax1.bar3d(xpos, ypos, zpos, dx,dy,dz, color="#00ceaa")

но я получаю эту ошибку:

     15 dz = np.reshape(nf,(1,27))
     16 dz
---> 17 ax1.bar3d(xpos, ypos, zpos, dx,dy,dz, color="#00ceaa") 

   bar3d(self, x, y, z, dx, dy, dz, color, zsort, shade, *args, **kwargs)
   2526 
   2527         if shade:
-> 2528             normals = self._generate_normals(polys)
   2529             sfacecolors = self._shade_colors(facecolors,    normals)
   in _generate_normals(self, polygons)
   1771             v1 = np.array(verts[0]) - np.array(verts[1])
   1772             v2 = np.array(verts[2]) - np.array(verts[0])
-> 1773             normals.append(np.cross(v1, v2))
   1774         return normals
   in cross(a, b, axisa, axisb, axisc, axis)
   1716            "(dimension must be 2 or 3)")
   1717     if a.shape[-1] not in (2, 3) or b.shape[-1] not in (2, 3):
-> 1718         raise ValueError(msg)
   1719 
   1720     # Create the output array

  ValueError: incompatible dimensions for cross product
  (dimension must be 2 or 3)

Где мой код неправильный, я не думал, большое спасибо.

1 Ответ

0 голосов
/ 30 апреля 2019

Вам необходимо изменить ваши значения df.values ​​следующим образом:

dz = np.reshape(nf,(27))

, чтобы все массивы имели одинаковую форму (т. Е. (27,), отметьте dx.shape, dy.shape, z.shape,...).Также обратите внимание, что (хотя это и не обязательно) рекомендуется объявить списки xpos и ypos как np.array, например:

xpos = np.array([1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...