Получить реальный диапазон в цветовой карте с LogLocator - PullRequest
0 голосов
/ 07 декабря 2018

Следующий код

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

n = 50
A = np.tile(np.linspace(-26,-2,n),(n,1))
plt.figure()
plt.contourf(A)
plt.colorbar()

B = np.tile(np.logspace(-26,-2,n),(n,1))
plt.figure()
plt.contourf(B,locator=ticker.LogLocator())
plt.colorbar()

plt.show()

создает эти два графика: enter image description here enter image description here

Для линейного случая (первыйизображение), каждый цвет в цветовой шкале присутствует в изображении, а минимальное и максимальное значения A лежат соответственно в первом и последнем цветовом бункере (идущий снизу вверх).

Для регистрационного журнала (второйизображение), минимальные и максимальные значения цветовой шкалы больше не имеют смысла для меня.Минимальное значение B составляет 10 ^ -26, поэтому это значение лежит на границе между первым и вторым цветовым интервалом цветовой карты, но в изображении нет ни одного из этих двух первых цветов.Максимальное значение B составляет 10 ^ -2, и оно лежит на границе между предыдущими перед последними и предыдущими последними цветными ячейками, поэтому его можно рассмотреть в любом из них.Но тогда почему последняя (желтая) цветная корзина здесь, тем более что на изображении нет желтого?

Поэтому я считаю странным поведение пределов цветовой карты (для LogLocator) по умолчанию, потому что это не так.представитель реального (или, по крайней мере, приблизительного) диапазона данных (как в линейном случае), и он добавляет цветные ячейки (в этом случае 3: 2 ниже минимального и 1 выше максимального), которых нет на изображении.

Это ошибка или есть что-то, чего я не понял?

@ В приведенном ниже ответе ImportanceOfBeingErnest приведены выходные данные, которые мне нужны, но мне кажется, что мне не нужно этого делатьи что я могу ожидать того же поведения от карты цветов с линейными значениями, и от преобразователя цвета LogLocator.

1 Ответ

0 голосов
/ 07 декабря 2018

Если вы хотите, чтобы в вашем контурном графике были определенные интервалы, вам необходимо выбрать их и передать их в контурную функцию через аргумент levels.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

n = 50
A = np.tile(np.logspace(-26,-2,n),(n,1))
levels = 10.**np.arange(-26,-1,4)
plt.figure()
plt.contourf(A,levels=levels, locator=ticker.LogLocator())
plt.colorbar()
plt.show()

enter image description here

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