首页 > 解决方案 > 如何在条形下方绘制网格线以及在所有内容之上绘制线条和线条

问题描述

我有一个线和条形图,并且无法以正确的顺序绘制事物。我想要所有东西后面的网格线,接下来是条形,以及所有东西上面的线条。以下是我尝试过的。我想尝试#3 最接近,但网格线位于条形顶部:

import  os, sys
import matplotlib.pyplot as plt

dtnums = [1,2,3,4,5]
pop    = [20,25,75,32,5]
obs    = [0.0, 0.0, 0.21, 0.30, 0.10]

fig, ax1 = plt.subplots( figsize=(8,5) )
ax2 = ax1.twinx()

#--- Try #1
ax1.plot(dtnums, pop, color='blue', linewidth=3)
ax1.grid(True, axis='y')
ax2.bar(dtnums, obs, color='g')
plt.show()

尝试#1

#--- Try #2
ax1.plot(dtnums, pop, color='blue', linewidth=3, zorder=10)
ax1.grid(True, axis='y',zorder=0)
ax2.bar(dtnums, obs, color='g', zorder=1)
plt.show()

尝试#2

#--- Try #3
ax1.plot(dtnums, pop, color='blue', linewidth=3, zorder=2)
ax1.grid(True, axis='y',zorder=0)
ax2.bar(dtnums, obs, color='g', zorder=1)

ax1.set_axisbelow(True)
ax1.set_zorder(10)
ax1.patch.set_visible(False)
plt.show()

尝试#3

标签: pythonmatplotlibbar-chartgridlines

解决方案


import matplotlib.pyplot as plt

dtnums = [1,2,3,4,5]
pop    = [20,25,75,32,5]
obs    = [0.0, 0.0, 0.21, 0.30, 0.10]

fig, ax1 = plt.subplots(figsize=(8, 5))
ax2 = ax1.twinx()

# add this
ax2.set_axisbelow(True)

ax1.plot(dtnums, pop, color='blue', linewidth=3, zorder=2)

# change this from ax1 to ax2
ax2.grid(True, axis='y', zorder=0)

ax2.bar(dtnums, obs, color='g', zorder=1)

ax1.set_axisbelow(True)
ax1.set_zorder(10)
ax1.patch.set_visible(False)
plt.show()

在此处输入图像描述


推荐阅读