This is how my df looks like:
hr slope value
8 s_1 6
10 s_1 2
8 s_2 4
10 s_2 8
I would like to make a 3D bar plot with 'hr' in the x-axis, 'value' in the y-axis, and 'slopes' in the z-axis.
xpos = df['hr']
ypos = df['value']
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos=np.zeros(df.shape).flatten()
dx=0.5 * np.ones_like(zpos)
dy=0.5 * np.ones_like(zpos)
dz=df.values.ravel()
ax.bar3d(xpos,ypos,zpos,dx,dy,dz,color='b', alpha=0.5)
plt.show()
I get the following error messages:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Any help is very welcome, thank you in advance
The documentation of
bar3d()
can be found at https://matplotlib.org/mpl_toolkits/mplot3d/api.html#mpl_toolkits.mplot3d.axes3d.Axes3D.bar3d. Here is an explanation of it. Official demo can be found at https://matplotlib.org/3.1.1/gallery/mplot3d/3d_bars.html.The problem why you got this error is that the length of
xpos, ypos, zpos, dx, dy, dz
is not the same. Besides, the element ofdz
contains string.Here is how I reproduce your example
The content of
1.csv
is