3 回答

TA貢獻1802條經驗 獲得超10個贊
找到解決方案了!
c_white = matplotlib.colors.colorConverter.to_rgba('white',alpha = 0)
c_black= matplotlib.colors.colorConverter.to_rgba('black',alpha = 1)
cmap_rb = matplotlib.colors.LinearSegmentedColormap.from_list('rb_cmap',[c_white,c_black],512)
pl = plt.pcolor(mp1,cmap=cmap_rb)

TA貢獻1804條經驗 獲得超2個贊
如果mp1只有值 0 和 1,中間沒有任何值,則可以屏蔽掉零并僅繪制零。np.where(mp1 == 1, 1, np.nan)只會顯示那些。使用vmin=0將確保 0 映射到“二元”顏色圖的白色,并將vmax=11 映射到黑色。
import matplotlib.pyplot as plt
import numpy as np
mp0 = np.random.randn(15, 30).cumsum(axis=1).cumsum(axis=0) # random backgroud
mp1 = np.zeros((15, 30)) # start with all zeros
mp1[np.random.randint(0, 15, 30), np.random.randint(0, 30, 30)] = 1 # set some random positions to 1
plt.pcolormesh(mp0, cmap='rainbow')
plt.pcolormesh(np.where(mp1 == 1, 1, np.nan), cmap='binary', vmin=0, vmax=1)
plt.tight_layout()
plt.show()

TA貢獻1799條經驗 獲得超6個贊
定義自己的 RGBA 顏色圖并不太困難(來源)。例如,要定義具有線性變化透明度的黑色貼圖:
from matplotlib.colors import ListedColormap
cmap = np.zeros([256, 4])
cmap[:, 3] = np.linspace(0, 1, 256)
cmap = ListedColormap(cmap)
用法示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
x = 2 * np.pi * np.linspace(-1, 1, 100)
z = np.sin(x.reshape(1, -1) + x.reshape(-1, 1))
cmap = np.zeros([256, 4])
cmap[:, 3] = np.linspace(0, 1, 256)
cmap = ListedColormap(cmap)
plt.figure()
plt.pcolormesh(z + 1, cmap='bwr', edgecolors=None)
plt.pcolormesh(np.fliplr(z), cmap=cmap, edgecolors=None)
plt.savefig("temp")
添加回答
舉報