我正在使用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
答案 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)