显示matplotlib中所有数据集的固定宽度条

时间:2013-01-17 07:10:54

标签: python matplotlib

我有以下数据集。我需要为1,2或全部绘制条形图。当我绘制单个数据项的图表时(例如:xdata = [0]和ydata = [1000],xlabels = ['first'],条形图被占据整个绘图区域。如何限制条宽度为0.45?

ydata=[1000,250,3000,500,3200,4000,2000]
xlabels=['first','sec','third','fourth','fifth','sixth','seventh']

barwidth = 0.45

import matplotlib.pyplot as plt

def create_bar_plot(entries):
    assert entries > 0    
    xdata = range(entries)
    xlabels=xlabels[:entries]
    xdata=xdata[:entries]
    ydata=ydata[:entries]        
    figure = plt.figure(figsize = (12,6), facecolor = "white")
    ax = figure.add_subplot(1,1,1)
    plt.grid(True)
    if xdata and ydata:
        ax.bar(xdata, ydata, width=barwidth,align='center',color='blue')
        ax.set_xlabel('categories',color='black')
        ax.set_ylabel('duration in  minutes',color='black')
        ax.set_title('duration plot created ')
        ax.set_xticks(xdata)
        ax.set_xticklabels(xlabels)
        figure.autofmt_xdate(rotation=30)
        plt.show()

当我尝试

create_bar_plot(5)

我得到了这个数字 http://i.stack.imgur.com/nhHEM.jpg

但是当我打电话时

create_bar_plot(1)

我得到了这个胖吧

http://i.stack.imgur.com/e0IJi.jpg

那么,如何让图表显示每个固定宽度的条形图?似乎bar()中的width = barwidth不能像我预期的那样工作..很可能我错过了什么..

请帮忙

2 个答案:

答案 0 :(得分:1)

它们实际上是相同的条宽,它只是你的x轴刻度不同。参见:

In [67]: create_bar_plot(5)

In [68]: plt.gca().get_xbound()
Out[68]: (-1.0, 5.0)

In [69]: create_bar_plot(1)

In [70]: plt.gca().get_xbound()
Out[70]: (-0.30000000000000004, 0.30000000000000004)

In [71]: ax = plt.gca()

In [72]: ax.set_xbound(-1.0 ,5.0)

In [73]: plt.show()

enter image description here

答案 1 :(得分:1)

条形宽度仍为.45,但x轴的范围缩小,因为数据较少。您可以手动设置xlim()以使两个轴的宽度相同,然后条形也将具有相同的宽度。

所以:

    ax.set_xlim(-1,len(xlabels))

它不再会使酒吧居中,所以您可能需要进一步调整,具体取决于您所追求的最终结果。