python - matplotlib:matshow 在图像顶部有网格线

标签 python python-3.x matplotlib

我正在使用 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()

注意:编辑为仅绘制注释中所述的非零部分。

最佳答案

您可以将网格的颜色更改为与方 block 相同的颜色(而不是默认的深灰色)。因此,在问题中的示例中,“黑色”。 (print(matplotlib.rcparams['grid.color'] 显示默认网格颜色:'#b0b0b0')。这样网格在绘图的黑色部分上是不可见的。

尝试线条样式和/或线条宽度以使网格不那么突出。

在下面的代码中,我将图像更改为 20x20,以使黑色方 block 很好地居中,并删除了下部的 xticks。颜色不需要是黑色和白色,尽管网格仅在与网格颜色相同的方 block 上不可见。

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()

example plot

关于python - matplotlib:matshow 在图像顶部有网格线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60269481/

相关文章:

python - 循环导入的函数中的模块导入会循环导入吗?

python - 在 linux 环境 pandas 中绘制错误 python ...可以保存吗?

python - 单击图例时如何更改 matplot 中一组点的颜色?

python - 从 Spark RDD 中移除元素

Python请求填写下拉菜单的表单

python - 正则表达式匹配偶数个字母

python - 在 PyCharm 中将 python 2 代码转换为 3

python - 定位没有 id 或 class 属性的表

python - 控制洗牌距离

python - 使用 Seaborn 将一维时间序列绘制为一条线,并沿 y 轴绘制边缘直方图