c=ls[key][0], linestyle=ls[key][1], linewidth=1) plt.ylim(phase_peak[0], phase_peak[-1]) ax.axes.xaxis.set_ticklabels([]) plt.locator_params(axis='y', nbins=3) ax.yaxis.set_label_position("right") ax.set_ylabel(key, fontsize=35) axis.append(ax) d = columns[key] pulse_off1 = d[:, peak_end[0] - 50:peak_end[0]] pulse_off2 = d[:, peak_end[1]:peak_end[1] + 50] pulse_off = np.concatenate((pulse_off1, pulse_off2), axis=1) cr_off = cor.weighed_corr_map(w, pulse_off, 0, -10000) cr_off = np.concatenate([ cr_off[:int(cr_off.shape[0] / 3), -int(cr_off.shape[1] / 3):], cr_off[-int(cr_off.shape[0] / 3):, :int(cr_off.shape[1] / 3)] ]) cr_off = np.std(cr_off) data_peak = d[:, peak_end[0]:peak_end[1]] cr = cor.weighed_corr_map(w, data_peak, 1, abs(cr_off)) ax = plt.subplot(grid[1 + j * 2:3 + j * 2, 0:2]) plt.sca(ax) norm = mpl.colors.Normalize(vmin=-1, vmax=1) #将1设为最红,-1为最蓝,中间的0为白
def plot_cor(w, data, data_all, flux, p_end, lag, star_name, freq, bin_num=1024): phase = np.linspace(0, 360, bin_num) fig = plt.figure(figsize=(9, 9)) grid = plt.GridSpec(18, 18, fig, wspace=0., hspace=0.) pulse_off11 = data[:, p_end[0][0] - 50:p_end[0][0]] pulse_off12 = data[:, p_end[0][1]:p_end[0][1] + 50] pulse_off21 = data[:, p_end[1][0] - 50:p_end[1][0]] pulse_off22 = data[:, p_end[1][1]:p_end[1][1] + 50] pulse_off = np.concatenate( (pulse_off11, pulse_off12, pulse_off21, pulse_off22), axis=1) cr_off = cor.weighed_corr_map(w, pulse_off, lag, -10000) cr_off = np.concatenate([ cr_off[:int(cr_off.shape[0] / 3), -int(cr_off.shape[1] / 3):], cr_off[-int(cr_off.shape[0] / 3):, :int(cr_off.shape[1] / 3)] ]) cr_off = np.std(cr_off) I_prof = data_all[:, 0, :].mean( 0) #(w[:,None]*data_all[:,0,peak_end[0]:peak_end[1]]).sum(0)/w.sum(0) Q_peak = data_all[:, 1, :].mean( 0) #(w[:,None]*data[:,1,peak_end[0]:peak_end[1]]).sum(0)/w.sum(0) U_peak = data_all[:, 2, :].mean( 0) #(w[:,None]*data[:,2,peak_end[0]:peak_end[1]]).sum(0)/w.sum(0) L_prof = np.sqrt(Q_peak**2 + U_peak**2) L_base = np.nanmean( np.concatenate([ L_prof[:p_end[0][0]], L_prof[p_end[1][1]:], L_prof[p_end[0][1]:p_end[1][0]] ], axis=0)) L_prof = L_prof - L_base V_prof = (w[:, None] * data_all[:, 3, :]).sum(0) / w.sum(0) top = max(I_prof) I_prof = I_prof / top L_prof = L_prof / top V_prof = V_prof / top flux_peak = np.concatenate( [data[:, p_end[0][0]:p_end[0][1]], data[:, p_end[1][0]:p_end[1][1]]], axis=1) flux_peak = flux_peak / top cr_block = cor.weighed_corr_map(w, flux_peak, lag, abs(cr_off)) cr = [] cr.append(cr_block[-(p_end[1][1] - p_end[1][0]):, :(p_end[0][1] - p_end[0][0])]) cr.append(cr_block[-(p_end[1][1] - p_end[1][0]):, (p_end[0][1] - p_end[0][0]):]) cr.append(cr_block[:-(p_end[1][1] - p_end[1][0]), :(p_end[0][1] - p_end[0][0])]) cr.append(cr_block[:-(p_end[1][1] - p_end[1][0]), (p_end[0][1] - p_end[0][0]):]) #plt.show() ax = [] for side, end in enumerate(p_end): phase_peak = phase[end[0]:end[1]] if side == 0: axis = plt.subplot(grid[:6, 6:10]), plt.subplot(grid[-4:, :6]) else: axis = plt.subplot(grid[:6, 10:]), plt.subplot(grid[6:14, :6]) ax.append(axis) plt.sca(ax[side][0]) plt.locator_params(axis='y', nbins=4) #plt.title(r'%s %s $n_{\rm{lag}}$ = %d' % (flux,freq, lag)) plt.plot(phase_peak, I_prof[end[0]:end[1]], label='I', c='black', linewidth=1) plt.plot(phase_peak, L_prof[end[0]:end[1]], label='L', c='red', linestyle='dashed', linewidth=1) plt.plot(phase_peak, V_prof[end[0]:end[1]], label='V', c='blue', linestyle='dotted', linewidth=1) plt.xlim(phase_peak[0], phase_peak[-1]) plt.tick_params(labelbottom=False) plt.xticks(phase[end[0]:end[1]][15:-5]) plt.locator_params(axis='x', nbins=side + 3) if side == 0: plt.ylabel('normalised flux') plt.sca(ax[side][1]) plt.plot(I_prof[end[0]:end[1]], phase_peak, c='black', linewidth=1) plt.plot(L_prof[end[0]:end[1]], phase_peak, c='red', linestyle='dashed', linewidth=1) plt.plot(V_prof[end[0]:end[1]], phase_peak, c='blue', linestyle='dotted', linewidth=1) ax[side][1].invert_xaxis() plt.ylim(phase_peak[0], phase_peak[-1]) plt.locator_params(axis='x', nbins=4) plt.yticks(phase[end[0]:end[1]][15:-5]) plt.locator_params(axis='y', nbins=side + 3) ax[side][1].yaxis.set_major_formatter( mpl.ticker.FormatStrFormatter('%.1f')) #plt.ylabel('phase/$^\circ$' ) align_yaxis([ax[0][0], ax[1][0]]) align_xaxis([ax[0][1], ax[1][1]]) ax[1][0].legend() axis_set = { 'right': [0, 0], 'top': [0, 1], 'left': [1, 0], 'bottom': [1, 1] } for key in axis_set: val = axis_set[key] axis = ax[val[0]][val[1]] axis.spines[key].set_linestyle(dash) axis.spines[key].set_linewidth(0.5) axis.spines[key].set_color('k') if val == [1, 1]: axis.set_xticks([]) if val == [1, 0]: axis.set_yticks([]) d = .01 kwargs = dict(transform=ax[1][0].transAxes, color='k', clip_on=False) #ax[1][0].plot((-d,+d),(-2*d,2*d),**kwargs) ax[1][0].plot((-6 / 8 * d, +6 / 8 * d), (1 - 2 * 8 / 6 * d, 1 + 2 * 8 / 6 * d), **kwargs) kwargs = dict(transform=ax[1][1].transAxes, color='k', clip_on=False) ax[1][1].plot((-d, +d), (-2 * d, 2 * d), **kwargs) #ax[1][1].plot((1-d,1+d),(-2*d,+2*d),**kwargs) ax_cr = [ plt.subplot(grid[6:14, 6:10]), plt.subplot(grid[6:14, 10:]), plt.subplot(grid[-4:, 6:10]), plt.subplot(grid[-4:, 10:]) ] spine_set = [['bottom', 'right'], ['left', 'bottom'], ['top', 'right'], ['top', 'left']] for b in range(4): plt.xticks([]) plt.yticks([]) plt.sca(ax_cr[b]) for key in spine_set[b]: ax_cr[b].spines[key].set_linestyle(dash) ax_cr[b].spines[key].set_linewidth(0.5) ax_cr[b].spines[key].set_color('k') phase_peak = phase[p_end[int(b / 3)][0]:p_end[int(b / 3)][1]] norm = mpl.colors.Normalize(vmin=-1, vmax=1) #将1设为最红,-1为最蓝,中间的0为白 cmap = mpl.cm.seismic cmap.set_bad(color='#404040', alpha=0.15) plt.imshow(cr[b], norm=norm, cmap=cmap, aspect='auto', origin='lower', extent=(phase_peak[0], phase_peak[-1], phase_peak[0], phase_peak[-1])) for bt in [2, 3]: ax_cr[bt].set_xticks( phase[p_end[int(bt / 3)][0]:p_end[int(bt / 3)][1]][15:-5]) ax_cr[bt].locator_params(axis='x', nbins=bt + 1) ax_cr[bt].xaxis.set_major_formatter( mpl.ticker.FormatStrFormatter('%.1f')) kwargs = dict(transform=ax_cr[0].transAxes, color='k', clip_on=False) ax_cr[0].plot((-6 / 4 * d, +6 / 4 * d), (-2 * d, 2 * d), **kwargs) ax_cr[0].plot((1 - 6 / 4 * d, 1 + 6 / 4 * d), (1 - 2 * d, 1 + 2 * d), **kwargs) kwargs = dict(transform=ax_cr[-1].transAxes, color='k', clip_on=False) ax_cr[-1].plot((-6 / 8 * d, +6 / 8 * d), (-4 * d, 4 * d), **kwargs) #ax_cr[-1].plot((1-d,1+d),(1-2*d,1+2*d),**kwargs) add = fig.add_subplot(grid[6:, 6:], frameon=False) add.set_xlabel('phase/$^\circ$') add.tick_params(labelcolor='none', top=False, bottom=False, left=False, right=False) add = fig.add_subplot(grid[6:, :6], frameon=False) add.set_ylabel('phase/$^\circ$', labelpad=12) add.tick_params(labelcolor='none', top=False, bottom=False, left=False, right=False) add = fig.add_subplot(grid[:6, 6:], frameon=False) add.set_title(r'%s %s $n_{\rm{lag}}$ = %d' % (flux, freq, lag)) add.tick_params(labelcolor='none', top=False, bottom=False, left=False, right=False) if flux == r'$|$ V $|$': flux = 'abs_V' #plt.savefig('%s_%s_lag=%d.pdf'%(flux,freq.replace(' ',''),lag)) plt.show()
def plot_cor(w, data_all, peak_end, lags, star_name, freq, bin_num=1024): phase = np.linspace(0, 360, bin_num) I_prof = np.nanmean( data_all[:, 0, peak_end[0]:peak_end[1]], axis=0 ) #(w[:,None]*data_all[:,0,peak_end[0]:peak_end[1]]).sum(0)/w.sum(0) Q_peak = np.nanmean( data_all[:, 1, peak_end[0]:peak_end[1]], axis=0) #(w[:,None]*data[:,1,peak_end[0]:peak_end[1]]).sum(0)/w.sum(0) U_peak = np.nanmean( data_all[:, 2, peak_end[0]:peak_end[1]], axis=0) #(w[:,None]*data[:,2,peak_end[0]:peak_end[1]]).sum(0)/w.sum(0) L_prof = np.sqrt(Q_peak**2 + U_peak**2) V_prof = np.nanmean(data_all[:, 3, peak_end[0]:peak_end[1]], axis=0) top = max(I_prof) I_prof = I_prof / top L_prof = L_prof / top V_prof = V_prof / top Q = data_all[:, 1] U = data_all[:, 2] L = np.sqrt(Q**2 + U**2) base_L = np.concatenate((L[:, :peak_end[0]], L[:, peak_end[1]:]), axis=1) # print(base_L.shape,base_L) base_L = np.nanmean(base_L, axis=1) # print(base_L.shape) L = L - base_L[:, None] L = L / top I = data_all[:, 0] / top abs_V = abs(data_all[:, -1] / top) phase_peak = phase[peak_end[0]:peak_end[1]] columns = {'I': I, 'L': L, 'V': abs_V} ls = { 'I': ['black', 'solid'], 'L': ['red', 'dashed'], 'V': ['blue', 'dotted'] } profile = {'I': I_prof, 'L': L_prof, 'V': V_prof} plt.rcParams['figure.figsize'] = (14.3, 28.4) fig = plt.figure() grid = plt.GridSpec(108, 14, fig, wspace=0.1, hspace=0.4) for j in np.arange(6): ax = plt.subplot(grid[8 + j * 16:8 + (j + 1) * 16, -2:]) plt.sca(ax) plt.plot(I_prof, phase_peak, c=ls['I'][0], linewidth=1, label='I') plt.plot(L_prof, phase_peak, c=ls['L'][0], linestyle=ls['L'][1], linewidth=1, label='L') plt.plot(V_prof, phase_peak, c=ls['V'][0], linestyle=ls['V'][1], linewidth=1, label='V') plt.ylim(phase_peak[0], phase_peak[-1]) plt.locator_params(axis='x', nbins=3) plt.locator_params(axis='y', nbins=3) ax.axes.xaxis.set_ticklabels([]) ax.tick_params(labelleft=False, labelright=True) if j == 0: plt.legend(loc='lower left', bbox_to_anchor=(0.05, 1.02), borderaxespad=0.0, ncol=1, frameon=False) jj = -1 axis = [] for key, data in columns.items(): jj += 1 pulse_off1 = data[:, peak_end[0] - 50:peak_end[0]] pulse_off2 = data[:, peak_end[1]:peak_end[1] + 50] pulse_off = np.concatenate((pulse_off1, pulse_off2), axis=1) ax1 = plt.subplot(grid[:8, 4 * jj:(jj + 1) * 4]) plt.sca(ax1) plt.locator_params(axis='y', nbins=3) plt.locator_params(axis='x', nbins=3) plt.plot(phase_peak, profile[key] / max(abs(profile[key])), label=key, c=ls[key][0], linestyle=ls[key][1], linewidth=1) plt.xlim(phase_peak[0], phase_peak[-1]) ax1.axes.xaxis.set_ticklabels([]) axis.append(ax1) title = key # if key == "V": # title = r'$|$ V $|$' plt.title(title, fontsize=35, ha='center', va='bottom', position=(0.5, 1.025)) if jj == 0: ax1.yaxis.set_label_position("left") ax1.set_ylabel('normalised flux') ax1.tick_params(labelright=False) else: ax1.axes.yaxis.set_ticklabels([]) for index, lag in enumerate(lags): cr_off = cor.weighed_corr_map(w, pulse_off, lag, -10000) cr_off = np.concatenate([ cr_off[:int(cr_off.shape[0] / 3), -int(cr_off.shape[1] / 3):], cr_off[-int(cr_off.shape[0] / 3):, :int(cr_off.shape[1] / 3)] ]) cr_off = np.std(cr_off) data_peak = data[:, peak_end[0]:peak_end[1]] cr = cor.weighed_corr_map(w, data_peak, lag, abs(cr_off)) ax = plt.subplot(grid[8 + index * 16:24 + index * 16, jj * 4:(jj + 1) * 4]) plt.sca(ax) norm = mpl.colors.Normalize(vmin=-1, vmax=1) #将1设为最红,-1为最蓝,中间的0为白 cmap = mpl.cm.seismic cmap.set_bad(color='#404040', alpha=0.15) corr_map = plt.imshow(cr, norm=norm, cmap=cmap, aspect='equal', origin='lower', extent=(phase_peak[0], phase_peak[-1], phase_peak[0], phase_peak[-1])) ax.axes.yaxis.set_ticklabels([]) ax.tick_params(labeltop=False) plt.locator_params(axis='x', nbins=3) plt.locator_params(axis='y', nbins=3) if jj == 0: plt.ylabel(r'$\mathrm{\mathit{n}_{\rm{lag}}}$=%d' % lag, fontsize=35) if lag != lags[-1]: ax.axes.xaxis.set_ticklabels([]) add = fig.add_subplot(grid[:-4, :], frameon=False) add.tick_params(labelcolor='none', top=False, bottom=False, left=False, right=False) add.minorticks_off() add.xaxis.set_label_position("bottom") add.set_xlabel('phase/$^\circ$', fontsize=35) add.yaxis.set_label_position("right") add.set_ylabel('phase/$^\circ$', fontsize=35) add.yaxis.set_label_coords(1.08, 0.5) axis = np.array(axis) align_yaxis(axis) ca = fig.add_subplot(grid[-1, :-2], frameon=False) pos = ca.get_position() pos2 = [pos.x0, pos.y0 - 0.015, pos.width, pos.height] ca.set_position(pos2) plt.sca(ca) plt.colorbar(corr_map, cax=ca, orientation='horizontal') al = fig.add_subplot(111, frameon=False) al.tick_params(labelcolor='none', top=False, bottom=False, left=False, right=False) al.minorticks_off() al.set_title('PSR %s %s' % (star_name, freq), fontsize=35, ha='center', va='bottom', position=(0.5, 1.035)) plt.savefig('%s_%s.pdf' % (star_name, freq.replace(' ', '')), bbox_inches='tight', pad_inches=0) plt.show()
def cor_block(gs, data, p_end, lag, tl=False): ssgrid = gs.subgridspec(3, 3, hspace=0, wspace=0) pulse_off11 = data[:, p_end[0][0] - 50:p_end[0][0]] pulse_off12 = data[:, p_end[0][1]:p_end[0][1] + 50] pulse_off21 = data[:, p_end[1][0] - 50:p_end[1][0]] pulse_off22 = data[:, p_end[1][1]:p_end[1][1] + 50] pulse_off = np.concatenate( (pulse_off11, pulse_off12, pulse_off21, pulse_off22), axis=1) cr_off = cor.weighed_corr_map(w, pulse_off, lag, -10000) cr_off = np.concatenate([ cr_off[:int(cr_off.shape[0] / 3), -int(cr_off.shape[1] / 3):], cr_off[-int(cr_off.shape[0] / 3):, :int(cr_off.shape[1] / 3)] ]) cr_off = np.std(cr_off) flux_peak = np.concatenate( [data[:, p_end[0][0]:p_end[0][1]], data[:, p_end[1][0]:p_end[1][1]]], axis=1) flux_peak = flux_peak cr_block = cor.weighed_corr_map(w, flux_peak, lag, abs(cr_off)) cr = [] cr.append(cr_block[-(p_end[1][1] - p_end[1][0]):, :(p_end[0][1] - p_end[0][0])]) cr.append(cr_block[-(p_end[1][1] - p_end[1][0]):, (p_end[0][1] - p_end[0][0]):]) cr.append(cr_block[:-(p_end[1][1] - p_end[1][0]), :(p_end[0][1] - p_end[0][0])]) cr.append(cr_block[:-(p_end[1][1] - p_end[1][0]), (p_end[0][1] - p_end[0][0]):]) ax_cr = [ plt.subplot(ssgrid[:2, 0]), plt.subplot(ssgrid[:2, 1:]), plt.subplot(ssgrid[-1, 0]), plt.subplot(ssgrid[-1, 1:]) ] spine_set = [['bottom', 'right'], ['left', 'bottom'], ['top', 'right'], ['top', 'left']] xt = {0: [70], 1: [225, 250], 2: [70], 3: [225, 250]} yt = {0: [225, 250], 1: [225, 250], 2: [70], 3: [70]} phase = np.linspace(0, 360, 1024) phase_IP = phase[p_end[0][0]:p_end[0][1]] phase_MP = phase[p_end[1][0]:p_end[1][1]] phase_peak = { 0: (phase_IP[0], phase_IP[-1], phase_MP[0], phase_MP[-1]), 1: (phase_MP[0], phase_MP[-1], phase_MP[0], phase_MP[-1]), 2: (phase_IP[0], phase_IP[-1], phase_IP[0], phase_IP[-1]), 3: (phase_MP[0], phase_MP[-1], phase_IP[0], phase_IP[-1]) } ax_cr[0].tick_params(bottom=False, right=False) #ax_cr[0].tick_params(which='minor', bottom=False,right=False) ax_cr[1].tick_params(bottom=False, left=False) #ax_cr[1].tick_params(which='minor', bottom=False,left=False) ax_cr[2].tick_params(top=False, right=False) #ax_cr[1].tick_params(which='minor', top=False,right=False) ax_cr[3].tick_params(top=False, left=False) #ax_cr[3].tick_params(which='minor', top=False,left=False) for b in range(4): plt.sca(ax_cr[b]) for key in spine_set[b]: ax_cr[b].spines[key].set_linestyle(dash) ax_cr[b].spines[key].set_linewidth(0.5) ax_cr[b].spines[key].set_color('k') plt.xticks(xt[b]) plt.yticks(yt[b]) norm = mpl.colors.Normalize(vmin=-1, vmax=1) #将1设为最红,-1为最蓝,中间的0为白 cmap = mpl.cm.seismic cmap.set_bad(color='#404040', alpha=0.15) plt.imshow(cr[b], norm=norm, cmap=cmap, aspect='auto', origin='lower', extent=phase_peak[b]) if tl == True: for bt in [2, 3]: ax_cr[bt].tick_params(labelbottom=True) ax_cr[bt].locator_params(axis='x', nbins=bt - 1) d = 0.03 kwargs = dict(transform=ax_cr[0].transAxes, color='k', clip_on=False) #ax_cr[0].plot((-3/2*d,+3/2*d),(-d,d),**kwargs) #ax_cr[0].plot((1-3/2*d,1+3/2*d),(1-d,1+d),**kwargs) kwargs = dict(transform=ax_cr[-1].transAxes, color='k', clip_on=False)