displaying fixed width bars for all datasets in matplotlib
matplotlib, python
Solution
They are actually the same bar width, it's just your x-axis scale that is different. See:
>>> 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()
Problem
I have the following datasets .I need to plot barchats for say 1,2 or all of them.When I plot the chart for a single data item (eg: `xdata=[0]` and `ydata=[1000]`, `xlabels=['first']` , the bar is sclaed to occupy the whole plot area.How do I restrict the barwidth to be say 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() ``` When I tried ``` create_bar_plot(5) ``` I got this figure But when I called ``` create_bar_plot(1) ``` I get this fat bar So, how do I make the plot show each bar with fixed width? It seems the `width=barwidth` in `bar()` doesn't work as I expected it would.. Very likely I am missing something.. Please help