密度图是科研绘图中常见的一类图,比如光场强度分布,角动量分布等,那么,如何在Python中绘制此类图呢?为此,首先给出最终的绘制结果:
以上图中显示实际上为光场的强度分布,为了更加理解图中的数据来源,下面给出绘制图片的完整Python代码:
import matplotlib.pyplot as plt
import numpy as np
import math
# 目标函数
def objective_function(m, Phi):
return np.cos(m*Phi+n*2*np.pi*R/np.max(R))
# 参数与数据
m = 1
n = 2
x = 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')将图片保存到当前文件夹。
免责声明:本公众号旨在传递更多科研相关内容及分享,所有文章图片来源均注明出处,如涉及版权问题,请作者第一时间后台联系,我们将协调进行处理,对于投稿内容文责自负。