Matplotlib розсіювач; колір як функція третьої змінної


152

Я хочу зробити розсип (з використанням matplotlib), де точки заштриховані відповідно до третьої змінної. Я дуже близько з цим:

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

де w і M - точки даних, а p - змінна, яку я хочу відтінити стосовно.
Однак я хочу зробити це в кольорах сірого, а не в кольорі. Хтось може допомогти?

Відповіді:


156

Не потрібно вручну встановлювати кольори. Замість цього вкажіть кольорову карту сірого ...

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()

1
Дякую! Чи все-таки потрібно намалювати контури навколо цих точок, що містять певну кількість загальної ваги?
Томас Коллетт

6
mpl.cmтакож доступний безпосередньо як plt.cm.
heltonbiker

@Thomas Collet: Якщо ви хочете намалювати контури, вам доведеться інтерполювати дані з точок на 2D матрицю, а потім побудувати це, використовуючи plt.contour()або plt.contourf()- але це інше питання
Зак

Як можна додати мітку в легенду? У цьому випадку з безперервними цифрами, я підозрюю, ви б використовували кольорову панель. А як щодо дискретних значень? наприклад, я можу додати 3 мітки в легенді для трьох моїх категорій?
Нейт

26

У 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()

введіть тут опис зображення


3
Для запису ви можете застосувати ALPHA як кольорову карту, якщо вказати (n, 4) масив у формі cаргументу зі значеннями альфа у четвертому стовпці. Якщо третя змінна Z, з shape=(n,1), це colors = numpy.hstack((numpy.zeros_like(z), numpy.zeros_like(z), numpy.ones_like(z), z/z.max()))дає дуже хороший ефект (звичайно, це можна змінити).
heltonbiker

Я отримую помилку: 'довжина послідовності rgba повинна бути або 3, або 4'
MattCochrane

1
@MattClimbs Я підозрюю, що ви викликаєте plt.plot, а не plt.scatter, як у прикладі.
smashbro

як додати кольорову панель до цього сюжету?
FaCoffee

2
@FaCoffee plt.colorbar()зробить це
Mathew Savage

10

Іноді вам може знадобитися накреслити колір саме на підставі випадку x-значення . Наприклад, у вас може бути кадр даних з 3 типами змінних та деякими точками даних. І ви хочете зробити наступне,

  • Точки графіку, що відповідають фізичній змінній 'A' в RED.
  • Точки графіку, що відповідають фізичній змінній 'B' у BLUE.
  • Графічні точки, що відповідають фізичній змінній '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()

Ділянка розмальовки розмальовки як функція від змінної x


як створити кольорову смугу для цього сюжету?
Маріям Рахмані Могаддам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.