如何使用matplotlib绘制复数(Argand Diagram)

ato*_*3ls 15 python plot numpy matplotlib complex-numbers

我想使用matplotlib从一组复数中创建一个Argand Diagram.

  • 是否有任何预先构建的功能可以帮助我做到这一点?

  • 有人可以推荐一种方法吗?

在此输入图像描述

图片来自LeonardoG,CC-SA-3.0

inc*_*ent 17

我不确定你在这之后到底是什么...你有一组复数,并希望通过使用它们的实部作为x坐标和虚部作为y将它们映射到平面?

如果是这样,你可以得到任何python虚数的真实部分number.real和虚部number.imag.如果你正在使用numpy,它还提供了一组辅助函数numpy.real和numpy.imag等,它们可以在numpy数组上运行.

因此,例如,如果你有一个复数的数组存储像这样:

In [13]: a = n.arange(5) + 1j*n.arange(6,11)

In [14]: a
Out[14]: array([ 0. +6.j,  1. +7.j,  2. +8.j,  3. +9.j,  4.+10.j])
Run Code Online (Sandbox Code Playgroud)

......你可以这样做

In [15]: fig,ax = subplots()

In [16]: ax.scatter(a.real,a.imag)
Run Code Online (Sandbox Code Playgroud)

这会在每个点的argand图上绘制点.

编辑:对于绘图部分,您当然必须通过from matplotlib.pyplot import *或(如我所做)导入matplotlib.pyplot 在pylab模式下使用ipython shell.

  • 尽量避免使用`import*`:如果不在当前名称空间中导入并执行类似`import matplotlib.pyplot作为plt`然后执行`plt`,它会更具可读性并且不那么令人困惑.此外,这可以避免您可能发生的名称冲突 (9认同)

ato*_*3ls 7

跟进@ inclement的答案; 以下函数生成一个以0,0为中心的argand图,并缩放到复数组中的最大绝对值.

我使用了绘图函数并指定了(0,0)中的实线.这些可以通过更换被移除ro-ro.

def argand(a):
    import matplotlib.pyplot as plt
    import numpy as np
    for x in range(len(a)):
        plt.plot([0,a[x].real],[0,a[x].imag],'ro-',label='python')
    limit=np.max(np.ceil(np.absolute(a))) # set limits for axis
    plt.xlim((-limit,limit))
    plt.ylim((-limit,limit))
    plt.ylabel('Imaginary')
    plt.xlabel('Real')
    plt.show()
Run Code Online (Sandbox Code Playgroud)

例如:

>>> a = n.arange(5) + 1j*n.arange(6,11)
>>> from argand import argand
>>> argand(a)
Run Code Online (Sandbox Code Playgroud)

生产: argand函数输出图

编辑:

我刚刚意识到还有一个polar情节函数:

for x in a:
    plt.polar([0,angle(x)],[0,abs(x)],marker='o')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述