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

python怎么把列表画成图 python list 画图_后端

图像b

python怎么把列表画成图 python list 画图_算法_02

图像c

python怎么把列表画成图 python list 画图_开发语言_03

图像d

python怎么把列表画成图 python list 画图_算法_04

 

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