如何从数据框绘制3D条形图

4

这是我的数据框(df)长这样:

hr    slope  value   
8      s_1     6     
10     s_1     2     
8      s_2     4     
10     s_2     8    

我想制作一个三维条形图,其中x轴为'hr',y轴为'value',z轴为'slopes'。
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()

我收到以下错误信息:

ValueError: shape mismatch: objects cannot be broadcast to a single shape

非常欢迎任何帮助,提前致谢

1个回答

2
< p > bar3d() 的文档可以在这里找到。 这里有关于它的解释。 官方演示可以在这里找到。

import matplotlib.pyplot as plt

xpos = [1, 2, 3]  # x coordinates of each bar
ypos = [0, 0, 0]  # y coordinates of each bar
zpos = [0, 0, 0]  # z coordinates of each bar
dx = [0.5, 0.5, 0.5]  # Width of each bar
dy = [0.5, 0.5, 0.5]  # Depth of each bar
dz = [5, 4, 7]        # Height of each bar

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

ax.bar3d(xpos,ypos,zpos,dx,dy,dz, color='b', alpha=0.5)

plt.show()

在此输入图像描述

你遇到这个错误的原因是 xpos、ypos、zpos、dx、dy、dz 的长度不同。此外,dz 的元素包含字符串。

以下是我如何复现您的示例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.read_csv('1.csv')

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[['hr', 'value']].values.ravel()

print(xpos)
print(ypos)
print(zpos)
print(dx)
print(dy)
print(dz) # [8 's_1' 6 10 's_1' 2 8 's_2' 4 10 's_2' 8]

print(len(xpos))  # 16
print(len(ypos))  # 16
print(len(zpos))  # 12
print(len(dx))    # 12
print(len(dy))    # 12
print(len(dz))    # 12

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

ax.bar3d(xpos,ypos,zpos,dx,dy,dz,color='b', alpha=0.5)

plt.show()

1.csv的内容如下:

hr,slope,value
8,s_1,6
10,s_1,2
8,s_2,4
10,s_2,8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接