Как поместить зазор между осью Y и первым столбцом в вертикальной диаграмме Matplotlib - PullRequest
13 голосов
/ 10 июля 2011

У меня есть фрагмент кода диаграммы, как показано ниже. Когда вы запускаете это, вы получаете 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

Любая помощь приветствуется

спасибо

оценка

1 Ответ

15 голосов
/ 10 июля 2011

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

enter image description here

...