кольорова панель matplotlib для розсіювання


89

Я працюю з даними, у яких дані мають 3 параметри побудови графіків: x, y, c. Як створити власне значення кольору для діаграми розсіювання?

Розширюючи цей приклад, який я намагаюся зробити:

import matplotlib
import matplotlib.pyplot as plt
cm = matplotlib.cm.get_cmap('RdYlBu')
colors=[cm(1.*i/20) for i in range(20)]
xy = range(20)
plt.subplot(111)
colorlist=[colors[x/2] for x in xy] #actually some other non-linear relationship
plt.scatter(xy, xy, c=colorlist, s=35, vmin=0, vmax=20)
plt.colorbar()
plt.show()

але результат є TypeError: You must first set_array for mappable

Відповіді:


196

З документів matplotlib на скатер 1 :

cmap використовується лише в тому випадку, якщо c - масив з поплавками

Отже, список кольорів повинен бути списком плаваючих, а не списком кортежів, як у вас зараз. plt.colorbar () хоче відобразити об'єкт, наприклад CircleCollection, який повертає plt.scatter (). Потім vmin і vmax можуть контролювати межі вашої кольорової панелі. Речі поза vmin / vmax отримують кольори кінцевих точок.

Як це працює для вас?

import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

Приклад зображення


Я спробував і отримав 'AxesSubplot' object has no attribute 'colorbar'. Я зробив ax.colorbar()... що я роблю не так?
Лукас Аймаретто

Цей приклад не забезпечує чіткого застосування при використанні інтерфейсу ООП matplotlib
Ryszard Cetnarski

18

Ось спосіб ООП додавання кольорової панелі:

fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)

Коли я це роблю, я закінчую з тим, що графік повністю масштабується, так що всі точки знаходяться в межах ділянки ділянки вкрай праворуч, а кольорова панель - дуже тонка лінія внизу.
Марсес

Правильна відповідь, безпосереднє використання pltдля побудови кольорової панелі - це не рекомендований спосіб. Ваш похвальний спосіб.
GoingMyWay

2

Якщо ви хочете розсіяти дві змінні, а колір - третю, Altair може стати чудовим вибором.

Створення набору даних

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(40*np.random.randn(10, 3), columns=['A', 'B','C'])

Альтаїрський сюжет

from altair import *
Chart(df).mark_circle().encode(x='A',y='B', color='C').configure_cell(width=200, height=150)

Ділянка

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

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