Vic*_*ink 6 python matplotlib seaborn
这是一个简单的代码,它重现了我试图绘制的图形:
import matplotlib.pyplot as plt
import seaborn as sb
import numpy as np
x = np.arange(1,11)
y1 = x[::-1]
y2 = 2 ** x
fig = plt.figure(figsize = (8,6))
ax1 = fig.add_subplot(111)
plt.bar(x, y1, 1, color = 'blue')
ax1.grid(axis = 'y')
ax2 = ax1.twinx()
ax2.plot(x+0.5, y2, color = 'red')
Run Code Online (Sandbox Code Playgroud)
哪个产生:
最后一行图中的网格线显示在条形图上方.我怎么能把它们放在酒吧后面?
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1,11)
y1 = x[::-1]
y2 = 2 ** x
fig = plt.figure(figsize = (8,6))
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
# from back to front
ax1.grid(axis="both", color="black")
ax1.bar(x, y1, 1, alpha=.9, edgecolor="black", facecolor='blue', zorder=1)
ax2.grid(axis="y", color="green")
#ax2.grid(False)
ax2.plot(x+0.5, y2, color='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)
生成下图,说明元素的 zorder。
ax1.grid => ax1.bar => ax2.grid => ax2.line
我能想到的唯一解决方法是在 ax1 中绘制网格并关闭 ax2 网格(如果您确实想为 ax2 绘制水平网格线,那么您可能必须用 ax1 绘制该线。
ax1.grid(True, axis="both", color="yellow")
ax1.bar(x, y1, 1, alpha=.9, edgecolor="black", facecolor='blue', zorder=1)
ax2.grid(False)
ax2.plot(x+0.5, y2, color='red')
Run Code Online (Sandbox Code Playgroud)