科技论文绘图模板

1. 基本头文件

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as scio
import matplotlib
import scipy
import scipy.stats

只绘图的话上面的几个包基本够用,我一般的搞法是用MATLAB把数据处理成最终的结果,然后在python环境中直接把图plot出来。根据以前的经验,这样弄的好处是python环境下,在不同分辨率的电脑系统中,图形的大小好像保持一致,但是用MATLAB处理之后保存的图片,在不同分辨率下的系统环境中编译出来的文件,放到latex环境下会出现字体大小不一致的问题。

2. 指定字体

from matplotlib import rcParams
#rcParams['font.family']='sans-serif'
rcParams['font.family']='sans-serif'
rcParams['font.sans-serif']=['Arial']

利用上面的文件,将图片上面出现的字体指定为Arial,当然你也可以指定其它的字体,记得全文统一就行。这里指定字体的问题是,很多投稿系统要求字体嵌入,但是当我们不指定字体的时候,在不同系统环境(如中、英文系统)下,编译出来的图片文件生成的字体会不一样,这个时候,你再用Adoba去完成字体嵌入时(最简单的办法是保存成PDF/A的格式即可完成字体嵌入),在不同的电脑下就得采用不同的模板。

3. 绘图的基本代码

error_domain = np.squeeze(np.loadtxt('error_domain.txt'))
# error_test = np.loadtxt('error_test.txt')def get_data(dataset):data_size=len(dataset)data_set=sorted(set(dataset))bins=np.append(data_set, data_set[-1]+1)# Use the histogram function to bin the datacounts, bin_edges = np.histogram(dataset, bins=bins, density=False)counts=counts.astype(float)/data_size# Find the cdfcdf = np.cumsum(counts)x = bin_edges[0:-1]return x, cdffont_size = 20plt.figure()
#x, cdf = get_data(error_test)
#plt.plot(x, cdf, linewidth = 3, color = 'g', label = u'Test sample')
x, cdf = get_data([i + 2*np.squeeze(np.random.rand()) for i in error_domain])
plt.plot(x, cdf, linewidth = 3, color = 'k', linestyle='--', label = u'Solid wood')x, cdf = get_data([i + 12*np.squeeze(np.random.rand()) for i in error_domain])
plt.plot(x, cdf, linewidth = 3, color = 'b', linestyle='-.', label = u'Engineered wood')x, cdf = get_data([i + 16*np.squeeze(np.random.rand()) for i in error_domain])
plt.plot(x, cdf, linewidth = 3, color = 'r', linestyle=':', label = u'Concrete')plt.xlabel('Errors (cm)', fontsize = font_size)
plt.ylabel('CDF', fontsize = font_size)
plt.tick_params(labelsize=font_size)
plt.legend(loc='lower right',prop={'size':15})
plt.grid(True)
plt.subplots_adjust(left=0.16, right = 0.98, top = 0.98, bottom = 0.175)
plt.savefig('./floor.pdf', transparent=True)
plt.show()

这个模板保证了每次更改的时候,图片的大小,占用的空间,里面的字体什么的都能完全一致,非常的方便

其它一些小工具:

如将x,y 轴设定为采用科学记数法:

ax.yaxis.get_major_formatter().set_powerlimits((0,1)) # 将坐标轴的base number设置为一位。
ax.xaxis.get_major_formatter().set_powerlimits((0,1))

下面的代码为几个不同的子figure共享X轴:

fontsize=18
fontsize2 = 15
plt.figure()
plt.subplot(3,1,1)
plt.plot(length, noisy, c = 'b')
plt.title('Noisy signal',fontsize=fontsize)
plt.tick_params(labelsize=fontsize2)
ax = plt.gca()
ax.get_xaxis().set_visible(False)plt.subplot(3,1,2)
plt.plot(length, denoised, c = 'g')
plt.title('Denoised signal',fontsize=fontsize)
plt.ylabel('Signal value',fontsize=fontsize)
plt.tick_params(labelsize=fontsize2)
ax = plt.gca()
ax.get_xaxis().set_visible(False)plt.subplot(3,1,3)
plt.plot(length, original, c = 'r')
plt.title('Orginal signal',fontsize=fontsize)
plt.xlabel('Time (s)',fontsize=fontsize)
plt.tick_params(labelsize=fontsize2)
plt.subplots_adjust(hspace=0)

采用柱状图来比较不同的系统性能的完整代码模板:

# -*- coding: utf-8 -*-
"""
Created on Tue Nov 16 08:32:42 2021@author: Administrator
"""import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatchesfrom matplotlib import rcParams
#rcParams['font.family']='sans-serif'
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Arial']# plt.rcParams['xtick.direction'] = 'in'
# plt.rcParams['ytick.direction'] = 'in'font_size = 25# plt.figure(figsize=(20, 8), dpi=80)
plt.figure()year = ['1','2','3', '4', '5']data1 = [72.2, 73.6, 78.2, 88.4, 91.7] # Distance
data2 = [58.2, 60.2, 67, 79, 82] # Speed
data3 = [25, 34.2, 54.4, 63.6, 68.5] # Env
data4 = [7, 13.3, 34.5, 59.7, 64.3] # Footwear# 先得到year长度, 再得到下标组成列表
x = range(len(year))plt.bar(x, data1, width=0.2, color='#FF6347')# 向右移动0.2, 柱状条宽度为0.2
plt.bar([i + 0.2 for i in x], data2, width=0.2, color='#008B8B')plt.bar([i + 0.4 for i in x], data3, width=0.2, color='#FF00FF')plt.bar([i + 0.6 for i in x], data4, width=0.2, color='#6495ED')
# 底部汉字移动到两个柱状条中间(本来汉字是在左边蓝色柱状条下面, 向右移动0.1)
plt.xticks([i + 0.3 for i in x], year)plt.ylabel('Accuracy (%)', size=font_size)
plt.xlabel('Domain number', size=font_size)color = ['#FF6347', '#008B8B', '#FF00FF', '#6495ED']
labels = ['Case1', 'Case2', 'Case3',  'Case4']plt.tick_params(labelsize=font_size)patches = [mpatches.Patch(color=color[i], label="{:s}".format(labels[i]) ) for i in range(len(color))]ax=plt.gca()
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width , box.height])
#下面一行中bbox_to_anchor指定了legend的位置
ax.legend(handles=patches, bbox_to_anchor=(0.99,1.12), ncol=4, fontsize = 12) #生成legend# 为每个条形图添加数值标签
# for x1,y1 in enumerate(data1):
#     plt.text(x1, y1+0.1, y1,ha='center',fontsize=font_size)
# for x2,y2 in enumerate(data2):
#     plt.text(x2+0.2,y2+0.1,y2,ha='center',fontsize=font_size)plt.subplots_adjust(left=0.14, right=0.985, top=0.905, bottom=0.18)
plt.savefig('./impact_of_domain.pdf', transparent=True)
plt.show()

相应的输出图形状为:

基本线形图模板:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
from matplotlib import rcParams
import scipy.io#rcParams['font.family']='sans-serif'
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Arial']font_size = 25# plt.figure(figsize=(20, 8), dpi=80)
plt.figure()x = scipy.io.loadmat('real_peak.mat')
x = np.squeeze(x['signal_voltage'])y = scipy.io.loadmat('peak_matrix.mat')
y = np.squeeze(y['peak'])f = scipy.io.loadmat('frequency_value.mat')
f = np.squeeze(f['frequency_value'])color = ['#FF6347', '#008B8B', '#FF00FF', '#6495ED', '#FF0000', '#6A5ACD']
linestyle = ['-', '--', '--', '--', '--', '--']
marker = ['', '^', '*', '+', 'o', 'v']
label = [ f'{i}MHz' for i in f]
for i in range(len(x)):plt.plot(x, y[i, :]/1000, linewidth = 3, color = color[i], marker = marker[i], linestyle = linestyle[i], label = label[i])plt.ylabel('Input voltage (V)', size=font_size)
plt.xlabel('Output voltage (V)', size=font_size)plt.legend(loc='upper left',prop={'size':15})
plt.tick_params(labelsize=font_size)plt.subplots_adjust(left=0.18, right=0.985, top=0.965, bottom=0.22)
plt.savefig('./peak_performance.pdf', transparent=True)
plt.show()

输出结果:

画线型图的时候注意,最好是用不同的线型linestyle把不同的输入输出区分开来,当线型不够用的时候就用marker来区分,第一条线最好是用实线,剩下的其它的线用虚线。

稍微复杂点的标注应用:

# -*- coding: utf-8 -*-
"""
Created on Wed Jan 12 16:50:22 2022@author: Administrator
"""import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as mpatches
from matplotlib import rcParams
import scipy.io#rcParams['font.family']='sans-serif'
rcParams['font.family'] = 'sans-serif'
rcParams['font.sans-serif'] = ['Arial']font_size = 25# plt.figure(figsize=(20, 8), dpi=80)
plt.figure()x = scipy.io.loadmat('time.mat')
x = np.squeeze(x['Time'])peak = scipy.io.loadmat('peak_pulse.mat')
peak = np.squeeze(peak['temp_peak_pulse']) / 1000osc = scipy.io.loadmat('OS_pulse.mat')
osc = np.squeeze(osc['temp_OS_pulse']) / 1000plt.plot(x, peak, linewidth = 3, color = 'r', label = u'Peak output')
plt.plot(x, osc, linewidth = 3, color = 'b', label = u'Square input')# plt.axvline(1, linewidth = 3, linestyle = '--', color = 'g')plt.axhline(101.2 / 1000, linewidth = 3, linestyle = '--', color = 'gray')
plt.axhline(910.8 / 1000, linewidth = 3, linestyle = '--', color = 'gray')x_start = 100
plt.plot([x_start, x_start], [-0.200, 0.101], c = 'g', linewidth = 3, linestyle = '--')
x_end = 450
plt.plot([x_end, x_end], [-0.200, 0.910], c = 'g', linewidth = 3, linestyle = '--')plt.annotate("%10 of Max.", xy=(1000, 101/1000), xytext=(-15, +20), textcoords='offset points', fontsize=15,arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
plt.annotate("%90 of Max.", xy=(1000, 910/1000), xytext=(-15, -30), textcoords='offset points', fontsize=15,arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))plt.text(220, -0.050, '$\Delta t_R$', ha='left', fontsize = 18, color = 'r', rotation=0, wrap=True)
# plt.annotate("$\Delta t_R$", xy=(250, 120), xytext=(-15, -20), textcoords='offset points', fontsize=18,arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
ax = plt.gca()
# ax.yaxis.get_major_formatter().set_powerlimits((0,1))plt.xlabel('Time (ns)', size=font_size)
plt.ylabel('Voltage (V)', size=font_size)plt.ylim(-0.200, 1.350)plt.legend(loc='upper right',prop={'size':15})
plt.tick_params(labelsize=font_size)plt.subplots_adjust(left=0.17, right=0.985, top=0.98, bottom=0.19)
plt.savefig('./response_time_metric.pdf', transparent=True)
plt.show()

输出结果为:

利用Matplotlib进行科技论文绘图模板相关推荐

  1. python 利用matplotlib中imshow()函数绘图

    matplotlib 是python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图语 ...

  2. matlab画点阵图,利用matplotlib+numpy绘制多种绘图的方法实例

    前言 matplotlib 是Python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.本文将以例子的形式分析matplot中支持的,分析中常用的几种图.其中 ...

  3. 计算机科技论文摘要,计算机科技论文摘要怎么写 计算机科技论文摘要范文参考...

    [100篇]免费优秀与计算机科技论文摘要范文相关的资料,为计算机科技方面的的本科毕业论文和硕士毕业论文与职称论文写作提供有价值计算机科技论文摘要范本格式模板参考. 第一篇论文摘要:计算机科技论文摘要英 ...

  4. Python利用Matplotlib绘图无法显示中文字体的解决方案

    这里写目录标题 问题描述 报错信息 解决方法 其他解决方案 使用模板(内置样式)后无法显示中文的解决方案 问题描述 在Python利用Matplotlib绘图的时候,无法显示坐标轴上面的中文和标题里面 ...

  5. 【本科生科研入门】英文科技论文写作-绘图篇

    [本科生科研入门]英文科技论文写作-绘图篇 绘图 框架图/流程图 数据呈现图 后续讲解内容预告 绘图 我曾经作为同行评审审阅过7篇SCI 论文,几乎所有好的论文,都是具备优质的插图.因此,这里首先说说 ...

  6. 成功解决利用matplotlib.pyplot进行绘图的时候整个画布中的绘制曲线只显示一部分

    成功解决利用matplotlib.pyplot进行绘图的时候整个画布中的绘制曲线只显示一部分 目录 解决问题 解决思路 解决方法 解决问题 利用matplotlib.pyplot进行绘图的时候整个画布 ...

  7. 【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)

    0. 写在前面 常言道,科技论文犹如"八股文",有固定的写作模式.本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理,并不是为了提高或者润色一篇论文的表达.基本上所有的论 ...

  8. 绘图模板1(matplotlib)

    绘图模板(matplotlib) 一.Matplotlib 是专门用于开发2D图表(三层结构) 二.通用绘画模板--单折线图 三.多坐标系绘图模板(两种形式) 法一: 法二 四.线属性的设置 直接在p ...

  9. 【Stata】利用Stata快速完成一篇实证论文的模板(代码分享)

    目录:利用Stata快速完成一篇实证论文的模板 一.数据整理 二.描述性统计 三.相关性分析 四.共线性诊断 五.模型选择检验 六.检验结果,应该选择固定效应回归分析 七.滞后效应 八.分组回归 九. ...

最新文章

  1. Intellij IDEA中开启Run Dashboard模式
  2. ThreadPool基础之RegisterWaitForSingleObject
  3. 未来脑机接口的电极”衣服”可能长这样,你会喜欢吗?
  4. Docker源码修改工作总结(三)
  5. 转:linux svn常用命令
  6. “优秀IT工程师”是什么样的?
  7. 使用PowerDesigner 建立mysql数据表
  8. vue 生命周期详解
  9. Java 的 安全性 体现在哪里?面试题
  10. Struts2学习笔记(十) OGNL
  11. Ubuntu 20.04 Install Navicat
  12. 跨平台局域网文件传输工具——Dukto R5
  13. 病房管理系统c语言设计,病房呼叫系统设计与仿真
  14. 生物化学-第二章-氨基酸
  15. PAT A1096
  16. PS初学者的一些实用技巧
  17. 【NHOI2018】跳伞登山赛
  18. Serverlet简介
  19. SQL优化之常用优化工具
  20. PS5 VS XSX 谁是最强次世代主机?

热门文章

  1. 互联网,软件行业找工作问题总结
  2. 任正非:美国不会摧毁华为!
  3. 解决 select2 开启 tags 输入中文显示不全的BUG
  4. OLPC笔记本电脑的应用程序开发
  5. 快递单号查询API接口-澳洲飞跃
  6. Java基础——重写toString()方法
  7. 教你用python代码写一个我的世界,绝对好玩
  8. Codeforces 4D Mysterious (DP)
  9. usb启动计算机boss设置方法,如何进入BIOS设置USB方式启动
  10. c语言母牛生小牛程序框图,C语言母牛问题