Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于多个数据帧的Python 3D绘图_Python_Plot_Dataframe_3d - Fatal编程技术网

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

用于多个数据帧的Python 3D绘图,python,plot,dataframe,3d,Python,Plot,Dataframe,3d,假设我有三个Python数据帧: 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

假设我有三个Python数据帧:

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
如何在同一位置绘制具有所有这3个数据帧的三维条形图

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

您可以使用


多色和


嗨,Max,谢谢你的回答,这解决了我的大部分问题。但是我想知道如果索引名不是数字[0,1,2,3…],会发生什么。df[c1].ix[:,i:i+1]此部件仅适用于数字。还有,有没有办法用不同的颜色将这三个条涂在一起?e、 g.这些条属于“A”、“销售”类。如果我们想把它们涂成红色、绿色和蓝色呢。因为它们可能代表时间(一月、二月、三月)。同样的颜色也适用于人和部门。最后,我们为颜色添加了图例。这可行吗?谢谢pandas ix文档:“一个主要基于标签位置的索引器,具有整数位置回退”,即,您很好。
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()
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()