matplotlib中如何让colorbar的一端颜色变深?
·
回答问题
假设我有以下情节:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
data = np.sort(np.random.rand(8,12))
plt.figure()
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='Blues', vmin=0.0, vmax=1.0)
plt.colorbar(c)
plt.show()

颜色条具有(几乎)白色分配给最低值。如何让它稍微暗一点?我想要它而不是从白色到蓝色的颜色条,它应该从浅蓝色到深蓝色。就像,值 0 的颜色应该类似于上图中值 0.4 的颜色。
我在搜索时发现了这个,但问题(和解决方案)是关于使所有颜色变暗,这不是我想要的。
Answers
尽管@user3483203 的建议非常好,但您确实需要重新插入颜色图。您可以通过首先将颜色图作为颜色矩阵(基于原始插值)然后选择该矩阵的一部分作为新颜色图来避免这种情况:
import matplotlib as mpl
cmap = mpl.cm.Blues(np.linspace(0,1,20))
cmap = mpl.colors.ListedColormap(cmap[10:,:-1])
你的例子然后变成
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
cmap = mpl.cm.Blues(np.linspace(0,1,20))
cmap = mpl.colors.ListedColormap(cmap[10:,:-1])
np.random.seed(1)
data = np.sort(np.random.rand(8,12))
plt.figure()
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap=cmap, vmin=0.0, vmax=1.0)
plt.colorbar(c)
plt.show()
这使

在这种情况下,这可能相当于重新插值的颜色图,因为Blues本身来自一些插值。
对于其他颜色图,结果可能完全不同。例如,对于jet:
- 没有新的插值,只是原始颜色图的一个子集(即当前解决方案):

- 使用重新插值(即@user3483203的解决方案):

更多推荐

所有评论(0)