seaborn barplot()输出图被覆盖

时间:2015-06-18 21:33:45

标签: python matplotlib jupyter

我正在使用以下代码行来绘制jupyter笔记本中的几个seaborn条形图

sns.set(style="darkgrid")
rcParams['figure.figsize'] = (12, 8)
bar_plot = sns.barplot(x='Country',y='Average Rate',data=pddf1, palette="muted", x_order=pddf1["Country"].tolist())
abc = bar_plot.set_xticklabels(pddf1["Country"],rotation=90)

sns.set(style="darkgrid")
rcParams['figure.figsize'] = (12, 4)
bar_plot = sns.barplot(x='Country',y='% Jobs Completed',data=pddf2,     palette="muted", x_order=pddf2["Country"].tolist())
abc = bar_plot.set_xticklabels(pddf2["Country"],rotation=90)

其中pddf变量是从列表构造的熊猫数据帧。

如果我注释掉一组语句,则正确绘制另一个图表。但是,如果它们两者一起运行,则两个图形都在相同的轴上绘制。换句话说,第一个被第二个覆盖。我确信,因为我看到最后一个图中显示的第一个图表中的较长条形。

任何想法,我怎么能一个接一个地画它们?我做错了什么?

由于seaborn是在matplotlib之上开发的,所以我也搜索了它。在matplotlib中,您可以通过更改图号来绘制。不确定是否可以在seaborn使用rcParams实现。

2 个答案:

答案 0 :(得分:0)

你尝试过子图吗?

sns.set(style="darkgrid")   # Only need to call this once 
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(12,8))  # plots on same row
sns.barplot(x='Country',y='Average Rate',data=pddf1, palette="muted", x_order=pddf1["Country"].tolist(), ax=ax1)
ax1.set_xticklabels(pddf1["Country"],rotation=90)

sns.barplot(x='Country',y='% Jobs Completed',data=pddf2,     palette="muted", x_order=pddf2["Country"].tolist(), ax=ax2)
abc = bar_plot.set_xticklabels(pddf2["Country"],rotation=90)

这产生两个相同大小的数字;还有其他选项,如gridspec,可以更多地自定义位置和大小。

答案 1 :(得分:0)

感谢@iayork的subplot()。我只是想指出一些可能有助于其他人的事情

  1. 我有3个数字来绘制&将在不同的行上使用它们,或者它们变得太小而无法查看

  2. 我将“国家/地区名称”作为x标签。一些国家名称很像“阿拉伯联合酋长国”,因此为了避免重叠,我使用旋转角度90.当我使用f, (ax1, ax2, ax3) = plt.subplots(3,1, figsize=(15,6))在不同的行上绘制图形时,我得到x标签与图形的重叠下面。但是如果我为每个图形使用单独的subplot()语句,则没有重叠。最后的代码看起来像这样

    f, (ax1) = plt.subplots(1,figsize=(15,6))
    f, (ax2) = plt.subplots(1,figsize=(15,6))
    f, (ax3) = plt.subplots(1,figsize=(15,6))
    
    sns.set(style="darkgrid")
    
    sns.barplot(x='Country',y='Average Rate',data=pddf1, palette="muted", x_order=pddf1["Country"].tolist(), ax=ax1)
    ax1.set_xticklabels(pddf1["Country"],rotation=90)
    
    sns.barplot(x='Country',y='Jobs Completed',data=pddf2, palette="muted", x_order=pddf2["Country"].tolist(), ax=ax2)
    ax2.set_xticklabels(pddf2["Country"],rotation=90)
    
    sns.barplot(x='Country',y='User Rating',data=pddf3, palette="muted", x_order=pddf3["Country"].tolist(), ax=ax3)
    ax3.set_xticklabels(pddf3["Country"],rotation=90)