![](/img/trans.png)
[英]How to redefine a color for a specific value in a matplotlib colormap
[英]How to create a linear colormap with color defined at specific values with matplotlib?
我想創建一個顏色圖,它通過為特定值定義的 colors 線性淡化。 下面是我的最小非工作示例。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
data = np.random.uniform(0, 10, (10, 10))
values = [0., 0.8, 1., 10.]
colors = ["#ff0000", "#00ff00", "#0000ff", "#cccccc"]
我覺得這可以通過在使用imshow
繪圖時使用cmap
和norm
開關來解決,但我無法成功地使 colors 的平滑梯度通過定義的 colors 值。
cmap = mpl.colors.ListedColormap(colors, name="mycmap")
norm = mpl.colors.BoundaryNorm(values, len(colors))
fig, axe = plt.subplots()
cmap_ = axe.imshow(data, aspect="auto", origin="upper", cmap=cmap, norm=norm)
cbar = fig.colorbar(cmap_, ax=axe)
比例尺也是非線性的。
如何使用上面提供的值和 colors 設置此顏色圖?
這是我找到的解決問題的當前解決方案:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
def get_colormap(values, colors, name="custom"):
values = np.sort(np.array(values))
values = np.interp(values, (values.min(), values.max()), (0., 1.))
cmap = mpl.colors.LinearSegmentedColormap.from_list(name, list(zip(values, colors)))
return cmap
data = np.random.uniform(0, 10, (10, 10))
values = np.array([0., 0.8, 1., 10.])
colors = ["#ff0000", "#00ff00", "#0000ff", "#cccccc"]
cmap_ = get_colormap(values, colors)
fig, axe = plt.subplots()
cmap = axe.imshow(data, aspect="auto", origin="upper", cmap=cmap_)
cbar = fig.colorbar(cmap, ax=axe)
不簡單但實用。 我將保留未回答的問題,以便有機會找到最佳解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.