我想知道如何用第三个变量制作matplotlib的散射函数色点。
问题
gnuplot linecolor variable in matplotlib?和Matplotlib scatterplot; colour as a function of a third variable
然而,提出类似的查询,这些问题的答案并没有解决我的问题:在散点函数中使用c=arraywhichspecifiespointcolour
只设置填充颜色,而不是边缘颜色。这意味着使用c=arr...
时markersymbol='+'
的使用失败(例如,因为该标记没有填充,只有边缘)。无论使用哪个符号,我都希望点可以被第三个变量可靠地着色。
有没有办法用Matplotlib的分散函数来实现这个目的?
答案 0 :(得分:29)
这适用于我,使用matplotlib 1.1:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.sin(x)
plt.scatter(x, y, marker='+', s=150, linewidths=4, c=y, cmap=plt.cm.coolwarm)
plt.show()
结果:
或者,对于n个点,使用shape(n,3)创建一个RGB颜色值数组,并将其分配给edgecolors
的{{1}}关键字参数:
scatter()
结果:
该示例通过将import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 20, 100)
y = np.sin(x)
z = x + 20 * y
scaled_z = (z - z.min()) / z.ptp()
colors = plt.cm.coolwarm(scaled_z)
plt.scatter(x, y, marker='+', edgecolors=colors, s=150, linewidths=4)
plt.show()
值缩放到范围[0,1]并使用缩放值调用colormap z
来获取RGBA值。当以这种方式调用时,matplotlib colormap返回RGBA值的数组,每行给出相应输入值的颜色。例如:
plt.cm.coolwarm