Matplotlib scatterplot; цвет как функция третьей переменной
Я хочу сделать диаграмму рассеяния (используя matplotlib), где точки затенены в соответствии с третьей переменной. Я очень близко к этому:
plt.scatter(w, M, c=p, marker='s')
где w и M - точки данных, а p - переменная, которую я хочу затенять относительно.
Однако я хочу сделать это в оттенках серого, а не в цвете. Может ли кто-нибудь помочь?
Ответы
Ответ 1
Нет необходимости вручную устанавливать цвета. Вместо этого укажите цветовой код в оттенках серого...
import numpy as np
import matplotlib.pyplot as plt
# Generate data...
x = np.random.random(10)
y = np.random.random(10)
# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()
plt.show()
![enter image description here]()
Или, если вы предпочитаете более широкий диапазон цветовых кодов, вы также можете указать cmap
kwarg scatter
. Чтобы использовать обратную версию любого из них, просто укажите версию "_r
" любого из них. Например. gray_r
вместо gray
. Существует несколько различных цветовых колонок в оттенках серого, сделанных заранее (например, gray
, gist_yarg
, binary
и т.д.).
import matplotlib.pyplot as plt
import numpy as np
# Generate data...
x = np.random.random(10)
y = np.random.random(10)
plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()
Ответ 2
В matplotlib серые цвета могут быть заданы как строка числового значения между 0-1.
Например c = '0.1'
Затем вы можете преобразовать свою третью переменную в значение внутри этого диапазона и использовать ее для окраски ваших очков.
В следующем примере я использовал y-позицию точки как значение, определяющее цвет:
from matplotlib import pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]
color = [str(item/255.) for item in y]
plt.scatter(x, y, s=500, c=color)
plt.show()
![enter image description here]()