20

我想使用 matplotlib 从一组复数创建一个Argand 图。

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

  • 任何人都可以推荐一种方法吗?

在此处输入图像描述

图片LeonardoG提供,CC-SA-3.0

4

4 回答 4

20

我不确定你在这里究竟想要什么......你有一组复数,并想通过使用它们的实部作为 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])

...你可以做

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

In [16]: ax.scatter(a.real,a.imag)

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

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

于 2013-07-03T10:49:21.977 回答
12

跟进@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()

例如:

>>> a = n.arange(5) + 1j*n.arange(6,11)
>>> from argand import argand
>>> argand(a)

产生: argand 函数输出图

编辑:

我刚刚意识到还有一个polar绘图功能:

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

在此处输入图像描述

于 2013-07-03T16:00:52.303 回答
2

如果你喜欢下面这样的情节

一种情节

或者这种第二类型的情节

您可以通过这两行简单地做到这一点(作为上图中的示例):

z=[20+10j,15,-10-10j,5+15j] # array of complex values

complex_plane2(z,1) # function to be called

通过使用此处 https://github.com/osnove/other/blob/master/complex_plane.py中的简单 jupyter 代码

我写它是为了我自己的目的。更好的是它对他人有帮助。

于 2019-11-18T23:35:47.687 回答
0
import matplotlib.pyplot as plt
from numpy import *


'''
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
This draws the axis for argand diagram
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
'''
r = 1
Y = [r*exp(1j*theta) for theta in linspace(0,2*pi, 200)]
Y = array(Y)
plt.plot(real(Y), imag(Y), 'r')
plt.ylabel('Imaginary')
plt.xlabel('Real')
plt.axhline(y=0,color='black')
plt.axvline(x=0, color='black')


def argand(complex_number):
    '''
    This function takes a complex number.
    '''
    y = complex_number
    x1,y1 = [0,real(y)], [0, imag(y)]
    x2,y2 = [real(y), real(y)], [0, imag(y)]


    plt.plot(x1,y1, 'r') # Draw the hypotenuse
    plt.plot(x2,y2, 'r') # Draw the projection on real-axis

    plt.plot(real(y), imag(y), 'bo')

[argand(r*exp(1j*theta)) for theta in linspace(0,2*pi,100)]
plt.show()

https://github.com/QuantumNovice/Matplotlib-Argand-Diagram/blob/master/argand.py

于 2019-02-19T18:20:10.390 回答