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
Advertisement
Answer
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()
