他のコメントに記載されている両方の設定を試しました。
cbar.solids.set_rasterized(True)
cbar.solids.set_edgecolor("face")
残念ながら、どちらも私にとってはうまくいきませんでした。
だから私は巨大なハックである完全に異なるアプローチを試みましたが、少なくとも仕事を成し遂げました. 渡すalpha
とimshow
、他の画像とのブレンドに使用されるアルファ値が設定されます。より高いパワーの理由により(@mfraが述べたように)、これにより、私たちが軽蔑する白い線が作成されます。明らかに重要なのは、アルファ値を に渡さないimshow
ことです。ただし、何らかの方法でカラーバーを作成する必要があります。
したがって、回避策として、カラーマップを に渡す前に自分でアルファ ブレンディングを行うことができますimshow
。例として、カラーマップを使用してみましょうwinter
:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
xx, yy = np.meshgrid(np.linspace(-1, 1, 100), np.linspace(-1, 1, 100))
zz = xx**2 + yy**2
my_cmap_rgb = plt.get_cmap('winter')(np.arange(256))
alpha = 0.5
for i in range(3): # Do not include the last column!
my_cmap_rgb[:,i] = (1 - alpha) + alpha*my_cmap_rgb[:,i]
my_cmap = mpl.colors.ListedColormap(my_cmap_rgb, name='my_cmap')
my_cmap_rgb
ここでは、 に基づいて新しいカラーマップ を作成しwinter
、非アルファ チャネル (0、1、および 2) を編集して自分でアルファ ブレンディングを行います。次に、この新しいカラーマップを使用して Figure をプロットするだけです。
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap=my_cmap)
cbar = plt.colorbar(cim)
ax.set_title("No lines and no transparency")
このトリックなしで取得した画像と比較してください。
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap='winter', alpha=0.5)
cbar = plt.colorbar(cim)
ax.set_title("Lines and transparency")

透明性を必要としない場合、明らかに問題は解決されます。一方、透明性が必要な場合は、もう 1 つの回避策があります。カラーバーを取得するには、最初に透明度のない画像をプロットし、次に透明度のある画像をプロットする必要がありますが、そのカラーバーは使用されません。
f, ax = plt.subplots()
cim = ax.imshow(zz, cmap=my_cmap)
cbar = plt.colorbar(cim)
plt.cla() # Clears axis
ax.plot(50,50, 'ko')
ax.imshow(zz, cmap='winter', alpha=0.5)
ax.set_title("No lines and transparency")
これにより、カラーバーに線がなくても透明度が保持されている画像が得られます。依然として大規模なハッキングですが、少なくともこれらの行に我慢する必要はありません!
