Подтвердить что ты не робот

Matplotlib цвет расцветки как функция третьей переменной

Я хотел бы знать, как сделать цветовые точки функции рассеяния matplotlib третьей переменной.

Вопросы переменная gnuplot linecolor в matplotlib? и Matplotlib scatterplot; цвет как функция третьей переменной однако ответы на эти вопросы не затрагивают мою проблему: использование c=arraywhichspecifiespointcolour в функции разброса задает только цвет заливки, а не цвет края. Это означает, что использование c=arr... не выполняется при использовании markersymbol='+', например (поскольку этот маркер не заполняет, только края). Я хочу, чтобы точки были окрашены третьей переменной надежно, независимо от того, какой символ используется.

Есть ли способ достичь этого с помощью функции рассеяния Matplotlib?

4b9b3361

Ответ 1

Это работает для меня, используя 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()

Результат:

enter image description here

В качестве альтернативы для n точек создайте массив значений цвета RGB с формой (n, 3) и назначьте его аргументу edgecolors ключевого слова 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()

Результат: enter image description here

Этот пример получает значения RGBA, масштабируя значения z до диапазона [0,1] и вызывая colormap plt.cm.coolwarm с масштабированными значениями. При вызове таким образом, matplotlib colormap возвращает массив значений RGBA, причем каждая строка дает цвет соответствующего входного значения. Например:

>>> t = np.linspace(0, 1, 5)
>>> t
array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])
>>> plt.cm.coolwarm(t) 
array([[ 0.2298,  0.2987,  0.7537,  1.    ],
       [ 0.5543,  0.6901,  0.9955,  1.    ],
       [ 0.8674,  0.8644,  0.8626,  1.    ],
       [ 0.9567,  0.598 ,  0.4773,  1.    ],
       [ 0.7057,  0.0156,  0.1502,  1.    ]])