matplotlib 如何设置pcolor savefig colorbar透明度

ercv8c1e  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(189)

我试图导出一个带有颜色条的pcolor图形。颜色条的cmap有一个透明颜色。导出的图形在轴中有透明颜色,但在颜色条中没有。我如何解决这个问题?

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

x = np.random.random((10, 10))
colors = [(0,0,0,0), (0,0,0,1)]
cm = LinearSegmentedColormap.from_list('custom', colors, N=256, gamma=0)
plt.pcolor(x,cmap=cm)
plt.colorbar()
plt.savefig('figure.pdf',transparent=True)

我把图像放在灰色背景下进行检查。可以看到,坐标轴中的cmap是透明的,而颜色条中的cmap不是。

vql8enpb

vql8enpb1#

当颜色条位于轴中时,它有一个额外的背景补丁与之关联。默认情况下,这是白色,当transparent=Truesavefig中使用时,将不会被考虑在内。
因此,一种解决方案是手动去除该补丁的面部颜色,

cb.patch.set_facecolor("none")

一个完整的例子,它显示了这一点,而没有实际保存的数字

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

x = np.random.random((10, 10))
colors = [(1,1,1,0), (0,0,0,1)]
cm = LinearSegmentedColormap.from_list('custom', colors, N=256, gamma=0)

fig, ax = plt.subplots(facecolor="grey")

im = ax.pcolor(x,cmap=cm)
cb = fig.colorbar(im, drawedges=False)

ax.set_facecolor("none")
cb.patch.set_facecolor("none")

plt.show()

相关问题