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

news2024/11/28 2:52:29

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

本期分享:

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

1.环境准备

python 3

import numpy as np
import pandas as pd
import proplot as pplt

from 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:
            break
        lines.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 pplt

from 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:
            break
        lines.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.coloradmin.cn/o/1581990.html

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

相关文章

镗床工作台开槽的作用

镗床工作台开槽的作用主要有以下几点: 改善工作台的刚度和稳定性:开槽可以增加工作台的刚度,使其能够承受更大的切削力和振动力,提高工作台的稳定性。 方便工件夹紧和定位:开槽可用于夹紧和定位工件,使其能…

SAP 配置不让采购发票重复<转载>

原文链接:https://www.doc88.com/p-74459799460659.html 此配置方案存在一些弊端, 1.比如如果录入错误发票号就检验不到重复,还有录入字符限制最多16个字符等等。 2.设置后对于发票预制和正式发票都同时生效的,而有…

WEB3浪潮下的全新体验:精灵派对链游引领边玩边赚的创新之旅

在当前的数字经济浪潮中,区块链技术以其独特的去中心化特性,正在逐渐改变我们的生活和工作方式。其中,区块链游戏(链游)作为新兴的领域,正以其独特的优势吸引着全球玩家的目光。在这样一个背景下&#xff0…

数据结构之树的性质总结

节点的度:该节点拥有的孩子个数 叶子节点:度为0的节点 层数:根节点为第一层,根的子节点为第二层,以此类推 所有树的性质:所有节点的总度数等于节点数减一 完全m叉树性质 完全m 叉树,节点的…

计算机专业,不擅长打代码,考研该怎么选择?

考研其实和你的代码能力关系不大 所以在选学校以前可以看看有哪些学校复试是要求上机撸代码的,可能会要求比较严 初试真的不用担心代码问题,我也是基本零编程能力就开始备考考研的... 本人双非科班出身备考408成功上岸,在这里也想给想考40…

Spark编程基础

一、RDD入门 1.RDD是什么? RDD是一个容错的、只读的、可进行并行操作的数据结构,是一个分布在集群各个节点中的存放元素的集合,即弹性分布式数据集。 2.RDD的三种创建方式 第一种是将程序中已存在的集合(如集合、列表、数组&a…

若依二次开发总结

基于若依进行二次开发总结 后端启动 1.idea中打开项目 maven加载依赖 2.配置数据库,运行sql文件 3.配置yml文件 4.用命令redis-server启动redis 5.运行启动类,启动后端 前端启动 1.在vscode中打开文件夹ruoyi-ui 2.安装依赖 npm install3.启动前端 …

通往 AGI 的道路上,OpenAI 逐渐构建了全模态的工具集

几天前,OpenAI 公司官宣将发布一个名为“Voice Engine”的小规模模型,引起巨大的声浪。 该模型支持仅使用文本输入和单个 15 秒音频样本来生成与原始说话者非常相似的自然语音。可应用于“语音转录”、“语音克隆”、“语音翻译”等场景。 笔者感叹 AI …

linux查看硬盘空间使用情况

df (1)查看磁盘空间的占用情况 -h是给大小带上单位 df -h 总空间不一定等于已用未用,系统可能留出来一点空间另做他用 (2)查看INode的使用情况 df -idu du命令比df命令复杂一点,是查看文件和目录占用的…

VUE3的有关知识

学习vue3的原因 在vue2当中的组件的实例,都是data一块,computed一块,当我们去找某一变量相关的则十分麻烦,vue3是组合式API,vue2是选项式, vue3的优点: 1)组合式更易维护 2)更快的速度 3)更小的体积 4)更好的响应式proxy 使用vue3相关脚手架创建项目 步骤: 1)node -v node版…

文献学习-32-新生儿皮质表面重建的条件时间注意网络

Conditional Temporal Attention Networks for Neonatal Cortical Surface Reconstruction Authors: Qiang Ma, Liu Li, Vanessa Kyriakopoulou, Joseph V. Hajnal, Emma C. Robinson, Bernhard Kainz, and Daniel Rueckert Source: MICCAI 2023 Abstract 皮层表面重建在模拟…

深度学习的模型有几类,能干嘛用?

1、基础模型 (1)卷积神经网络 **卷积:**卷积的本质是通过矩阵运算9的方式将输入数据进行空间上的滤波,有效地提取数据中的局 部特征,从而实现特征数据更高程度的抽象表示。 **池化:**可以理解成“压缩”…

RabbitMQ的自动应答和手动应答,解决重试死循环

RabbitMQ的自动应答和手动应答,解决重试死循环 1.应答模式 RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。 1、自动应答:…

20240309web前端_第三周作业_教务系统页面

作业&#xff1a;教务系统页面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

机器学习 —— 使用机器学习进行情感分析 详细介绍版

机器学习 —— 使用机器学习进行情感分析 详细介绍版 机器学习 —— 使用机器学习进行情感分析 演示版 目录 一、 绪论二、 数据处理1. 构建CSV文档2. 构建模型前的思考2.1. 问题2.2. 解决方法 3. 读取数据4. 用正则表达式来进行对特定符号的剔除5. 使用口袋模型进行文本处理和…

科研学习|研究方法——定性数据的定量编码方法

一、关于数据的分类 数据可以根据不同的属性和特征进行分类。以下是数据常见的分类方式&#xff1a; 1. 数值型数据&#xff1a;表示为具体的数值&#xff0c;可以进行数学运算和统计分析。例如年龄、身高、体重等。2. 分类型数据&#xff1a;表示为不同的类别或标签&#xff0…

XUbuntu22.04之Typora添加水印并输出pdf文件(二百二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

el-drawer二次封装进行可拖拽

1.想要的效果 鼠标放到上面出现箭头显示可拖拽得图标 2.代码实现 2.1封装成自定义指令 // drawerDragDirective.js // 定义指令 const drawerDragDirective {// 指令绑定时的处理函数bind(el, ) {const minWidth 300;const dragDom el.querySelector(.el-drawer);// 创…

leetcode106题

思路 根据中序遍历和后序遍历的特性可知&#xff0c;后序遍历的最后一个元素为根元素。然后找到中序遍历中对应的序号。将中序遍历的划分为两部分&#xff0c;左边为左子树&#xff0c;右边为右子树。 方法 由思路可知&#xff0c;可以使用递归。递归函数的入口为划分的区间…

mysql双机热备

MySQL双机热备&#xff1a;保障数据库高可用性的关键技术 在当今信息化社会中&#xff0c;数据库作为企业信息系统的核心组成部分&#xff0c;其高可用性和数据安全性至关重要。MySQL作为广泛应用的开源关系型数据库管理系统&#xff0c;其双机热备技术成为保障数据库稳定运行…