||
只要是写论文,总要把数据以图的形式展示出来。以前大多数是用Mathematica软件来画图,配合一些设置,虽然很多元素是自动的,效果还是不错的。当然在需要多张图合并在一张图里展示的时候,需要找其他办法来进一步处理,用过Adobe Illustration对多张图编辑处理,也用过把数据导入到python matplotlib里画图。偶尔也会用Origin画图。
在这么多画图方法里面,还是最喜欢用Mathematica,主要是方便。用python matplotlib需要写不少代码,用Origin的缺点是每次画图都要设置很多次的坐标轴、曲线等信息。当然它们都可能有简便的方法。
最近,因为版权问题,单位要求不能再使用Mathematica。所以,不得不考虑用其他的画图方法来代替。尝试使用python matplotlib,在边画图、边学习、边记录,尽量能够在以后画图的时候方便的使用。经过两天的设置,终于可以较为方便地使用matplotlib了。在做完这些以后,感觉到虽然修改配置文档要花不少时间,但是一旦完成配置,使用的时候会非常方便,对图片的设置也会更加彻底。以前在用Mathematica的时候,很多改变不了的东西,在matplotlib里面都可以改变。以下就对一副数据图作一个简短的叙述。
一张数据图,主要涉及到:
图片的整体:图片的长和宽。
坐标轴:上、下、左、右,共4个轴显示哪些轴,坐标轴线条宽度,坐标轴上的刻度(向内,向外),刻度线的长度和宽度,刻度间距,刻度数值显示(字体、大小),坐标轴的标签(字体、大小),包括latex公式的显示问题。
数据曲线:数据曲线的颜色、虚线格式,曲线宽度。
图例:图例的位置、大小、边框,图例内的线条长度,文字大小。
文字说明:有些图内还需要补充文字说明,文字的大小、字体。
虽然以前在画图的时候,都是很方便就能把图画出来,不过总有不太满意的地方,要想修改总是不太容易。但是matplotlib里面这些可以方便地进行默认设置的修改。
如何进行自定义配置?
macOS系统里,是在~/.matplotlib/stylelib/ 文件夹内创建一个后缀为.mplStyle的文件就可以。如 mympl.mplStyle的空文件。其他操作系统,只要找到相应的文件夹就可以。
figure.figsize : 4.8,3.6 text.usetex: True text.latex.unicode: True lines.linewidth : 1.5 lines.markersize : 3 font.family : serif font.serif : Times New Roman font.size : 12 axes.titlesize : 10 axes.labelsize : 18 axes.linewidth : 1.5 axes.labelpad : 2 axes.spines.left : True axes.spines.bottom : True axes.spines.top : True axes.spines.right : True axes.prop_cycle: (cycler('color', ['0072BD','D95319','7E2F8E','77AC30','4DBEEE','A2142F','EDB120']) + cycler('dashes',[[3,0.8],[1,0.8],[3,1,1,1],[3,1,1,1,1,1],[5,1,1,1,1,1,1,1],[10,1,3,1,3,1],[3,1,3,3]])) xtick.top : True xtick.labelsize : 15 xtick.major.size : 5 xtick.minor.size : 3 xtick.major.width : 1.5 xtick.minor.width : 1 xtick.major.pad : 3.5 xtick.direction : in xtick.minor.visible : True ytick.right : True ytick.labelsize : 15 ytick.major.size : 5 ytick.minor.size : 3 ytick.major.width : 1.5 ytick.minor.width : 1 ytick.major.pad : 3.5 ytick.direction : in ytick.minor.visible : True legend.loc : upper right legend.fontsize : 12 legend.shadow : False legend.numpoints : 3 legend.scatterpoints : 3 legend.markerscale : 1.2 legend.borderpad : 0.4 legend.handlelength : 3 legend.handletextpad : 0.4 legend.borderaxespad : 1 legend.columnspacing : 2 legend.frameon : True
其他操作系统,可以通过在python程序里使用如下代码来查找:
import matplotlib print(matplotlib.get_configdir())
设置完以后,在python程序里使用如下代码就可以使用我们的配置文件了
import matplotlib.pyplot as plt plt.style.use('mympl')
我可以在~/.matplotlib/stylelib/文件夹下创建几个.mplStyle文件,在画图的时候按照需要使用不同的配置文件。后面就会以配置里的格式进行画图。如python代码:
import matplotlib.pyplot as plt import numpy as np plt.style.use('xuScheme') data=np.loadtxt("data.dat").T x=data[0] y=data[1] y2=list(np.add(y,y)) xx=np.arange(0,0.12,0.002) xx2=np.arange(0.001,6.001,0.1) yy=np.sin(xx2) yy2=np.cos(xx2) yy3=np.exp(xx) yy4=np.log(xx2) yy5=np.sqrt(xx2) fig=plt.figure(figsize=[4.8,3.6]) ax1=fig.add_axes([0.18,0.15,0.75,0.75]) ax1.plot(x,y) ax1.plot(x,y2) ax1.plot(xx,yy) ax1.plot(xx,yy2) ax1.plot(xx,yy3) ax1.plot(xx,yy4) ax1.plot(xx,yy5) ax1.legend((r"$\langle\bar\psi\psi\rangle$",r"$\chi_s$",r"$P_T$",r"$\sin\theta$",r"$\cos(\omega t)$",r"$\exp(-x^2)$",r"$\log(1+x)$")) xlim=[0,0.12] ylim=[-1,3] dxy=[0.02,0.5] ax1.set_xlim(xlim) ax1.set_ylim(ylim) ax1.set_xticks(np.arange(xlim[0],xlim[1],dxy[0])) ax1.set_yticks(np.arange(ylim[0],ylim[1],dxy[1])) ax1.set_xlabel(r"$\mu_B$") ax1.set_ylabel(r"$\langle\bar\psi\psi\rangle$") plt.savefig("test.pdf")
效果如下:
我读取了两列的数据文件data.dat,画了其中的两条曲线。可以看到具有非常好的Latex支持,这里使用的颜色还可以再调整。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 22:13
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社