Matplotlib scatterplot; цвет как функция третьей переменной
Я хочу создать диаграмму рассеяния (используя matplotlib), где точки заштрихованы в соответствии с третьей переменной. Я очень близко с этим:
plt.scatter(w, M, c=p, marker='s')
где w и M - точки данных, а p - переменная, к которой я хочу заштриховать.
Однако я хочу сделать это в оттенках серого, а не в цвете. Кто-нибудь может помочь?
4 ответа
Там нет необходимости вручную устанавливать цвета. Вместо этого укажите цветовую карту в градациях серого...
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()
Или, если вы предпочитаете более широкий диапазон цветовых карт, вы также можете указать 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()
В 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()
Иногда вам может потребоваться построить цвет точно в зависимости от значения x. Например, у вас может быть фрейм данных с 3 типами переменных и некоторыми точками данных. И вы хотите сделать следующее,
- Точки графика соответствуют физической переменной "А" в КРАСНОМ.
- Точки графика соответствуют физической переменной "B" синего цвета.
- Точки графика соответствуют физической переменной 'C' в ЗЕЛЕНОМ.
В этом случае вам, возможно, придется написать короткую функцию, чтобы сопоставить значения x с соответствующими названиями цветов в виде списка, а затем передать этот список plt.scatter
команда.
x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]
# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
cols=[]
for l in lst:
if l=='A':
cols.append('red')
elif l=='B':
cols.append('blue')
else:
cols.append('green')
return cols
# Create the colors list using the function above
cols=pltcolor(x)
plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()
Довольно простое решение также это:
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8,8))
p = ax.scatter(x, y, c=y, cmap='cmo.deep')
fig.colorbar(p,ax=ax,orientation='vertical',label='labelname')