Python 如何从dataframe生成三维条形图
我的df是这样的:Python 如何从dataframe生成三维条形图,python,matplotlib,3d,bar-chart,Python,Matplotlib,3d,Bar Chart,我的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) xpo
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
欢迎任何帮助,
提前感谢有关
bar3d()
的文档,请访问。这是一种解释。官方演示可在以下网址找到:
导入matplotlib.pyplot作为plt
xpos=[1,2,3]#每个条的x坐标
ypos=[0,0,0]#每个条的y坐标
zpos=[0,0,0]#每个条的z坐标
dx=[0.5,0.5,0.5]#每根钢筋的宽度
dy=[0.5,0.5,0.5]#每根钢筋的深度
dz=[5,4,7]#每个杆的高度
图=plt.图()
ax=图添加_子图(111,投影='3d')
ax.bar3d(xpos、ypos、zpos、dx、dy、dz、color='b',alpha=0.5)
plt.show()
出现此错误的原因是xpo、ypos、zpos、dx、dy、dz的长度不同。此外,dz
的元素包含字符串
下面是我如何重现你的例子
导入matplotlib.pyplot作为plt
作为pd进口熊猫
将numpy作为np导入
df=pd.read\u csv('1.csv')
xpos=df['hr']
ypos=df[“值”]
xpos,ypos=np.meshgrid(xpos+0.25,ypos+0.25)
xpos=xpos.flatte()
ypos=ypos.flatten()
zpos=np.zero(df.shape).flatten()
dx=0.5*np.类(zpos)
dy=0.5*np.类(zpos)
dz=df[['hr','value']].values.ravel()
打印(xpos)
打印(ypos)
打印(zpos)
打印(dx)
打印(dy)
印刷(dz)#[8's_1'6 10's_1'2 8's_2'4 10's_2'8]
打印(len(xpos))#16
打印(len(ypos))#16
打印(len(zpos))#12
打印(len(dx))#12
打印(len(dy))#12
打印(len(dz))#12
图=plt.图()
ax=图添加_子图(111,投影='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