Изменить масштабирование / Единицы цветовой шкалы в Matplotlib
Я строю несколько изображений FITS вместе с цветовой шкалой рядом с ними. Я в основном использую Aplpy для построения изображений, в том числе цветовой шкалы. Насколько я понимаю, Aplpy использует / полагается на matplotlib для своих механизмов построения графиков, поэтому, если есть способ сделать то, что я хочу, в Aplpy или Matplotlib, я думаю, это должно сработать.
Единицами изображения по умолчанию являются Jy (астрономическая единица). Но все значения довольно малы, где максимальная величина обычно составляет 0,01 Джи. Когда я показываю цветную полосу, метки тиков находятся в соответствующих единицах и имеют много нулей и занимают слишком много места.
Можно ли каким-то образом отобразить единицы измерения цветовой шкалы в виде мДж (1/1000 от джея)?
Например, тики в настоящее время: 0,000, 0,002, 0,004, ... Я хочу, чтобы они были: 0, 2, 4, ...
Решение может заключаться в том, чтобы либо масштабировать само изображение FITS, либо каким-либо образом настроить цветовую панель. В любом случае, я не знаю, как это сделать...
Заранее спасибо.
2 ответа
Я думаю, что есть много вариантов. Одним из них будет поставлять FuncFormatter
на цветную полосу,
func = lambda x,pos: "{:g}".format(x*1000)
fmt = matplotlib.ticker.FuncFormatter(func)
plt.colorbar(..., format=fmt)
Теперь я не знаю, что возвращает Aplpy, и вопрос не показывает никакого кода, поэтому я не могу предоставить работающее решение для этого конкретного случая.
Быстрый и грязный обходной путь, который я придумал:
- Сделайте копию исходного изображения FITS
- Отредактируйте заголовок скопированного изображения, чтобы изменить обычный BSCALE= 1.0 на BSCALE= 1000.0 (я использовал edhead из WCStools, чтобы вручную отредактировать заголовок)
- Используйте изображение с отредактированным заголовком в качестве входных данных для APLpy.
Результатом является изображение, построенное в единицах mJy вместо Jy.
Было бы здорово иметь для этого подходящее решение, в идеале в рамках APLpy. Спасибо, что задали точный вопрос, с которым я застрял прямо сейчас!