Пример #1
0
                     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为白
Пример #2
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()
Пример #3
0
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)