我想使用matplotlib从一组复数中创建一个Argand Diagram。
是否有任何预先构建的功能可以帮助我这样做?
有人可以推荐一种方法吗?
答案 0 :(得分:14)
我不确定你在这之后究竟是什么...你有一组复数,并希望通过使用它们的实部作为x坐标和虚部作为y将它们映射到平面?
如果是这样,您可以使用number.real
获取任何python虚数的实部,并使用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图上绘制点。
编辑:对于绘图部分,您当然必须通过from matplotlib.pyplot import *
导入matplotlib.pyplot或(正如我所做的)在pylab模式下使用ipython shell。
答案 1 :(得分:5)
跟进@ 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)
生产:
修改强>
我刚刚意识到还有一个polar
绘图功能:
for x in a:
plt.polar([0,angle(x)],[0,abs(x)],marker='o')
答案 2 :(得分: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
答案 3 :(得分:0)
如果您喜欢下面的图
您可以简单地通过以下两行来完成此操作(以上面的图为例):
z=[20+10j,15,-10-10j,5+15j] # array of complex values
complex_plane2(z,1) # function to be called
使用此处的简单jupyter代码 https://github.com/osnove/other/blob/master/complex_plane.py
我已经出于自己的目的编写了它。更好的是它对其他人有帮助。