python - matplotlib:matshow 在图像顶部有网格线
问题描述
我正在使用 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()
推荐阅读
- javascript - 如何在 chrome 扩展程序中重新定向到谷歌搜索?
- excel - 从包含 CSV 文件的文件夹中筛选 Power Query 中的多个条件的方法
- vuejs2 - vue-router 在 url 中返回 'function%20%' 而不是 param
- python - 调用随机值以绘制形状和删除形状
- sql - 时态表以一种奇怪的模式检索具有不同顺序的分区行集
- python - 类型错误:不支持的操作数
- haskell - 箭头化 FRP 中流元组与元组流
- scala - 无法解决错误:java.io.NotSerializableException: org.apache.avro.Schema$RecordSchema
- c++ - 内存地址输出而不是值
- reverse-engineering - 关于指针扫描