在主要网格线下方绘制较小的网格线

时间:2015-07-04 15:35:17

标签: python matplotlib

我正在尝试使用matplotlib绘制网格。网格的zorder应该位于图中所有其他线的后面。到目前为止我的问题是 小网格线总是绘制在主网格线的前面,即

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

plt.rc('text', usetex=True)
plt.rc('font', family='serif')

f = plt.figure(figsize=(4,4))
ax = f.add_subplot(111)

ax.xaxis.set_minor_locator(MultipleLocator(1))
ax.xaxis.set_major_locator(MultipleLocator(10))
ax.yaxis.set_minor_locator(MultipleLocator(1))
ax.yaxis.set_major_locator(MultipleLocator(10))

majc ="#3182bd"
minc ="#deebf7"

ax.xaxis.grid(True,'minor',color=minc, ls='-', lw=0.2)
ax.yaxis.grid(True,'minor',color=minc, ls='-', lw=0.2)
ax.xaxis.grid(True,'major',color=majc, ls='-')
ax.yaxis.grid(True,'major',color=majc,ls ='-')
ax.set_axisbelow(True)

x = np.linspace(0, 30, 100)
ax.plot(x, x, 'r-', lw=0.7)

[line.set_zorder(3) for line in ax.lines]
plt.savefig('test.pdf')

有什么建议吗?谢谢。

编辑:特写示例 enter image description here

1 个答案:

答案 0 :(得分:3)

更具体地说,它看起来像按顺序绘制垂直专业,垂直未成年人,水平专业,水平未成年人和绘制线。可能相当深入matplotlib的基础知识。

对于您正在使用的颜色,您可以通过使用alpha而不是RGB区分major和minor来解决问题。更改示例的两行:

ax.xaxis.grid(True,'minor',color=majc, alpha=0.2, ls='-', lw=0.2)
ax.yaxis.grid(True,'minor',color=majc, alpha=0.2, ls='-', lw=0.2)

结果:

enter image description here