Построение цветовой шкалы в Python 3 - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь раскрасить точки панели ошибок на основе цвета из массива. Но получаю ошибку. Мой код показан ниже:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable, coolwarm as cmap
from matplotlib.colors import Normalize

fig = plt.figure(1)
sp = fig.add_subplot(1, 1, 1)
sp.set_xlabel(r'$x$')
sp.set_ylabel(r'$y$')

x = np.random.rand(10)
y = np.random.rand(10)
M = np.logspace(9, 10, 10)
norm = Normalize(vmin=8, vmax=11,clip=False)  # controls the min and max of the colorbar
smap = ScalarMappable(cmap=cmap, norm=norm)
for xi, yi, Mi in zip(x, y, M):
    c = cmap(norm(np.log10(Mi)))  # make sure to color by log of mass, not mass
    sp.errorbar(
        xi,
        yi,
        yerr=[[.1], [.1]],
        xerr=[[.1], [.1]],
        ecolor=c,
        marker='o',
        mec=c,
        mfc=c
    )

cb = plt.colorbar(smap)
cb.set_label(r'$\log_{10}M$')

Я получаю следующую ошибку: TypeError: Сначала вы должны установить set_array для сопоставления

1 Ответ

2 голосов
/ 14 февраля 2020

Для matplotlib <3.1 вам нужно установить массив - который может быть пустым </p>

sm = ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm)

Для matplotlib> = 3.1 это больше не нужно.

sm = ScalarMappable(cmap=cmap, norm=norm)
fig.colorbar(sm)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...