Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用matplotlib绘制复数(Argand图)_Python_Numpy_Matplotlib_Plot_Complex Numbers - Fatal编程技术网

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

Python 如何使用matplotlib绘制复数(Argand图),python,numpy,matplotlib,plot,complex-numbers,Python,Numpy,Matplotlib,Plot,Complex Numbers,我想使用matplotlib从一组复数创建一个 是否有任何预构建的函数可以帮助我完成此操作 有人能推荐一种方法吗 通过,CC-SA-3.0我不确定你到底想在这里做什么……你有一组复数,想用它们的实部作为x坐标,虚部作为y坐标,把它们映射到平面上吗 如果是这样,您可以使用number.real获得任何python虚数的实部,使用number.imag获得虚数。如果您使用的是numpy,它还提供了一组辅助函数numpy.real和numpy.imag等,这些函数在numpy阵列上工作 例如,如

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

  • 是否有任何预构建的函数可以帮助我完成此操作

  • 有人能推荐一种方法吗


通过,CC-SA-3.0

我不确定你到底想在这里做什么……你有一组复数,想用它们的实部作为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图表上为每个点绘制点


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

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

我使用了plot函数和(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)
产生:

编辑:

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

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


如果您喜欢下面这样的绘图

还是这个

您只需通过以下两行即可完成此操作(作为上述绘图的示例):

从这里使用一个简单的jupyter代码


我写它是为了我自己的目的。更好的是,它可以帮助其他人。

尽量避免导入*:如果不在当前名称空间中导入,并执行类似于导入matplotlib.pyplot作为plt然后执行
plt的操作,那么它的可读性会更高,也不会更容易混淆。
。另外,这样可以避免可能的名称冲突
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()
z=[20+10j,15,-10-10j,5+15j] # array of complex values

complex_plane2(z,1) # function to be called