【问题标题】:How to draw grid lines behind matplotlib bar graph如何在matplotlib条形图后面绘制网格线
【发布时间】:2014-06-14 23:39:38
【问题描述】:
x = ['01-02', '02-02', '03-02', '04-02', '05-02']
y = [2, 2, 3, 7, 2]

fig, ax = plt.subplots(1, 1)
ax.bar(range(len(y)), y, width=0.3,align='center',color='skyblue')
plt.xticks(range(len(y)), x, size='small')
plt.savefig('/home/user/graphimages/foo2.png')
plt.close()

我想在条形图后面绘制网格线(x 和 y)。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    要添加网格,您只需添加

    ax.grid()

    如果您希望网格位于栏后,请添加

    ax.grid(zorder=0)
    ax.bar(range(len(y)), y, width=0.3, align='center', color='skyblue', zorder=3)
    

    重要的部分是条形的zorder 大于网格。试验似乎zorder=3 是实际产生所需效果的最低值。我不知道为什么zorder=1 还不够。

    编辑: 我注意到这个问题已经用不同的方法回答了here,尽管它遭受了一些链接腐烂。据我所知,这两种方法产生的结果相同,但安德鲁·库克的回答更优雅。

    【讨论】:

    • 虽然不是这个问题的一部分,但如果有通过yerrxerr 指定的错误栏(实心栏会遮住它们),请注意,此解决方案将不起作用;使用 ax.set_axisbelow() 确实适用于这种情况。
    • 如上所述,这不适用于误差线。为了完整起见,命令ax.set_axisbelow() 需要一个真实的陈述,如ax.set_axisbelow(True)
    • 如果我使用ax.yaxis.grid(True) 只显示水平网格怎么办?添加ax.grid(zorder=0) 将显示垂直网格。
    • 也许图形面在 zorder==0 并且轴面在 zorder==1?没有测试理论。
    • 这个链接对我有用 stackoverflow.com/questions/1726391/… ,使用 zorder 的方法没有
    【解决方案2】:

    我建议另一种解决方案,因为投票最多的答案对我不起作用。您可以使用以下代码设置绘图后面的网格线。

    ax.set_axisbelow(True)
    ax.grid(color='gray', linestyle='dashed')
    

    我从this answer 得到这个代码。

    【讨论】:

      【解决方案3】:
      plt.grid(True, color = "grey", linewidth = "1.4", linestyle = "-.")
      

      这对我有用,网格线将是灰色边框颜色,如果您愿意,可以将边框设计更改为 linestyle = ".." 像这样

      plt.grid(True, color = "grey", linewidth = "1.4", linestyle = "..")
      

      总结整个代码块:

      fig, ax = plt.subplots(1, 1)
      ax.bar(range(len(y)), y, width=0.3,align='center',color='skyblue')
      plt.xticks(range(len(y)), x, size='small')
      plt.grid(True, color = "grey", linewidth = "1.4", linestyle = "-.")
      plt.savefig('/home/user/graphimages/foo2.png')
      plt.close()
      

      【讨论】:

        【解决方案4】:

        ax.grid(zorder=0) 工作正常。但首先放置条形然后放置网格。不是相反的方式。

        ax = df.plot.bar(x='Index', y='Values', rot=90)
        ax.grid(zorder=0)
        

        我取了一些与年份的货币相关性并将其排序为我的数据框 df,下面是代码运行的结果。

        【讨论】:

        • 网格线似乎都在条上,而不是在后面。
        猜你喜欢
        • 2010-12-16
        • 1970-01-01
        • 2020-08-15
        • 2022-11-10
        • 1970-01-01
        • 2015-03-26
        • 2020-02-28
        • 2021-01-07
        相关资源
        最近更新 更多