Matplotlib scatterplot; цвет как функция третьей переменной - PullRequest
135 голосов
/ 20 ноября 2011

Я хочу создать диаграмму рассеяния (используя matplotlib), где точки заштрихованы в соответствии с третьей переменной.Я очень близко подошел к этому:

plt.scatter(w, M, c=p, marker='s')

, где w и M - точки данных, а p - переменная, к которой я хочу заштриховать.чем цвет.Кто-нибудь может помочь?

Ответы [ 3 ]

137 голосов
/ 21 ноября 2011

Нет необходимости вручную устанавливать цвета.Вместо этого укажите цветовую карту в оттенках серого ...

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()
25 голосов
/ 20 ноября 2011

В 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

5 голосов
/ 16 июля 2018

Иногда вам может потребоваться точная графика цвета в зависимости от значения 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()

Coloring scatter plot as a function of x variable

...