假设我有这样的数据:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
# for reproducibility purposes
np.random.seed(0)
# generate some data
n = 30
x = np.array(range(n))
a1 = np.random.rand(n)
a2 = a1 * 100
我想将这些数据绘制在两个子图中,我可以做(这个答案 https://stackoverflow.com/a/46778420/1534017)
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", [(0., '#9696ff'), (0.2, '#f0ffff'), (1.0, '#ff0000')])
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, a1, c=a1, cmap=cmap)
ax2.scatter(x, a2, c=a2, cmap=cmap)
plt.show()
这使
我遇到的问题是,尽管右侧的值大了 100 倍,但现在看起来这些数据是相同的。
所以,我想要的是一个可以用于这两个图的颜色图;代替
matplotlib.colors.LinearSegmentedColormap.from_list("", [(0., '#9696ff'), (0.2, '#f0ffff'), (1.0, '#ff0000')])
我想用类似的东西
min_a1_a2 = min(min(a1), min(a2))
max_a1_a2 = max(max(a1), max(a2))
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", [(min_a1_a2, '#9696ff'), ((min_a1_a2 + max_a1_a2) / 2., '#f0ffff'), (max_a1_a2, '#ff0000')])
但这总是会导致错误
ValueError:数据映射点必须以 x=0 开头。并以 x=1 结束
当我把它传递给scatter
(使用与上面相同的命令)。
有没有办法通过任意(值、颜色)元组 to matplotlib.colors.LinearSegmentedColormap.from_list
然后将得到的颜色图例如scatter
如果是这样,人们会怎么做呢?