4

私は次のデータセットを持っています。たとえば、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

では、固定幅の各バーをプロットに表示するにはどうすればよいでしょうか? 期待どおりに動作しないようです..何かが足りない可能性が非常に高いwidth=barwidthです..bar()

助けてください

4

2 に答える 2

2

それらは実際には同じバー幅です。異なるのは x 軸のスケールだけです。見る:

>>> create_bar_plot(5)
>>> plt.gca().get_xbound()
(-1.0, 5.0)
>>> create_bar_plot(1)
>>> plt.gca().get_xbound()
(-0.30000000000000004, 0.30000000000000004)
>>> ax = plt.gca()
>>> ax.set_xbound(-1.0 ,5.0)
>>> plt.show()

1

于 2013-01-17T07:29:31.220 に答える
1

バーの幅は 0.45 のままですが、データが少ないため、x 軸の範囲が縮小されています。xlim() を手動で設定して、両方の軸を同じ幅にすると、バーも同じ幅になります。

そう:

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

バーが中央に配置されなくなるため、最終結果によってはさらに調整が必要になる場合があります。

于 2013-01-17T07:33:23.083 に答える