«Цвет для значения» не работает, как ожидалось - PullRequest
0 голосов
/ 22 мая 2018

Если я запускаю следующее:

print(cm.jet(0))
print(cm.jet(0.25))
print(cm.jet(0.5))
print(cm.jet(0.75))
print(cm.jet(0.99))
print(cm.jet(1))

Я получаю:

(0.0, 0.0, 0.5, 1.0)
(0.0, 0.503921568627451, 1.0, 1.0)
(0.4901960784313725, 1.0, 0.4775458570524984, 1.0)
(1.0, 0.5816993464052289, 0.0, 1.0)
(0.535650623885918, 0.0, 0.0, 1.0)
(0.0, 0.0, 0.517825311942959, 1.0)

Итак, я получаю один и тот же цвет для 0 и 1. Я что-то не так делаю?Я использую версию 2.1.2 matplotlib и версию 3.5 python.

ОБНОВЛЕНИЕ

Хорошо, это как-то связано с int и float.

Итак:

print(cm.jet(0))
print(cm.jet(0.25))
print(cm.jet(0.5))
print(cm.jet(0.75))
print(cm.jet(0.99))
print(cm.jet(1.0))
print(cm.jet(1))

дает:

(0.0, 0.0, 0.5, 1.0)
(0.0, 0.503921568627451, 1.0, 1.0)
(0.4901960784313725, 1.0, 0.4775458570524984, 1.0)
(1.0, 0.5816993464052289, 0.0, 1.0)
(0.535650623885918, 0.0, 0.0, 1.0)
(0.5, 0.0, 0.0, 1.0)
(0.0, 0.0, 0.517825311942959, 1.0)

1 Ответ

0 голосов
/ 22 мая 2018

Это действительно сбивает с толку.Есть два способа получить цвета из colormap .

  • Вызов его с ('n массивом) значениями с плавающей запятой между 0. и 1..Здесь 0. - первый цвет карты, 1. - последний.
  • Вызов его с индексом, т. Е. (N массивом) целочисленных значений в диапазоне от 0 до n-1, где n будет количеством цветов в цветовой карте.Многие цветовые карты имеют 256 цветов, но вы можете проверить атрибут N, например, print(cm.jet.N) печать 256.

Это означает, что вы получаете те же цвета через

from matplotlib import cm

cm.jet(0.0) == cm.jet(0)
cm.jet(1.0) == cm.jet(255)

cm.jet([0.0, 0.5, 1.0]) == cm.jet([0, 128, 255])

В случае «непрерывной» цветовой карты, такой как jet или значение по умолчанию viridis, вы обычно должны использовать плавающие значения и вообще не беспокоиться об индексах.

В случае "дискретной" цветовой карты, такой как tab10, индексация становится интересной.Например, цветовая карта tab10 содержит только 10 цветов.Чтобы получить третий цвет этой цветовой карты, вызов

cm.tab10(2)

намного проще, чем деление на количество цветов для получения соответствующего значения с плавающей запятой.

Рекомендуемое чтение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...