保存图片到pdf中

# encoding=utf-8
# 文件功能:查看带入系数所得的结果图 , 1d画图

from matplotlib.backends.backend_pdf import PdfPages
import numpy as np
import matplotlib.pyplot as plt
pic_to_save_pdf  = PdfPages('paper_used_pic.pdf')


# 特定的文件后缀保存,筛选后的特定后缀
def file_select(data_dir,*args):  #
    # data_dir is file_dir//
    # *args is 'png','jpeg','bmp' so on
    import  glob
    # *args是要筛选的的后缀名称可以选择多个
    length = len(args)
    file_list = []
    for i in range(length):
        file_list = file_list + list(glob.glob(data_dir + '/*.'+str(args[i])))
    # file_list = list(glob.glob(data_dir + '/*.png')) + list(glob.glob(data_dir + '/*.jpg'))   # get name list of all .png files
    # data = []
    # print(file_list) # 得到文件的路径列表
    return file_list


# 新建文件保存图片
def makedir(dir):
    import os
    dir = dir.strip()
    isExist = os.path.exists(dir)
    if not isExist:
        os.makedirs(dir)
        return True
    else:
        return False

# 归一化到0-1 范围
def normalizationTobetween0and1(array):
    max_array = np.max(array)
    min_array = np.min(array)
    array_nor = (array - min_array) / (max_array - min_array) * 1.0
    return array_nor

if __name__ == '__main__':
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

    import numpy as np
    mode_save = '..//..//..//data_npy//40mode_fushu.npy'
    # 选择哪个系数文档 ---------------要修改-------------------------------------
    mode_sum = np.load(mode_save)
    k_save_dir = '..//k_to_save'
    k_list = file_select(k_save_dir, 'npy')
    k_list = sorted( k_list, key=lambda i: len(i), reverse=False)
    print( 'k list is ' , k_list )
    (count)= 33
    for k_one in k_list :
        # k_one=k_list[-1]
        k_to_load = k_one
        k_to_load = np.load(k_to_load)
        (count) = int(count)
        # k_save =k_one
        # pic_save_dir = 'pic_to_save_new//1dsmall//No' + str(int(int(count)))

        pic_save_dir = 'pic_to_save//1dsmall//No' + str(int(int(count)))

        (count) = int(count) * 2
        makedir(pic_save_dir)
        k = k_to_load # k为40,1的复数矩阵
        print('No',str(int(int(count))),'is',k)
        mode_number = 40
        mode_fenliang = 3


        rows ,cols ,jingdu22= mode_sum.shape
        jingdu = int((max(cols ,rows,jingdu22))**0.5)
        print(rows,cols,jingdu22)
        # 得到复数矩阵
        # mode_fushu = np.zeros((mode_number, mode_fenliang, jingdu * jingdu), dtype=complex)  # 40 , 3 ,801**2
        # 得到复数矩阵 , 【40,3,801*801】维度 , 0维度是ex ,1维度是ey ,2 维度是ez

        mode_fushu = mode_sum # 【40,3,1001*1001】维度


        # k shape  40 , 1 ()
        k_a,k_b = k.shape
        #v 结果为3 , 801**2  维度
        mode_result = np.zeros((mode_fenliang, jingdu**2 ) , dtype=complex)
        for everypoint in range(jingdu**2):
            for fenliang in range(mode_fenliang):
                for i in range(mode_number):
                    mode_result[fenliang,everypoint] += k[i,0] * mode_fushu[i,fenliang,everypoint]

        # 3 , 801**2
        mode_result =mode_result
        mode_pic = np.zeros((1,jingdu**2),dtype=float)
        # 将e变为1 ,801**2
        for point in range(jingdu**2):
            for i in range(mode_fenliang):
                mode_pic[0, point] = mode_pic[0, point] + (np.abs(mode_result[i,point]))**2
        mode_pic = mode_pic

        # 叠加的结果 去掉绝对值
        esum_temp = np.resize(np.abs(mode_pic), (jingdu, jingdu))
        esum_temp = normalizationTobetween0and1(esum_temp)

        plt.ion()
        plt.imshow(esum_temp, cmap='plasma')
        plt.title('ex的第' + '个解,所采用的系数对所有模式叠加得到的强度结果图')
        cbar = plt.colorbar()
        cbar.set_label('intensity', rotation=-90, va='bottom')

        max_index = np.max(esum_temp)
        min_index = np.min(esum_temp)
        interval_temp = (max_index - min_index) / 5
        cbar.set_ticks([min_index, min_index + 1 * interval_temp,
                        min_index + 2 * interval_temp, min_index + 3 * interval_temp,
                        min_index + 4 * interval_temp, min_index + 5 * interval_temp])
        # set the font size of colorbar
        cbar.ax.tick_params(labelsize=8)
        save_place = pic_save_dir + '//' + 'esum' + '.png'
        # plt.savefig(save_place)
        pic_to_save_pdf.savefig()
        plt.pause(0.005)

        plt.close('all')

        # 画出red 和black的图像
        for bilibli in range(1):
            for red in range(1):
                plt.ion()
                # red 保存
                # 寻找沿着y轴中心的画图方式
                x_label = np.arange(-1 * ((jingdu) // 4), (jingdu) // 4 + 1)
                # 归一化吗?no

                nouse_red = np.array(
                    esum_temp[(jingdu // 2 - (jingdu // 4)):(jingdu // 2 + (jingdu // 4) + 1),
                    (jingdu // 2 - (jingdu // 4)): ((jingdu // 2) + (jingdu // 4) + 1)]
                )
                y_label = (
                    np.abs(np.resize(nouse_red[jingdu // 4, :], (jingdu // 2 + 1, 1)))
                )
                pic_save_dir_red = pic_save_dir
                makedir(pic_save_dir_red)
                save_place = pic_save_dir_red + '//' + 'mode_red' + '.png'

                plt.title('red-mode序号是:')
                plt.plot(x_label, y_label)
                # plt.savefig(save_place)
                pic_to_save_pdf.savefig()
                plt.show()
                plt.pause(0.005)
                plt.close('all')

            # 画出black
            for black in range(1):
                plt.ion()
                # 对黑线进行画图
                x_label = np.arange(-1 * ((jingdu) // 4), (jingdu) // 4 + 1)
                print('xlabel is ', x_label, x_label.shape)
                # 归一化吗? no!
                nouse_black = np.array(
                    esum_temp[jingdu // 2 - jingdu // 4:jingdu // 2 + jingdu // 4 + 1,
                    jingdu // 2 - jingdu // 4:jingdu // 2 + jingdu // 4 + 1]
                )
                y_label = (
                    np.abs(np.resize(nouse_black[:, jingdu // 4], (jingdu // 2 + 1, 1)))
                )
                print('ylabel is ', y_label, y_label.shape)
                pic_save_dir_black = pic_save_dir
                makedir(pic_save_dir_black)

                save_place = pic_save_dir_black + '//' + 'mode_black' + '.png'

                plt.title('black-mode的序号是:')
                plt.plot(x_label, y_label)
                # plt.savefig(save_place)
                pic_to_save_pdf.savefig()
                plt.show()
                plt.pause(0.005)
                plt.close('all')

        # 沿着对角线01画出图像:
        for bibi in range(1):
            # 对角01
            plt.ion()
            # red 保存
            # 寻找沿着对角线轴中心的画图方式,点的个数都是相同的
            x_label = np.arange(-1 * ((jingdu) // 4), (jingdu) // 4 + 1)
            # 归一化吗?no

            duijiaoDict = []
            for temp_number in range(jingdu):
                duijiaoDict.append(esum_temp[temp_number, temp_number])
            nouse_duijiao = np.resize(duijiaoDict, (jingdu, 1))

            y_label = (
                np.abs(np.resize(nouse_duijiao[jingdu // 2 - jingdu // 4:jingdu // 2 + jingdu // 4 + 1],
                                 (jingdu // 2 + 1, 1)))
            )
            pic_save_dir_duijiao = pic_save_dir
            makedir(pic_save_dir_duijiao)
            save_place = pic_save_dir_duijiao + '//' + 'mode_duijiao01' + '.png'

            plt.title('duijiao01-mode序号是:')
            plt.plot(x_label, y_label)
            # plt.savefig(save_place)
            pic_to_save_pdf.savefig()
            plt.show()

            plt.pause(0.005)
            plt.close('all')

        # 沿着对角线02画出图像:
        for bibi in range(1):
            # 对角01
            plt.ion()
            # red 保存
            # 寻找沿着对角线轴中心的画图方式,点的个数都是相同的
            x_label = np.arange(-1 * ((jingdu) // 4), (jingdu) // 4 + 1)
            # 归一化吗?no

            duijiaoDict = []
            for temp_number in range(jingdu):
                duijiaoDict.append(esum_temp[temp_number, jingdu - temp_number - 1])
            nouse_duijiao = np.resize(duijiaoDict, (jingdu, 1))

            y_label = (
                np.abs(np.resize(nouse_duijiao[jingdu // 2 - jingdu // 4:jingdu // 2 + jingdu // 4 + 1],
                                 (jingdu // 2 + 1, 1))
                       )
            )

            pic_save_dir_duijiao = pic_save_dir
            makedir(pic_save_dir_duijiao)
            save_place = pic_save_dir_duijiao + '//' + 'mode_duijiao02' + '.png'

            plt.title('duijiao02-mode序号是:')
            plt.plot(x_label, y_label)
            # plt.savefig(save_place)
            pic_to_save_pdf.savefig()
            plt.show()
            plt.pause(0.005)
            plt.close('all')

    pic_to_save_pdf.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值