APLpy显示由色图标准化的标记

时间:2014-09-17 23:56:15

标签: python matplotlib aplpy

我正在使用APLpy绘制拟合文件,并希望在特定的ra,dec值上覆盖该拟合文件上的标记。我希望标记的颜色可以用另一个参数编码,比方说一个量级。

所以我所做的是从文本文件(positions.dat)中读取标记坐标和相应的大小:

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)                                                           

我在positions.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

positions.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 个答案:

答案 0 :(得分:1)

问题在于,matplotlib的散布不能取值edgecolorfacecolor的非彩色数组(即RGB值数组)的值。实现您要做的事情的正确方法是使用scatter的c参数,所以在这种情况下:

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