xuss个人博客分享 http://blog.sciencenet.cn/u/xussnjupt Spinor

博文

科研作图

已有 1423 次阅读 2022-12-23 11:28 |个人分类:科研笔记|系统分类:科研笔记

        只要是写论文,总要把数据以图的形式展示出来。以前大多数是用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")

效果如下:

截屏2022-12-23 11.15.23.png

我读取了两列的数据文件data.dat,画了其中的两条曲线。可以看到具有非常好的Latex支持,这里使用的颜色还可以再调整。



https://blog.sciencenet.cn/blog-3427588-1368905.html

上一篇:关于学习广义相对论
下一篇:两个小工具
收藏 IP: 223.65.133.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-18 14:31

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部