matplotlib pyplot pcolor savefig 颜色条透明度
matplotlib pyplot pcolor savefig colorbar transparency
我正在尝试导出带有颜色条的 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)
我将图像放在灰色背景下进行检查。可以看到,axes 中的 cmap 是透明的,而 colorbar 中的则不是。
虽然颜色条位于轴内,但它有一个与之关联的附加背景补丁。默认为白色,在 savefig
.
内部使用 transparent=True
时不会考虑
因此,一个解决方案是手动删除此补丁的面色,
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()
我正在尝试导出带有颜色条的 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)
我将图像放在灰色背景下进行检查。可以看到,axes 中的 cmap 是透明的,而 colorbar 中的则不是。
虽然颜色条位于轴内,但它有一个与之关联的附加背景补丁。默认为白色,在 savefig
.
transparent=True
时不会考虑
因此,一个解决方案是手动删除此补丁的面色,
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()