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