Подтвердить что ты не робот

Matplotlib colorbar для разброса

Я работаю с данными, у которых данные имеют 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

4b9b3361

Ответ 1

Из документов matplotlib по разбросу 1:

cmap используется, только если c - массив поплавков

Таким образом, список расцветок должен быть списком float, а не списком кортежей, как у вас сейчас. 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()

Image Example

Ответ 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)

Участок

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

Ответ 3

Вот ООП способ добавления цветовой шкалы:

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