python matplotlib 制图,绘制多子图,给可视化数据添加注释

import matplotlib.pyplot as plt


def read_file(filename):
    """
    @参数 filename:带路径的文件名,字符串
    接收文件名为参数,读取文件中的数据转为值是浮点数的二维列表,原文件的两列数据分别作为横、纵坐标数据。
    返回列表。
    """
    list = []
    with open(filename, 'r', encoding='utf-8') as infile:
        for line in infile:
            set = line.strip().split('\t')
            list.append(set[0])
            list.append(set[1])
    list1 = list[2:]
    return list1


def plot_xrd_a(data_list):
    """
    @参数 data_list:读文件获得的数据列表,列表类型
    接收一个列表为参数,列表的元素为包含x和y数据的列表
    绘制图a。
    """
    lsx = []
    lsy = []
    for i in range(0, data_list.__len__() - 1, 2):
        lsx.append(float(data_list[i]))
        lsy.append(float(data_list[i + 1]))

    plt.plot(lsx, lsy, linestyle='-', color='blue', linewidth=1)
    plt.show()

def plot_xrd_b(data_list):
    """
    @参数 data_list:读文件获得的数据列表,列表类型
    接收一个列表为参数,列表的元素为包含x和y数据的列表。
    绘制图b。
    """
    lsx = []
    lsy = []
    for i in range(0, data_list.__len__() - 1, 2):
        lsx.append(float(data_list[i]))
        lsy.append(float(data_list[i + 1]))

    plt.plot(lsx, lsy, linestyle='-', color='red', linewidth=1)
    plt.axvline(0, linestyle='--', color='blue', linewidth=1)
    plt.axhline(0, linestyle='--', color='red', linewidth=1)
    plt.xlabel(u'2d')#添加横轴注释
    plt.ylabel(u'intensity')#添加纵轴注释
    plt.show()


def top_five_peak(data_list):
    """
    @参数 data_list:读文件获得的数据列表,列表类型
    接收数据列表为参数,返回纵坐标值最大的5个峰的坐标的列表,降序排序。
    """
    lsy = []
    lsx = []
    s1 = []
    for i in range(0, data_list.__len__() - 1, 2):
        lsx.append(float(data_list[i]))
        lsy.append(float(data_list[i + 1]))
    s = list(zip(lsx, lsy))#将两列表拼接成[(),()]的形式
    s.sort(key=lambda x: x[1], reverse=True)
    for i in range(5):
        s1.append(s[i])
    return s1


def mark_peak(sort_of_ls):
    """
    @参数 sort_of_ls:排序后的数据列表,列表类型
    接收排序的数据,在指定的坐标点加注释。注释标记点相对横坐标偏移+30,纵坐标等高,
    注释文本为峰高,即y 值。
    """
    s = sort_of_ls

    for i in range(s.__len__()):
        plt.annotate(s[i][1],
                     xy = (s[i][0],s[i][1]),#x和y的坐标
                     xytext = (s[i][0]+3, s[i][1]+0),#写注释的位置
                     arrowprops = dict(arrowstyle='->'))#使用箭头




def plot_xrd_c(data_list, sort_of_ls):
    """
    @参数 data_list:读文件获得的数据列表,列表类型
    @参数 sort_of_ls:排序后的数据列表,列表类型
    接收一个元组为参数,元组的元素为包含x和y数据的列表
    绘制图c。
    """
    lsx = []
    lsy = []
    for i in range(0, data_list.__len__() - 1, 2):
        lsx.append(float(data_list[i]))
        lsy.append(float(data_list[i + 1]))

    plt.plot(lsx, lsy, linestyle='-', color='red', linewidth=1)
    plt.axvline(0, linestyle='--', color='blue', linewidth=1)
    plt.axhline(0, linestyle='--', color='red', linewidth=1)
    plt.xlabel(u'2d')
    plt.ylabel(u'intensity')
    mark_peak(sort_of_ls)
    plt.show()


def plot_xrd_d(data_list, sort_of_ls):
    """
    @参数 data_list:读文件获得的数据列表,列表类型
    @参数 sort_of_ls:排序后的数据列表,列表类型
    接收一个元组为参数,元组的元素为包含x和y数据的列表
    绘制图d。
    """
    plt.subplot(211)
    lsx = []
    lsy = []
    for i in range(0, data_list.__len__() - 1, 2):
        if float(data_list[i]) >= 5.0 and float(data_list[i]) <= 25.0:
            lsx.append(float(data_list[i]))
            lsy.append(float(data_list[i + 1]))
    plt.plot(lsx, lsy, linestyle='-', color='red', linewidth=1)
    # plt.axvline(0, linestyle='--', color='blue', linewidth=1)
    plt.axhline(0, linestyle='--', color='red', linewidth=1)
    plt.xlabel(u'2d')
    plt.ylabel(u'intensity')
    mark_peak(sort_of_ls)

    plt.subplot(2, 2, 3)
    lsx = []
    lsy = []
    for i in range(0, data_list.__len__() - 1, 2):
        if float(data_list[i]) >=6.7 and float(data_list[i]) <=7.0:
            lsx.append(float(data_list[i]))
            lsy.append(float(data_list[i+1]))
    plt.plot(lsx, lsy, linestyle='-', color='blue', linewidth=1)

    plt.subplot(2, 2, 4)
    lsx = []
    lsy = []
    for i in range(0, data_list.__len__() - 1, 2):
        if float(data_list[i]) >= 9.5 and float(data_list[i]) <= 10.0:
            lsx.append(float(data_list[i]))
            lsy.append(float(data_list[i + 1]))
    plt.ylim(0,10000)
    plt.plot(lsx, lsy, linestyle='-', color='blue', linewidth=1)
    plt.show()



if __name__ == '__main__':
    file = 'XRD.txt'  # 带路径文件名
    file_to_list = read_file(file)
    # 下面的4个图一个一个生成,不要同时生成
    # plot_xrd_a(file_to_list)  # 生成图a
    plot_xrd_b(file_to_list)     #   生成图b
    top_peak = top_five_peak(file_to_list)   # 生成图c和图d要先取消改行代码的注释
    # plot_xrd_c(file_to_list, top_peak)    #   生成图c
    #plot_xrd_d(file_to_list, top_peak)      #   生成图d

图像a

ed737da386620a292a15800173d9648a

图像b

64924f3d9a004313eeff4312ff042521

图像c

6f2a2ca3dd1295aecc510dca2d556cc7

图像d

aa2583ae662dd99b4cbbf9c0c51a87e7

 

import matplotlib.pyplot as plt


 

def read_file(filename):

    """

    @参数 filename:带路径的文件名,字符串

    接收文件名为参数,读取文件中的数据转为值是浮点数的二维列表,原文件的两列数据分别作为横、纵坐标数据。

    返回列表。

    """

    # 代码区


 

def plot_xrd_a(data_list):

    """

    @参数 data_list:读文件获得的数据列表,列表类型

    接收一个列表为参数,列表的元素为包含x和y数据的列表

    绘制图a。

    """

    # 代码区

def plot_xrd_b(data_list):

    """

    @参数 data_list:读文件获得的数据列表,列表类型

    接收一个列表为参数,列表的元素为包含x和y数据的列表。

    绘制图b。

    """

    # 代码区

def top_five_peak(data_list):

    """

    @参数 data_list:读文件获得的数据列表,列表类型

    接收数据列表为参数,返回纵坐标值最大的5个峰的坐标的列表,降序排序。

    """

    # 代码区


 

def mark_peak(sort_of_ls):

    """

    @参数 sort_of_ls:排序后的数据列表,列表类型

    接收排序的数据,在指定的坐标点加注释。注释标记点相对横坐标偏移+30,纵坐标等高,

    注释文本为峰高,即y 值。

    """

    # 代码区


 

def plot_xrd_c(data_list, sort_of_ls):

    """

    @参数 data_list:读文件获得的数据列表,列表类型

    @参数 sort_of_ls:排序后的数据列表,列表类型

    接收一个元组为参数,元组的元素为包含x和y数据的列表

    绘制图c。

    """

    # 代码区

def plot_xrd_d(data_list, sort_of_ls):

    """

    @参数 data_list:读文件获得的数据列表,列表类型

    @参数 sort_of_ls:排序后的数据列表,列表类型

    接收一个元组为参数,元组的元素为包含x和y数据的列表

    绘制图d。

    """

    # 代码区


 

if __name__ == '__main__':

    file = 'data/XRD_AFO.txt'  # 带路径文件名

    file_to_list = read_file(file)

    # 下面的4个图一个一个生成,不要同时生成

    plot_xrd_a(file_to_list)   #   生成图a

    # plot_xrd_b(file_to_list)     #   生成图b

    # top_peak = top_five_peak(file_to_list)   # 生成图c和图d要先取消改行代码的注释

    # plot_xrd_c(file_to_list, top_peak)    #   生成图c

    # plot_xrd_d(file_to_list, top_peak)      #   生成图d

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值