科研绘图 | Python中绘制密度图

文摘   2024-08-03 09:00   广东  

密度图是科研绘图中常见的一类图,比如光场强度分布,角动量分布等,那么,如何在Python中绘制此类图呢?为此,首先给出最终的绘制结果:

以上图中显示实际上为光场的强度分布,为了更加理解图中的数据来源,下面给出绘制图片的完整Python代码:

import matplotlib.pyplot as pltimport numpy as npimport math
# 目标函数def objective_function(m, Phi): return np.cos(m*Phi+n*2*np.pi*R/np.max(R))
# 参数与数据m = 1n = 2x = np.linspace(-5, 5, 100)y = np.linspace(-5, 5, 100)X, Y = np.meshgrid(x, y)R=np.sqrt(X**2+Y**2)Phi=np.atan2(Y,X)
E = objective_function(m, Phi)I=np.abs(E)
# 绘制光场强度图plt.figure(dpi=200)h=plt.contourf(X, Y, I, 30, cmap='viridis')

cb=plt.colorbar(h)cb.ax.tick_params(labelsize=16) #设置色标刻度字体大小cb.set_ticks([0,0.25,0.5,0.75,1])
plt.xticks(fontproperties = 'Arial' , size = 16)plt.yticks(fontproperties = 'Arial' , size = 16)plt.xlabel('x (mm)', fontdict={'family':'Arial','size':16})plt.ylabel('y (mm)', fontdict={'family':'Arial','size':16})plt.title('$\mathrm{E_x}$',fontdict={'family':'Arial','size':16})
ax = plt.gca()ax.set_aspect(1)
plt.subplots_adjust(left=0, right=0.9, top=0.9, bottom=0.15)
plt.savefig('test.jpg', bbox_inches='tight')plt.show()

其中cos(m*Phi+n*2*np.pi*R/np.max(R))为光场表达式,实际上,其表示的是偏振态同时沿着旋向和径向变化的矢量光场的水平分量。

plt.figure(dpi=200)用来规定图片分辨率,dpi越大则图片越清晰,但内存也会增大,一般不超过300为佳。

cmap='viridis'则用来规定colorbar的颜色。

cb=plt.colorbar(h)cb.ax.tick_params(labelsize=16)  #设置色标刻度字体大小cb.set_ticks([0,0.25,0.5,0.75,1])

以上代码用于调整colorbar的字体和坐标。

ax = plt.gca()ax.set_aspect(1)

以上两行的作用是使得图片横纵坐标轴等比例。

plt.subplots_adjust(left=0, right=0.9, top=0.9, bottom=0.15)用于调节图片距离画布边缘的距离。最终通过plt.savefig('test.jpg', bbox_inches='tight')将图片保存到当前文件夹。


免责声明:本公众号旨在传递更多科研相关内容及分享,所有文章图片来源均注明出处,如涉及版权问题,请作者第一时间后台联系,我们将协调进行处理,对于投稿内容文责自负。

光与学
主要介绍一些光路作图方法,光路调节技巧,论文写作,仿真模拟等实用技能。
 最新文章