【SCI绘图】【曲线图系列1 python】绘制扫描点平滑曲线图

SCI,CCF,EI及核心期刊绘图宝典,爆款持续更新,助力科研!

本期分享:

【SCI绘图】【曲线图1 python】绘制扫描点平滑曲线图

1.环境准备

python 3

import numpy as np
import pandas as pd
import proplot as ppltfrom proplot import rc
from scipy import interpolate

2.示例数据

文件数据scan.txt如下:

# Scan of Total Energy
# X-Axis:  Scan Coordinate
# Y-Axis:  Total Energy (Hartree)
#                  X                   Y
     -180.0000000000     -614.7078807270
     -170.0000000000     -614.7072813600
     -160.0000000000     -614.7060235750
     -150.0000000000     -614.7044729460
     -140.0000000000     -614.7031186350
     -130.0000000000     -614.7024235580
     -120.0000000000     -614.7026675650
     -110.0000000000     -614.7038520300
     -100.0000000000     -614.7057095070
      -90.0000000000     -614.7077994270
      -80.0000000000     -614.7096191460
      -70.0000000000     -614.7106755590
      -60.0000000000     -614.7105802990
      -50.0000000000     -614.7092336990
      -40.0000000000     -614.7069056520
      -30.0000000000     -614.7041271490
      -20.0000000000     -614.7015047450
      -10.0000000000     -614.6995806060
        0.0000000000     -614.6987069320
       10.0000000000     -614.6989816060
       20.0000000000     -614.7002335310
       30.0000000000     -614.7020693810
       40.0000000000     -614.7039714410
       50.0000000000     -614.7054364440
       60.0000000000     -614.7060960420
       70.0000000000     -614.7058155830
       80.0000000000     -614.7047308610
       90.0000000000     -614.7032144970
      100.0000000000     -614.7017755460
      110.0000000000     -614.7009098540
      120.0000000000     -614.7009204060
      130.0000000000     -614.7018113420
      140.0000000000     -614.7033313480
      150.0000000000     -614.7050823020
      160.0000000000     -614.7066426980
      170.0000000000     -614.7076524370
      180.0000000000     -614.7078805920

加载代码如下:

# 标题、x 和 y 轴 label
# 可以直接在 txt 中读取,也可以自行配置
title = None
xlabel = "Scan Coordinate"
ylabel = "Relative Energy (kJ/mol)"
# 如果 title、xlabel 和 ylabel 为 None 则在 txt 文件中找
# 打开 txt 文件,扫描 txt 文件中的前三行
with open('scan.txt', 'r', encoding='utf-8') as file:# 初始化 lines 变量lines = []for _ in range(3):line = file.readline().strip()# 判断是否存在 # 号开头的行if line.startswith('#'):line = line.lstrip('#').strip()# 如果不存在则直接跳出循环else:breaklines.append(line)if title is None:title = lines[0]if xlabel is None:xlabel = lines[1]if ylabel is None:ylabel = lines[2]

3.绘图展示

figure相关设置如下

# 全局字体
fontname = "Arial"
# 全局字号,分别为普通字体、标签字体和标题字体
fontsize = [10.5, 12, 14]
# 颜色主题,可以修改自己喜欢的颜色或者 16 进制颜色,第一个颜色为折线颜色,第二个颜色为点的颜色
colors = ["#D8005E", "#3233A6"]
# x 轴和 y 轴的刻度以及间距 [min, max, ticked]
xlim = [-180, 180, 60]
ylim = [-10, 40, 10]# 使用 Pandas 读取 Gaussian 生成的 txt 文件中的数据
data = pd.read_csv("scan.txt", delim_whitespace=True, header=None, skiprows=4, names=['X', 'Y'])
# 将 DataFrame 对象中 Y 减去最小值 yMin 同时乘以 2625.51
data['Y'] = (data['Y'] - data['Y'].min()) * 2625.51# 设置绘图的默认参数,如字体、字号等
rc['font.family'] = fontname
rc['title.size'] = fontsize[2]
rc['label.size'] = fontsize[1]
rc['font.size'] = fontsize[0]
# 设置其他参数
rc['tick.width'] = 1.3
rc['meta.width'] = 1.3
rc['title.weight'] = 'bold'
rc['label.weight'] = 'bold'
rc['tick.labelweight'] = 'bold'
rc['ytick.major.size'] = 4.6
rc['ytick.minor.size'] = 2.5
rc['xtick.major.size'] = 4.6
rc['xtick.minor.size'] = 2.5

绘图逻辑如下: 

# 创建实例
fig, ax = pplt.subplots(figsize=(5.4 * 0.9, 4 * 0.9))# 使用插值函数,让折线图变平滑
f = interpolate.interp1d(data['X'].values, data['Y'].values, kind='quadratic')
xNew = np.linspace(data['X'].min(), data['X'].max(), 101)
yNew = f(xNew)# 绘制平滑曲线图
ax.plot(xNew, yNew, color=colors[0], linewidth=1.3, zorder=1)
# 绘制实际的点
ax.scatter(data['X'], data['Y'], color=colors[1], zorder=2, edgecolor='black')# 格式化图像
fig.format(grid=False, ylabel=ylabel, xlabel=xlabel, title=title,xlim=(xlim[0], xlim[1]), xminorlocator=(xlim[2] / 2), xlocator=xlim[2], ylim=(ylim[0], ylim[1]),yminorlocator=(ylim[2] / 2), ylocator=ylim[2]
)# 显示图像
fig.show()# 保存图像
fig.savefig("scan.png", dpi=400, bbox_inches="tight")

完整代码:

import numpy as np
import pandas as pd
import proplot as ppltfrom proplot import rc
from scipy import interpolate# 标题、x 和 y 轴 label
# 可以直接在 txt 中读取,也可以自行配置
title = None
xlabel = "Scan Coordinate"
ylabel = "Relative Energy (kJ/mol)"
# 如果 title、xlabel 和 ylabel 为 None 则在 txt 文件中找
# 打开 txt 文件,扫描 txt 文件中的前三行
with open('scan.txt', 'r', encoding='utf-8') as file:# 初始化 lines 变量lines = []for _ in range(3):line = file.readline().strip()# 判断是否存在 # 号开头的行if line.startswith('#'):line = line.lstrip('#').strip()# 如果不存在则直接跳出循环else:breaklines.append(line)if title is None:title = lines[0]if xlabel is None:xlabel = lines[1]if ylabel is None:ylabel = lines[2]# 全局字体
fontname = "Arial"
# 全局字号,分别为普通字体、标签字体和标题字体
fontsize = [10.5, 12, 14]
# 颜色主题,可以修改自己喜欢的颜色或者 16 进制颜色,第一个颜色为折线颜色,第二个颜色为点的颜色
colors = ["#D8005E", "#3233A6"]
# x 轴和 y 轴的刻度以及间距 [min, max, ticked]
xlim = [-180, 180, 60]
ylim = [-10, 40, 10]# 使用 Pandas 读取 Gaussian 生成的 txt 文件中的数据
data = pd.read_csv("scan.txt", delim_whitespace=True, header=None, skiprows=4, names=['X', 'Y'])
# 将 DataFrame 对象中 Y 减去最小值 yMin 同时乘以 2625.51
data['Y'] = (data['Y'] - data['Y'].min()) * 2625.51# 设置绘图的默认参数,如字体、字号等
rc['font.family'] = fontname
rc['title.size'] = fontsize[2]
rc['label.size'] = fontsize[1]
rc['font.size'] = fontsize[0]
# 设置其他参数
rc['tick.width'] = 1.3
rc['meta.width'] = 1.3
rc['title.weight'] = 'bold'
rc['label.weight'] = 'bold'
rc['tick.labelweight'] = 'bold'
rc['ytick.major.size'] = 4.6
rc['ytick.minor.size'] = 2.5
rc['xtick.major.size'] = 4.6
rc['xtick.minor.size'] = 2.5# 创建实例
fig, ax = pplt.subplots(figsize=(5.4 * 0.9, 4 * 0.9))# 使用插值函数,让折线图变平滑
f = interpolate.interp1d(data['X'].values, data['Y'].values, kind='quadratic')
xNew = np.linspace(data['X'].min(), data['X'].max(), 101)
yNew = f(xNew)# 绘制平滑曲线图
ax.plot(xNew, yNew, color=colors[0], linewidth=1.3, zorder=1)
# 绘制实际的点
ax.scatter(data['X'], data['Y'], color=colors[1], zorder=2, edgecolor='black')# 格式化图像
fig.format(grid=False, ylabel=ylabel, xlabel=xlabel, title=title,xlim=(xlim[0], xlim[1]), xminorlocator=(xlim[2] / 2), xlocator=xlim[2], ylim=(ylim[0], ylim[1]),yminorlocator=(ylim[2] / 2), ylocator=ylim[2]
)# 显示图像
fig.show()# 保存图像
fig.savefig("scan.png", dpi=400, bbox_inches="tight")

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

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

相关文章

win10上一个详细的Django开发入门例子

1.Django概述 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。 Django 框架的核心组件有: 用于创建模型的对象关系映射; 为最终用户设计较好的管理界面&#xff1b…

使用Arcpy进行数据批处理-批量裁剪

时空大数据使我们面临前所未有的机遇和挑战,尤其在地学、遥感或空间技术等专业领域,无疑是一个全新的时代。 伴随着时空大数据的到来,海量数据的处理是一个所有科研工作者都无法忽视的重要问题。传统的数据(主要指空间数据&#x…

Docker实战教程 第1章 Linux快速入门

2-1 Linux介绍 为什么要学Linux 三个不得不学习 课程需要:Docker开发最好在Linux环境下。 开发需要:作为一个后端程序员,是必须要掌握Linux的,这是找工作的基础门槛。 运维需要:在服务器端,主流的大型服…

SDWebImage源码解析---疑难问题解答

SDWebImage的简单流程图: 上图大致流程是对的,有几个没写到的地方: 首先判断url的类型是不是URL类型或string类型,判断url是否为nil占位图更早一些,在url判断后,就行显示占位图加载沙盒中对应的图片后&…

Premiere Pro 2024:赋予创意翅膀,让你的视频飞翔 mac/win版

Premiere Pro 2024,作为Adobe旗下的旗舰视频编辑软件,自推出以来,一直在视频制作领域占据着重要的地位。随着技术的不断进步和创新,Premiere Pro 2024为用户带来了前所未有的编辑体验,重新定义了视频制作的标准。 Pre…

数字逻辑分析仪初体验

为啥会用到这玩意儿,要从一个荒诞的需求开始。想在市面上找一款特别低空飞行的监控,而且不想它一直开着监控,最好是我在外面远程指挥它起飞,飞去厨房,飞去洗手间,甚至飞去阳台,查看水龙头情况啊…

Nuxt 项目的创建

中文文档:https://nuxt.com.cn/docs/getting-started/installation#%E6%96%B0%E9%A1%B9%E7%9B%AE Nuxt 项目创建的先决条件: Node.js 版本 18.0.0 及以上文本编辑器:VS Code Volar 插件 或 Webstorm 执行如下命令,创建 Nuxt 项目…

【Canvas技法】用椭圆绘制经纬线

【图示】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>用椭圆绘制经纬线</title><style type"text/css"…

相对论中关于光速不变理解的补充

近几个月在物理直播间聊爱因斯坦相对论&#xff0c;发现好多人在理解爱因斯坦相对论关于基本假设&#xff0c;普遍认为光速是不变的&#xff0c;质能方程 中光速的光速不变的&#xff0c;在这里我对这个假设需要做一个补充&#xff0c;他是基于质能方程将光速C 在真是光速变化曲…

Allavsoft for Mac v3.27.0.8852注册激活版 优秀的视频下载工具

Allavsoft for Mac是一款功能强大的多媒体下载和转换工具&#xff0c;支持从各种在线视频网站和流媒体服务下载视频、音频和图片。它具备批量下载和转换功能&#xff0c;可将文件转换为多种格式&#xff0c;以适应不同设备的播放需求。此外&#xff0c;Allavsoft还提供视频编辑…

最新版两款不同版SEO超级外链工具PHP源码

可根据个人感觉喜好自行任意选择不同版本使用&#xff08;版V1或版V2&#xff09; 请将zip文件全部解压缩即可访问&#xff01; 源码全部开源&#xff0c;支持上传二级目录访问 #已更新增加大量高质量外链&#xff08;若需要增加修改其他外链请打开txt文件&#xff09; #修…

贪心算法|53.最大子序和

力扣题目链接 class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) {result count;}if (count < 0) count 0;}return result;} …

SpringBoot+ECharts+Html 字符云/词云案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_comment表&#xff0c;表中设置两个字段word与count&#xff0c;添加表中的数据。如&#xff1a;附件中的 echartsdb.sql 3. SpringBoot…

CAD Plant3D 2024 下载地址及安装教程

CAD Plant3D是一款专业的三维工厂设计软件&#xff0c;用于在工业设备和管道设计领域进行建模和绘图。它是Autodesk公司旗下的AutoCAD系列产品之一&#xff0c;专门针对工艺、石油、化工、电力等行业的设计和工程项目。 CAD Plant3D提供了一套丰富的工具和功能&#xff0c;帮助…

水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型

水泥5G智能制造工厂数字孪生可视化平台&#xff0c;推进水泥行业数字化转型。水泥5G智能制造工厂数字孪生可视化平台&#xff0c;是水泥行业数字化转型的关键推手。数字孪生平台运用先进的信息技术和数字化手段&#xff0c;实现水泥生产过程的数字化模拟、可视化监控和智能化管…

常见的线程安全类

线程安全&#xff01;线程安全&#xff01;&#xff01;线程安全&#xff01;&#xff01;&#xff01; 鼠鼠我最近被线程安全这个词弄得好烦啊&#xff0c;那既然如此就来写一篇常见的线程安全类防止以后鼠鼠我的大脑又宕机了忘记了....... 这里我们讨论的线程安全的是指&am…

DVWA-File Inclusion通关教程-完结

DVWA-File Inclusion通关教程-完结 文章目录 DVWA-File Inclusion通关教程-完结页面功能LowMediumHighImpossible 页面功能 点击页面上提供的三个页面&#xff0c;单击这些文件就会显示其执行内容&#xff0c;同时发现提交是由GET方式进行&#xff0c;使用page参数传参。 …

华为CCE部署RabbitMQ中间件操作文档

1、创建有状态&#xff08;StatefulSet&#xff09;部署 中间件一般为有状态部署&#xff0c;有状态部署与无状态部署区别参考文档&#xff1a;K8S有无状态部署-CSDN博客 1.1、基本信息 注意&#xff1a; 应用名称命名规则&#xff1a;&#xff08;命名规则最好统一&#xff…

【linux】ubuntu ib网卡驱动如何适配

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

STL —— list

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C专栏 本篇文章主要讲解 list模拟实现的相关内容 &#xff11;. list简介 列表&#xff08;list&#xff09;是C标准模板库&#xff08;STL&#xff09;中的一个容器&#xff0c;它是一个双向链表数据结构&#xff0c…