我正在使用pyplot.matshow绘制矩阵,并试图plt.gca().set_axisbelow(True)
用来使网格线显示在图的后面,但它们始终位于顶部。如何使网格线在matshow后面绘制?
import numpy as np
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
plt.rcParams['axes.axisbelow'] = True
m = np.zeros((21, 21))
m[14:17, 12:14] = -0.1
plt.matshow(np.ma.masked_equal(m, 0), cmap=ListedColormap(['k', 'w']), extent=(0.5, 20.5, 20.5, 0.5))
plt.xticks(range(1, 21));
plt.yticks(range(1, 21));
plt.gca().set_axisbelow(True)
plt.grid()
注:编辑以仅绘制非零部分,如注释中所述。
您可以将网格的颜色更改为与正方形相同的颜色(而不是默认的深灰色)。因此,在问题示例中为“黑色”。(print(matplotlib.rcparams['grid.color']
显示默认网格颜色:“#b0b0b0”)。这样,网格在图的黑色部分不可见。
尝试使用线型和/或线宽以使网格不太突出。
在下面的代码中,我将图像更改为20x20,以使黑色正方形很好地居中并删除了下部的xticks。尽管网格仅在与网格相同颜色的正方形上不可见,但颜色不必是黑白的。
import numpy as np
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
m = np.zeros((20, 20))
for i in range(20):
for j in range(20):
if 45 <= abs(i-9.5)**2 + abs(j-9.5)**2 <= 65:
m[i, j] = -0.1
plt.matshow(m, cmap=ListedColormap(['indigo', 'gold']), extent=(0.5, 20.5, 20.5, 0.5))
plt.xticks(range(1, 21))
plt.yticks(range(1, 21))
plt.tick_params(axis='x', bottom=False)
plt.grid(c='indigo', ls=':', lw='0.4')
plt.show()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句