2017-06-14 203 views
2

我使用的是熊猫和matplotlib尝试从画面复制此图:绘制大熊猫据帧两组

Tableau Graph

到目前为止,我有这样的代码:

group = df.groupby(["Region","Rep"]).sum() 
total_price = group["Total Price"].groupby(level=0, group_keys=False) 
total_price.nlargest(5).plot(kind="bar") 

哪生成此图表:

enter image description here

它可以正确分组数据,但可以按照Tableau的显示方式对它进行分组吗?

回答

2

您可以使用各自的matplotlib方法(ax.textax.axhline)创建一些行和标签。

import pandas as pd 
import numpy as np; np.random.seed(5) 
import matplotlib.pyplot as plt 

a = ["West"]*25+ ["Central"]*10+ ["East"]*10 
b = ["Mattz","McDon","Jeffs","Warf","Utter"]*5 + ["Susanne","Lokomop"]*5 + ["Richie","Florence"]*5 
c = np.random.randint(5,55, size=len(a)) 
df=pd.DataFrame({"Region":a, "Rep":b, "Total Price":c}) 


group = df.groupby(["Region","Rep"]).sum() 
total_price = group["Total Price"].groupby(level=0, group_keys=False) 

gtp = total_price.nlargest(5) 
ax = gtp.plot(kind="bar") 

#draw lines and titles 
count = gtp.groupby("Region").count() 
cum = np.cumsum(count) 
for i in range(len(count)): 
    title = count.index.values[i] 
    ax.axvline(cum[i]-.5, lw=0.8, color="k") 
    ax.text(cum[i]-(count[i]+1)/2., 1.02, title, ha="center", 
      transform=ax.get_xaxis_transform()) 

# shorten xticklabels 
ax.set_xticklabels([l.get_text().split(", ")[1][:-1] for l in ax.get_xticklabels()]) 

plt.show() 

enter image description here

+0

这实在是太真棒!谢谢!现在要真正了解并了解它在做什么。 :) – Jon