【问题标题】:how to put gap between y axis and first bar in vertical barchart matplotlib如何在垂直条形图matplotlib中的y轴和第一个条之间放置间隙
【发布时间】:2011-10-02 07:37:46
【问题描述】:

我有一个条形图代码 sn-p 如下..当你运行它时,你会得到 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()

输出如下

任何帮助表示赞赏

谢谢

标记

【问题讨论】:

    标签: python matplotlib bar-chart


    【解决方案1】:

    在您的具体情况下,使用plt.marginsplt.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()
    

    【讨论】:

    • somehome 我的初始情节看起来像您的答案中的情节,您知道我可以重现问题中条形图坚持 y 轴的情节吗?