当前位置:   article > 正文

教你三种方法,用Python制作出版级论文配图绘制_python绘制论文图

python绘制论文图

Hello,大家好,我是程序汪小陈~

今天我给大家介绍下如何使用Python-Matplotlib库一步步绘制可以用于出版的图表(Publication Ready Plots)。接下来,将通过一个具体的小例子给大家讲解一下绘制流程,当然,最后还会介绍现成的第三方包绘制的绘制方法。

Python-Matplotlib 绘制

首先,我们通过生成虚拟数据,使用matplotlib默认的颜色和图表样式进行绘制,如下:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 构建数据
  4. def model(x, p):
  5.     return x ** (2 * p + 1/ (1 + x ** (2 * p))
  6. = np.linspace(0.751.25201)
  7. # 可视化绘制
  8. fig, ax = plt.subplots(figsize=(4,3),dpi=200)
  9. for p in [1015203050100]:
  10.     ax.plot(x, model(x, p), label=p)

图片

Default Plots Style Of matplotlib

接下来,我通过一步步对其绘图属性进行更改,使其符合出版级别的要求。

  1. 「设置全局图表属性变量」

这一步对于有绘制较多图表的小伙伴有很大帮助,通过在绘制图表之前通过如下代码,分别更改字体、字体大小、线宽、刻度等多个常见属性,如下(这里只更改所需内容):

  1. plt.rcParams['font.family'= 'Times New Roman'
  2. plt.rcParams['font.size'= 18
  3. plt.rcParams['axes.linewidth'= 2

以上分别设置全局字体为Times New Roman,字体大小为18,轴宽度为2。当然,需要对个别字体进行设置的,可通过局部更改属性即可。更多全局变量属性可参考:rcParams

     2.「移除轴脊(spines)」

有的图表要求对部分轴脊(通常是上、右)进行去除,可通过如下代码实现:

  1. ax.spines['right'].set_visible(False)
  2. ax.spines['top'].set_visible(False)

图片

Example Of Remove spines

    3.「刻度属性(Tick Parameters)」

刻度属性设置可是我每次使用matplotlib绘制图表使用最多的语句了,可以设置刻度长短、粗细、方向、刻度标签等。下面只是对部分属性进行设置:

  1. # 通过如下代码添加副刻度
  2. from matplotlib.pyplot import MultipleLocator
  3. fig, ax = plt.subplots(figsize=(4,3),dpi=200)
  4. #修改次刻度
  5. yminorLocator = MultipleLocator(.25/2) #将此y轴次刻度标签设置为0.1的倍数
  6. xminorLocator = MultipleLocator(.25/2)
  7. ax.yaxis.set_minor_locator(yminorLocator)
  8. ax.xaxis.set_minor_locator(xminorLocator)
  9. ax.tick_params(which='major'length=5, width=1.5, direction='in'top='on',right="on")
  10. ax.tick_params(which='minor'length=3, width=1,direction='in'top='on',right="on")

图片

Example Of Tick Parameters

更多tick_params参数,可参考:tick_params

    4.「Axis labels」通过如下代码添加Axis labels:

  1. ax.set_xlabel('Voltage (mV)', fontsize=13,labelpad=5)
  2. ax.set_ylabel('Current ($\mu$A)', fontsize=13,labelpad=5)

其中labelpad=5 用于调整轴标签和刻度标签之间的距离

    5.「汇总」这一步,我们将之前全部的设置都应用到之前默认的Matplotlib绘制的图表上,代码如下:

  1. plt.rcParams['font.family'= 'Times New Roman'
  2. plt.rcParams['font.size'= 12
  3. plt.rcParams['axes.linewidth'= 1
  4. # 设置图例标题大小
  5. plt.rcParams['legend.title_fontsize'= 9
  6. fig, ax = plt.subplots(figsize=(4,3),dpi=200)
  7. colors = ["#0073C2","#EFC000","#868686","#CD534C","#7AA6DC","#003C67"]
  8. for p,c in zip([1015203050100],colors):
  9.     ax.plot(x, model(x, p), color=c,label=p)
  10. #修改次刻度
  11. yminorLocator = MultipleLocator(.25/2) #将此y轴次刻度标签设置为0.1的倍数
  12. xminorLocator = MultipleLocator(.25/2)
  13. ax.yaxis.set_minor_locator(yminorLocator)
  14. ax.xaxis.set_minor_locator(xminorLocator)
  15. #修改刻度属性
  16. ax.tick_params(which='major'length=5, width=1.5, direction='in'top='on',right="on")
  17. ax.tick_params(which='minor'length=3, width=1,direction='in'top='on',right="on")
  18. # 添加axis label
  19. ax.set_xlabel('Voltage (mV)', fontsize=13,labelpad=5)
  20. ax.set_ylabel('Current ($\mu$A)', fontsize=13,labelpad=5)
  21. #添加网格
  22. ax.grid(which='major',ls='--',alpha=.8,lw=.8)
  23. #添加图例
  24. ax.legend(fontsize=8,loc='upper left',title="Order")
  25. # 添加文本信息
  26. ax.set_title("Default Plot Style Of Matplotlib",fontsize=14,pad=10)
  27. ax.text(.87,.06,'\nVisualization by DataCharm',transform = ax.transAxes,
  28.         ha='center', va='center',fontsize = 5)

图片

Example Of Customize set charts in Matplotlib

第三方库绘制

这一部分我们使用Python绘制出版级别的图表的优秀第三方库:SciencePlots和proplot,前者是提供多个matplotlib绘图主题以应对不同期刊绘制要求,后者则是对Matplotlib进行再一次的加工封装,使其绘制复杂严谨的科学图表不再局限于Matplotlib本身的局限性。接下来,我将使用这两个库对其上述数据进行可视化绘制。

SciencePlots 库绘制

这个库可谓是Python绘制出版级别图表的绝对利器,使用只需直接调用主题即可,如下:

  1. with plt.style.context(['science','grid','no-latex']):
  2.     fig, ax = plt.subplots(figsize=(4,3),dpi=200)
  3.     for p in [1015203050100]:
  4.         ax.plot(x, model(x, p), label=p)
  5.     ax.legend(title='Order')
  6.     ax.set(xlabel='Voltage (mV)')
  7.     ax.set(ylabel='Current ($\mu$A)')
  8.     ax.set(title="Scienceplots Plot Style Example Of Matplotlib")
  9.     ax.autoscale(tight=True)

图片

Example Of SciencePlots style

可以看出:只需开始之前调用绘图主题,就可以省去Matplotlib繁琐的定制化操作,而且该库还上线了Nature图表主题(style for Nature articles),更多详细内容可参考:SciencePlots 库官网

proplot库绘制

这里,我们使用该库绘制,如下:

  1. import proplot as plot
  2. fig, ax = plot.subplots(figsize=(4,3.5),dpi=100)
  3. for p in [1015203050100]:
  4.     ax.plot(x, model(x, p), label=p)
  5. ax.format(title='Example Of Proplot Plot Style',abc=True, abcloc='ur', abcstyle='(A)',
  6.           xlabel='Voltage (mV)', ylabel='Current ($\mu$A)',
  7.           xtickdir='in',ytickdir="in",xtickloc="both",ytickloc="both",xgridminor=False,
  8.           ygridminor=False
  9. )
  10. ax.legend(ncols=1)

图片

Example Of Proplot make

可以看出:proplot库实现了对matplotlib的再一次封装,简化其繁琐的定制化绘制过程,同时也对matplotlib 默认的刻度、网格等图表属性进行了修改,使其更加符合出版级别的要求。更多内容可参考:proplot库官网

总结

今天,我汇总了三种Python绘制出版级别图表的方法:

  • matplotlib:一步步定制化操作。自由度较高,但需熟悉较多的绘图函数和参数熟悉。

  • SciencePlots :提供较多的符合各种期刊要求的matplotlib绘图主题,使用简单。但对要求高的绘制需求满足度较低。

  • proplot:对matplotlib进行了封装,简化绘图过程,提供符合出版级别的图层熟悉设置,但可能需要你重新熟悉一整个绘图语句。

综上,大家可以合理的学习自己的工具绘制出版级别的论文配图哈~~

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号