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


Comments