2017-04-20 77 views
0
import matplotlib.pyplot as plt 
import seaborn as sns 

rankings_by_age = star_wars.groupby("Age").agg(np.mean).iloc[:,8:] 

age_first = rankings_by_age.iloc[0, :].values 
age_second = rankings_by_age.iloc[1, :].values 
age_third = rankings_by_age.iloc[2, :].values 
age_fourth = rankings_by_age.iloc[3, :].values 

fig, ax = plt.subplots(figsize=(12, 9)) 

ind = np.arange(6) 
width = 0.2 

rects_1 = ax.bar(ind, age_first, width, color=(114/255,158/255,206/255), 
alpha=.8) 
rects_2 = ax.bar(ind+width, age_second, width, color= 
(255/255,158/255,74/255), alpha=.8) 
rects_3 = ax.bar(ind+2*width, age_third, width, color= 
(103/255,191/255,92/255), alpha=.8) 
rects_4 = ax.bar(ind+3*width, age_fourth, width, color= 
(237/255,102/255,93/255), alpha=.8) 

ax.set_title("Star Wars Film Rankings by Age") 
ax.set_ylabel("Ranking") 
ax.set_xticks(ind) 
ax.set_xticklabels(titles, rotation=45) 

ax.tick_params(top='off', right='off', left='off', bottom='off') 
ax.spines['top'].set_visible(False) 
ax.spines['right'].set_visible(False) 

ax.legend((rects_1[0], rects_2[0], rects_3[0], rects_4[0]), ('18-29', '30- 
44', '45-60', '> 60'), title="Age") 

plt.show() 

enter image description here如何使用seaborn绘制此图?

我想复制使用seaborn这个情节,但我不知道如何去为每个类别绘制多条。我了解如何一次使用一个年龄组,但每个年龄段获得多个酒吧似乎都很棘手。任何帮助,将不胜感激。

+1

你会得到更好的反应,如果你(1)显示您的最佳的工作Seaborn码,和(2)显示在做多吧你最好的尝试失败。这可以将修正减少到一两行。 – Prune

+1

这个问题还不清楚。问题中的代码(除了不可重现,请参阅[mcve])已经给出了预期的结果。那么在这里“使用海豹”究竟意味着什么? – ImportanceOfBeingErnest

+1

这些排名也很糟糕! – mwaskom

回答

1

通过引用seaborn bar plot documentation,您可以使用hue参数来确定条应该按哪个数据帧列分组。

import seaborn.apionly as sns 
import matplotlib.pyplot as plt 

df = sns.load_dataset("tips") 
ax = sns.barplot(data=df, x="day", y="total_bill", hue="sex") 

plt.show() 

enter image description here

+0

嗨,对不起,不好意思。我明白'色调'参数,但我想知道是否可以每天绘制多列。例如,如果我想每天绘制'total_bill'和'total_tip'(因为它们共享相同的单位,所以可以使用相同的y轴)。所以,在'hue'参数设置为'sex'的情况下,上例中每天的酒吧总数为4。 – apkim221

+0

如果你想使用'sns.barplot'函数,你需要重新组织数据,以便有一个列中包含相应的功能。这是seaborn的缺点;它只适用于漂亮的标准数据格式。 – ImportanceOfBeingErnest