如何在python中的条形图上为每个轴绘制多个条形图?

时间:2015-12-18 21:09:46

标签: python matplotlib

我目前使用align=’edge’参数和pyplot.bar()中的正/负宽度来绘制每个轴的一个指标的条形数据。但是,如果我尝试将第二组数据绘制到一个轴,它将覆盖第一组。 pyplot是否有办法正确自动分配这些数据?

lns3 = ax[1].bar(bucket_df.index,bucket_df.original_revenue,color='c',width=-0.4,align='edge')
lns4 = ax[1].bar(bucket_df.index,bucket_df.revenue_lift,color='m',bottom=bucket_df.original_revenue,width=-0.4,align='edge')
lns5 = ax3.bar(bucket_df.index,bucket_df.perc_first_priced,color='grey',width=0.4,align='edge')
lns6 = ax3.bar(bucket_df.index,bucket_df.perc_revenue_lift,color='y',width=0.4,align='edge')

这是我展示情节时的样子:

http://i.stack.imgur.com/XwlOv.png

黄色显示的数据完全覆盖灰色数据。我希望它显示在灰色数据旁边。

有没有简单的方法可以做到这一点?谢谢!

1 个答案:

答案 0 :(得分:0)

bar()绘图方法的第一个参数是条形图的x坐标数组。由于您传递相同的x坐标,它们将全部重叠。你可以通过做这样的事情来实现你想要的东西:

< 2015-12-22 09:47:48.893 Type: SSH_FXP_STATUS, Size: 30, Number: 5771525
. 2015-12-22 09:47:48.893 Preserving timestamp [2015-12-22T09:32:48.000Z]
. 2015-12-22 09:47:48.893 Transfer done: '/Home/Brokers Service Marketing Group/211_AI_DR.zip.pgp' [807259773]
> 2015-12-22 09:47:48.893 Script: close
. 2015-12-22 09:47:48.893 Closing connection.
. 2015-12-22 09:47:48.893 Sending special code: 12
. 2015-12-22 09:47:48.893 Sent EOF message

由于您要绘制一些数据集,因此使代码更简洁更有意义(假设x = np.arange(10) # define your x-coordinates width = 0.1 # set a width for your plots offset = 0.15 # define an offset to separate each set of bars fig, ax = plt.subplots() # define your figure and axes objects ax.bar(x, y1) # plot the first set of bars ax.bar(x + offset, y2) # plot the second set of bars 是包含您想要绘制的y坐标的列表, y_valsbucket_df.original_revenue等)。然后你的绘图代码可能如下所示:

bucket_df.revenue_lift

如果您想绘制更多条形图,可以相应地减少for i, y in enumerate(y_vals): ax.bar(x + i * offset, y) width