matplotlib colorbar для scatter


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

2   51   2011-05-19 23:28:32

2 ответа:

из документов matplotlib на scatter 1:

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

поэтому colorlist должен быть списком поплавков, а не списком кортежей, как у вас сейчас. ПЛТ.colorbar () хочет mappable объект, как 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

Если вы хотите разбросать по двум переменным и цвет по третьему,Альтаир может быть отличным выбором.

создание набора данных

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)

участка

enter image description here