Подтвердить что ты не робот

Как поместить зазор между осью y и первым баром в вертикальном барчарте matplotlib

У меня есть фрагмент кода штрих-кода, как показано ниже. Когда вы запустите это, вы получите 4 бара, первый из которых лежит против оси y.Если возможно установить некоторый зазор между осью y и первым баром?

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)
    plt.xticks([ x+(width/2) for x in  xvals],[x for x in xnames])
    plt.yticks(range(0,max(yvals),yinterval))
    figure.savefig("barchart.png",format="png")
    plt.show()
if __name__=='__main__':    
    plot_graph1()

Выход ниже

barchart as produced by above code

Любая помощь оценена

спасибо

знак

4b9b3361

Ответ 1

В вашем конкретном случае проще всего использовать 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()

введите описание изображения здесь