首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于多个数据的Python 3D绘图

用于多个数据的Python 3D绘图
EN

Stack Overflow用户
提问于 2017-01-04 18:03:20
回答 1查看 1.1K关注 0票数 1

假设我有三只Python熊猫,DataFrames:

代码语言:javascript
复制
df_sale = pd.DataFrame([[20,30,10], [30,20,20], [20,40,40]], columns=list("ABC"))

    A   B   C
0   20  30  10
1   30  20  20
2   20  40  40

df_people = pd.DataFrame([[2,3,1], [3,2,2], [2,4,4]], columns=list("ABC"))

    A   B   C
0   2   3   1
1   3   2   2
2   2   4   4

df_department = pd.DataFrame([[1,2,1], [1,1,2], [2,1,1]], columns=list("ABC"))

    A   B   C
0   1   2   1
1   1   1   2
2   2   1   1

我如何在同一个地方用这三个数据绘制3D条形图?

我希望X轴是['A', 'B', 'C'],Y轴是dataframes ['df_sale', 'df_people', 'df_department']的名称,Z轴表示数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 23:56:01

你可以用matplotlib三维条形图

代码语言:javascript
复制
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

columns = ['A', 'B', 'C']
df_names = ['sale', 'people', 'department']
df = [pd.DataFrame([[20,30,10], [30,20,20], [20,40,40]], columns=columns), pd.DataFrame([[2,3,1], [3,2,2], [2,4,4]], columns=columns), pd.DataFrame([[1,2,1], [1,1,2], [2,1,1]], columns=columns)]

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

#make sure x and y axis get the right tick labels
plt.xticks([i for i in range(len(columns))], columns)
plt.yticks([i for i in range(len(df_names))], df_names)

#define a list for x positions
xs = list()
for i in range(len(df)):
    for j in range(len(columns)):
         xs.append(i + j * 0.1)

for c1, c in enumerate(['r', 'g', 'b']):
    ys = list()
    for i in range(len(columns)):
        ys.extend(df[c1].ix[:,i:i+1].unstack().tolist())
    cs = [c] * len(xs)    
    ax.bar(xs, ys, zs=c1, zdir='y', color=cs, alpha=0.5, width=0.1)

plt.show()

多色与 图例

代码语言:javascript
复制
import matplotlib
colors = ['r', 'g', 'b', 'c', 'm', 'y', '#eeefff', '#feefff', '#aeefff']
for c1 in range(3):
    ys = list()
    for i in range(len(columns)):
        ys.extend(df[c1].ix[:,i:i+1].unstack().tolist())
    ax.bar(xs, ys, zs=c1, zdir='y', color=colors, alpha=0.5, width=0.1)

legend = list()
for i, c in enumerate(colors):
    legend.append(matplotlib.patches.Patch(color=c, label='value {0} of column {1}'.format(i % 3, columns[i // 3])))
plt.legend(handles=legend, loc=4, bbox_to_anchor=(.9, 0), mode="expand")
plt.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41470416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档