Matplotlib Colorbar для разброса - PullRequest
67 голосов
/ 19 мая 2011

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

Ответы [ 3 ]

164 голосов
/ 20 мая 2011

Из документации matplotlib по scatter 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()

Image Example

3 голосов
/ 06 июля 2017

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

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

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

2 голосов
/ 10 апреля 2019

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

fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...