绘制磁偶极子的磁力线或矢量场 - Python/Matplotlib

计算科学 计算物理学 软件
2021-12-24 07:45:27

在关于磁矩的维基百科文章中,“对环境的影响”小节定义了磁偶极矩的磁场H。此外,还绘制了该场的磁场线:

在此处输入图像描述

我想使用 Python - Matplotlib 重现这张图片。我相信我的结果是正确的,但在视觉上表现不佳。

在此处输入图像描述

这是生成上图的 Python 代码。有人知道如何解决这个问题,以便我得到与维基文章相似的图片。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

x,y = np.meshgrid(np.linspace(-5,5,10),np.linspace(-5,5,10)) # coordinates for the position vector r
m = [0, 1]  # magnetic moment of the magnetic dipole moment

mr = m[0] * x + m[1] * y # dot product m * r

r_squared = x**2 + y**2
factor = 1 / ( np.sqrt(r_squared)**5 * 4 * np.pi) # pre factor, that is  multiplied with the vector 

u = factor * (3 * x * mr - m[0] * r_squared)
v = factor * (3 * y * mr - m[1] * r_squared)



plt.quiver(x,y,u,v)
plt.show()

为此,需要定义m = (m_x, m_y) = (0, m_y)(如图描述中所述)并计算点积r*m = (r_x * m_x + r_y * m_y)。将其插入H的公式中,并将方程拆分为其 x 和 y 部分(笛卡尔坐标)。

3个回答

您应该尝试使用 quiver 的 scale 参数并使用它来减少箭头长度。如果您想要一张类似于您链接的图像的图片,您还可以考虑使用plt.streamplot()以避免单独绘制所有矢量带来的混乱。

当我不得不编写这样的代码来绘制磁力线时,我发现选择一组起点并向外整合更容易,遵循磁场的方向并放置点。然后,您可以将箭头放置在您喜欢的位置,也许沿着线条以规则的间距放置。

我建议改编此 Python Matplotlib Tips 博客中的代码。

请注意,如果不进行修改,pyplot.quiver 将无法正确间隔磁力线以表示磁力线密度,并且不会连接线。下面是 "bare" 的示例图(来自文档)pyplot.quiver(如果你想要连接的线,你可以使用pyplot.streamplot,但是在测试时我发现这仍然没有正确地分隔线。)

箭袋示例图

你不能使用 matplotlib 来做到这一点,但是有一个很好的 python 库可以做到这一点:

https://github.com/CD3/VectorFieldPlot

文档:https ://commons.wikimedia.org/wiki/User:Geek3/VectorFieldPlot

示例:https ://commons.wikimedia.org/wiki/Category:Valid_SVG_created_with_VectorFieldPlot_code