В вашем конкретном случае проще всего использовать plt.margins
и plt.ylim(ymin=0)
. margins
будет действовать как axis('tight')
, но оставит указанный процент «заполнения» вместо масштабирования до точных пределов данных.
Кроме того, plt.bar
имеет опцию align="center"
, которая несколько упрощает ваш пример.
Вот несколько упрощенная версия вашего примера выше:
import matplotlib.pyplot as plt
def plot_graph1():
xvals = range(4)
xnames=["one","two","three","four"]
yvals = [10,30,40,20]
width = 0.25
yinterval = 10
figure = plt.figure()
plt.grid(True)
plt.xlabel('x vals')
plt.ylabel('y vals')
plt.bar(xvals, yvals, width=width, align='center')
plt.xticks(xvals, xnames)
plt.yticks(range(0,max(yvals),yinterval))
plt.xlim([min(xvals) - 0.5, max(xvals) + 0.5])
figure.savefig("barchart.png",format="png")
plt.show()
if __name__=='__main__':
plot_graph1()