ホーム>source

私はpyplot.matshowを使用して行列をプロットし、 plt.gca().set_axisbelow(True) を使用しようとしていますグリッド線がプロットの後ろに表示されるようにしますが、常に一番上に表示されます。グリッド線をマットショーの後ろにプロットするにはどうすればよいですか?

<前>ウィズウィズ

注:コメントに記載されているように、ゼロ以外の部分のみをプロットするように編集されています。

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()
あなたの答え
  • 解決した方法 # 1

    グリッドの色を正方形と同じ色に変更できます(デフォルトの濃い灰色ではなく)。したがって、質問の例の場合は「黒」です。 ( 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()

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ node.js - エクスプレス(nodeJ)に複数のルートファイルを含めることはできますか