APLpy показывают маркеры, нормализованные с помощью карты цветов

Я использую APLpy для построения файла подгонки и хочу наложить маркеры на этот файл подгонки при определенных значениях ra,dec. Я хочу, чтобы цвета маркеров были закодированы с помощью другого параметра, скажем, величины.

Поэтому я читаю координаты маркера и соответствующие величины из текстового файла (позиции.дат):

ra         = np.genfromtxt('positions.dat', dtype=float, comments='%', delimiter=';', missing_values='_', skip_header=1, usecols = (0))                                 
dec        = np.genfromtxt('positions.dat', dtype=float, comments='%', delimiter=';', missing_values='_', skip_header=1, usecols = (1))                                 
magnitude  = np.genfromtxt('positions.dat', dtype=float, comments='%', delimiter=';', missing_values='_', skip_header=1, usecols = (2))                                   

Я определяю цветовую карту и ее нормализацию:

cmap1 = mpl.cm.YlOrBr                                                           
norm1 = mpl.colors.Normalize(10,20)                                                           

Все мои значения в файле position.dat находятся между 10 и 20 для проверки кода.

Я попытался построить маркеры следующим образом:

fits1.show_markers(ra,dec, cmap=cmap1, norm=norm1, edgecolor=magnitude, facecolor='none', marker='x', s= 4, linewidths=0.8)

Когда я делаю это, я всегда получаю ошибку:

ValueError: Color array must be two-dimensional

Файл position.dat выглядит так:

  ra    ;      dec     ;   magnitude
330.45  ;  -31.958333  ;      10.0
330.46  ;  -31.958333  ;      11.0
330.47  ;  -31.958333  ;      12.0
330.48  ;  -31.958333  ;      13.0
330.49  ;  -31.958333  ;      14.0
330.50  ;  -31.958333  ;      15.0
330.51  ;  -31.958333  ;      16.0
330.52  ;  -31.958333  ;      17.0
330.53  ;  -31.958333  ;      18.0
330.54  ;  -31.958333  ;      19.0
330.55  ;  -31.958333  ;      20.0

1 ответ

Решение

Проблема в том, что разброс matplotlib не может принимать значения для edgecolor а также facecolor это не цветные массивы (то есть массивы значений RGB). Правильный способ достичь того, что вы пытаетесь сделать, это использовать Scatter c аргумент, так что в этом случае:

fits1.show_markers(ra,dec, cmap=cmap1, norm=norm1,
                   c=magnitude, facecolor='none',
                   marker='x', s=4, linewidths=0.8)
Другие вопросы по тегам