【头歌-Python】9.1 X射线衍射曲线绘制(project)第3~4关

news2024/11/24 14:44:50

第3关:X 射线衍射曲线峰值

任务描述

本关任务:读文件中的数据绘制线图形并加绘制峰值。

相关知识

为了完成本关任务,你需要掌握:

  1. python 读取文件中的数据
  2. 使用 matplotlib 绘制图形

python 读取文件
python读取文件可以用以下函数实现:

def read_file(file):
    """ 读文件file, 返回值为二维列表,其中数据是字符串类型。 """
    with open(file, 'r', encoding='utf-8') as file:
        data_list = [line.strip().split() for line in file]
    return data_list

读为数值类型

def read_file(file):
    """ 读文件file, 返回值为二维列表,其中数据是数值类型。 """
    with open(file, 'r', encoding='utf-8') as file:
        data_list = [list(map(float,line.strip().split())) for line in file]
    return data_list

编程要求

根据提示,在右侧编辑器中补充代码,绘制 X 射线衍射峰值图。具体要求如下:

  1. 找出最高的5个峰,输出峰点坐标,
  2. 在图上标注峰点的纵坐标值,坐标值从数据中读取,参数参模板中要求。
  3. 绘制横坐标[5,25]之间的曲线图
  4. 图名为“X射线衍射图谱”
  5. 纵坐标标签为“Intensity”,横坐标标签为“2d”,
  6. 设置线颜色为“红色”,实线。
  7. 绘制红色破折线为横坐标轴,
  8. 要求中文显示正常,宋体’SimSun’,字号用默认值。

测试说明

平台会对你编写的代码进行测试:

输出示例:
在这里插入图片描述

参考代码

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimSun']
plt.rcParams['axes.unicode_minus'] = False

def read_file(file):
    """ 读文件file, 返回值为二维列表,其中数据是字符串类型。 """
    with open(file, 'r') as f:
        data_list = [list(map(eval, line.strip().split())) for line in f.readlines()[1:]]
    	return data_list

def top_five_peak(data_list):
    """参数为读文件获得的数据列表,返回纵坐标值最大的5个峰的坐标的列表,降序排序。"""
    res = sorted(data_list, key=lambda x:x[1], reverse=True)
    return res[:5]

def plot_xrd(data_list):
    """接收二维列表为参数,绘制曲线,红色实线"""
    x = [d[0] for d in data_list]
    y = [d[1] for d in data_list]
    plt.plot(x, y, 'r')

def mark_peak(peak_ls):
    """参数为峰值数据列表,在指定的坐标点加注释。注释标记点相对横坐标偏移+30,纵坐标等高,
    注释文本为峰高,即y 值,注释文本字号为12,箭头类型"->"。
    """
    for x, y in peak_ls:
        plt.annotate(f'{y}', xy=(float(x), float(y)), xytext=(+30, 0),
            textcoords='offset points', fontsize=12,
            arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

def add_label():
    """增加坐标轴标识与图名"""
    plt.xlim(5, 25)
    plt.axhline(0, linestyle='--', color='b')
    plt.title("X射线衍射图谱")
    plt.xlabel("2d")
    plt.ylabel("Intensity")

if __name__ == '__main__':
    data = read_file('XRD_AFO.txt')
    peak_lst = top_five_peak(data)
    plot_xrd(data)
    mark_peak(peak_lst)
    add_label()
    plt.savefig('result/result.jpg')
    plt.show()

第4关:X 射线衍射曲线多子图绘制

任务描述

本关任务:使用matplotlib绘制图形。

相关知识

为了完成本关任务,你需要掌握:

  1. python 读取文件中的数据
  2. 多子图绘图

python 读取文件
python读取文件可以用以下函数实现:

def read_file(file):
    """ 读文件file, 返回值为二维列表,其中数据是字符串类型。 """
    with open(file, 'r', encoding='utf-8') as file:
        data_list = [line.strip().split() for line in file]
    return data_list

读为数值类型

def read_file(file):
    """ 读文件file, 返回值为二维列表,其中数据是数值类型。 """
    with open(file, 'r', encoding='utf-8') as file:
        data_list = [list(map(float,line.strip().split())) for line in file]
    return data_list

编程要求

根据提示,在右侧编辑器中补充代码,绘制 X 射线衍射曲线区域图。具体要求如下:

将画布分为三个区域,上面一个区域绘制完整XRD曲线,设置x轴范围为[5, 25]; 下面两个区域各放置x轴范围为[6.7, 7.0]和x轴范围为[9.5, 10.0]的局部放大图,使用户可以清晰的查看重叠的峰的区域。
提示:
第一个子图的绘制要求与第3关相同

测试说明

平台会对你编写的代码进行测试:

输出示例:
在这里插入图片描述

参考代码

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimSun']
plt.rcParams['axes.unicode_minus'] = False

def read_file(file):
    """ 读文件file, 返回值为二维列表,其中数据是字符串类型。 """
    with open(file, 'r') as f:
        data_list = [list(map(eval, line.strip().split())) for line in f.readlines()[1:]]
    	return data_list

def top_five_peak(data_list):
    """参数为读文件获得的数据列表,返回纵坐标值最大的5个峰的坐标的列表,降序排序。"""
    res = sorted(data_list, key=lambda x:x[1], reverse=True)
    return res[:5]

def plot_xrd(data_list):
    """接收二维列表为参数,绘制曲线,红色实线"""
    x = [d[0] for d in data_list]
    y = [d[1] for d in data_list]
    plt.subplot(211)
    plt.plot(x, y, 'r')
    add_label()

def mark_peak(peak_ls):
    """参数为峰值数据列表,在指定的坐标点加注释。注释标记点相对横坐标偏移+30,纵坐标等高,
    注释文本为峰高,即y 值,注释文本字号为12,箭头类型"->"。
    """
    for x, y in peak_ls:
        plt.annotate(f'{y}', xy=(float(x), float(y)), xytext=(+30, 0),
            textcoords='offset points', fontsize=12,
            arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

def add_label():
    """增加坐标轴标识与图名"""
    plt.xlim(5, 25)
    plt.axhline(0, linestyle='--', color='b')
    plt.title("X射线衍射图谱")
    plt.xlabel("2d")
    plt.ylabel("Intensity")

def sub_xrd(data_list):
    """接收二维列表为参数,在第二行第1和2列绘制x值在[6.7, 7.0]和[9.5, 10]间曲线"""
    x = [d[0] for d in data_list]
    y = [d[1] for d in data_list]
    plt.subplot(223)
    plt.plot(x, y, 'b')
    plt.xlim(6.7, 7.0)
    plt.subplot(224)
    plt.plot(x, y, 'b')
    plt.xlim(9.5, 10)

if __name__ == '__main__':
    data = read_file('XRD_AFO.txt')
    peak_lst = top_five_peak(data)
    plot_xrd(data)
    mark_peak(peak_lst)
    sub_xrd(data)
    plt.savefig('result/result.jpg')
    plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.volatile与JMM

volatile与JMM 6.1 被volatile修饰的变量有两大特点 特点: 可见性 有序性:有排序要求,有时需要禁重排 内存语义: 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中 当读一个vol…

Linux:ftp服务 (vsftpd)

我的ftp服务器为centos7 使用yum安装的vsftpd软件 (如果你需要离线yum库,而不会搭建可以查看) Linux:rpm查询安装 && yum安装_鲍海超-GNUBHCkalitarro的博客-CSDN博客 安装软件 配置环境 其次是Linux的防火墙和selinu…

写一个Orillusion编辑器(伪)

界面效果 思路 bootstrap控制界面效果jquery动态修改界面内容[Add]增加一个box[Play]导出play.html,打开play.html就可以看到程序运行效果 编辑器代码 <!DOCTYPE html> <html> <!-- TODO 1. 序列化数据,保存工程 2. 反序列化数据,打开工程 --><head>…

Python实现ACO蚁群优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

腾讯安全SOC+荣获“鑫智奖”,助力金融业数智化转型

近日&#xff0c;由金科创新社主办&#xff0c;全球金融专业人士协会支持的“2023鑫智奖第五届金融数据智能优秀解决方案评选”榜单正式发布。腾讯安全申报的“SOC基于新一代安全日志大数据平台架构的高级威胁安全治理解决方案”获评“鑫智奖网络信息安全创新优秀解决方案”。 …

大数据分析平台释疑专用帖

大数据分析平台是大数据时代&#xff0c;企业数字化运营决策的一大关键平台&#xff0c;但初次接触大数据分析平台时&#xff0c;大家必然是问题多多的&#xff0c;本文将就几个比较常见的问题进行总结回答&#xff0c;希望对正在了解、选型大数据分析平台的大家有所帮助。 首…

Qt学习08:文本输入类与快捷键

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 QLineEditQTextEditQTextCursor QPlainTextQKeySequenceEdit QLineEdit QLineEdit是最基本的输入控件&#xff0c;常用于短行的文本输入。 构造函数 QLineEdit(const QString &contents, QWidget *parent …

07_scrapy的应用——获取电影数据(通过excel保存静态页面scrapy爬虫数据的模板/通过数据库保存)

0、前言: 一般我们自己创建的一些python项目,我们都需要创建虚拟环境,其中会下载很多包,也叫做依赖。但是我们在给他人分享我们的项目时,不能把虚拟环境打包发送给别人,因为每个人电脑系统不同,我们可以把依赖导出为依赖清单,然后别人有了我们的依赖清单,就可以用一条…

[网络工程师]-网络规划与设计-网络测试运行和维护(二)

4、局域网测试 局域网测试主要是检验网络是否为应用系统提供了稳定、高效的网络平台,如果网络系统不够稳定,网络应用就不可能快速稳定。对于常规的以太网进行系统测试,主要包括系统连通性、链路传输速率、吞吐率、传输时延、丢包率及链路层健康状况测试等基本功能测试。 4.…

用那种方式安装 ThinkPHP 5.0?

简单介绍 ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架&#xff0c;是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP5.0版本是一个颠覆和重构版本&#xff0c;采用全新的架构思想&#xff0c;引入了更多的PHP新特性&#xff0c…

分享几个免费 AI 生成工具 (第一期)

今天来给大家分享几个国外免费的AI视频生成工具 Artflow ai https://app.artflow.ai Artflow.ai 是一款人工智能工具&#xff0c;旨在帮助用户创建自定义头像并让他们的故事栩栩如生。主要特点和优势包括&#xff1a; 自定义创作&#xff1a;从文本中生成角色、场景和声音&…

利用C语言实现十大经典排序算法的方法

排序算法 算法分类 —— 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非比较类排序&#xff1a;不通过比较来决定元素间…

《实战AI低代码》:一场新的软件工程革命

目录 五十年前的软件危机 二十年前的软件危机 今天的软件危机 革命性的新技术 AI低代码开发宣言 AI低代码开发原则 一场新的软件工程革命 AI低代码开发不仅是继面向过程,面向对象之后的一种新的抽象方式,也是继瀑布开发,敏捷开发之后的一种新的开发方法。 五十年前的…

QT学习07:五种按钮控件

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 文章目录 抽象类&#xff1a;QAbstractButtonQPushButtonQToolButtonQCommandLinkButtonQRadioButtonQCheckBoxQButtonGroup 抽象类&#xff1a;QAbstractButton 是所有按钮类的祖先。 QAbstractButton的信号&#xff1a…

【appium】appium自动化入门之API(中)

上一篇介绍了在appium上启动app和两个定位元素的小工具使用方法&#xff0c;这篇就从appium的一种小方法&#xff1a;远程控制&#xff0c;以及如何把appium上的输入法调整成中文&#xff0c;算是两个小技巧吧 目录 正文 2.4 Remote 远程控制 前言 2.4.1 设置 IP 2.4.2 访问地址…

OpenMMLab-AI实战营第二期-课程笔记-Class 3:RTMPose关键点检测

Class 3&#xff1a;RTMPose关键点检测 文章目录 Class 3&#xff1a;RTMPose关键点检测概述安装相关库为了方便使用者快速上手 MMPose&#xff0c;这次课程有着丰富的示例代码脚本&#xff0c;以及详细的技术文档&#xff0c;包括安装、数据集准备、使用教程、常见问题解答等。…

Pycharm+pytest+allure打造高逼格的测试报告

目录 前言&#xff1a; 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结&#xff1a; 前言&#xff1a; 今天分享的内容&#xff1a;在Pycharmpytest基础上使用allure打造高逼格…

Spring注入

前言 向一个普通的类中注入数据有什么方法&#xff1f; set方法 构造方法 依赖注入描述了在容器之间建立bean与bean之间依赖关系的过程&#xff0c;如果bean运行需要的是数字或者字符串呢&#xff1f; 引用类型 基本数据类型与String 依赖注入方式 setter注入 简单类型…

HUAWEI悦盒ec6108v9c 如何刷成海纳思系统(家用低功耗服务器,使用Home Assistant服务)

环境&#xff1a; 1.HW悦盒ec6108v9c一套 2.16G U盘 3.格式化软件USB_format.exe 4.固件 mv100-mdmo1g-usb-flash.zip&#xff08;底层是Ubuntu 20.04系统&#xff09; 5.十字螺丝刀 6.翘片/薄铲子 7.有线网络环境 8.镊子/回形针 问题描述&#xff1a; 最近玩智能家居…

最近我面了15个人,发现这些测试人都有个通病

最近公司离职好几个测试&#xff0c;也是赶上程序员跳槽的多&#xff0c;老板叫我招2个测试进来。4天时间面了15个人&#xff0c;怎么说呢&#xff0c;基本上没有符合要求的&#xff0c; 也没别的意思&#xff0c;因为我们公司小&#xff0c;开的薪水也不高&#xff0c;所以来…