我正在使用以下代码行来绘制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实现。
答案 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()。我只是想指出一些可能有助于其他人的事情
我有3个数字来绘制&将在不同的行上使用它们,或者它们变得太小而无法查看
我将“国家/地区名称”作为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)