使用Seaborn创建条形图

时间:2015-04-30 06:30:24

标签: matplotlib seaborn

我正在尝试使用seaborn绘制条形图。样本数据:

x=[1,1000,1001]
y=[200,300,400]
cat=['first','second','third']
df = pd.DataFrame(dict(x=x, y=y,cat=cat))

当我使用时:

sns.factorplot("x","y", data=df,kind="bar",palette="Blues",size=6,aspect=2,legend_out=False);

产生的数字是

No legend

当我添加图例时

sns.factorplot("x","y", data=df,hue="cat",kind="bar",palette="Blues",size=6,aspect=2,legend_out=False);

结果图看起来像这样

enter image description here

如您所见,条形图从值移开。我不知道如何获得与第一张图中相同的布局并添加图例。

我不一定与seaborn相关,我喜欢调色板,但任何其他方法都适合我。唯一的要求是该图看起来像第一个并且有图例。

1 个答案:

答案 0 :(得分:7)

此处出现此问题 - 来自文档searborn.factorplot

  

hue:string,optional

     

用于按颜色分割绘图的数据中的变量名称。在“kind =”bar 的情况下,这也会影响x轴上的位置。

所以,既然seaborn使用matplotlib,你可以这样做:

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

x=[1,1000,1001]
y=[200,300,400]
sns.set_context(rc={"figure.figsize": (8, 4)})
nd = np.arange(3)
width=0.8
plt.xticks(nd+width/2., ('1','1000','1001'))
plt.xlim(-0.15,3)
fig = plt.bar(nd, y, color=sns.color_palette("Blues",3))
plt.legend(fig, ['First','Second','Third'], loc = "upper left", title = "cat")
plt.show()

enter image description here

添加了@ mwaskom的方法来获取三种sns颜色。