web-dev-qa-db-ja.com

matplotlibを使用して複素数(アーガント図)をプロットする方法

Matplotlibを使用して、複素数のセットから Argand Diagram を作成したいと思います。

  • これを行うのに役立つビルド済みの機能はありますか?

  • 誰かがアプローチを推奨できますか?

enter image description here

ImageLeonardoG 、CC-SA-3.0

18
atomh33ls

私はあなたがここで何をしているのか正確にはわかりません...あなたは複素数のセットを持っていて、それらの実数部をx座標としてそして虚数部をyとして使用してそれらを平面にマッピングしたいですか?

もしそうなら、python虚数をnumber.realで、虚数部をnumber.imagで実数部を取得できます。numpyを使用している場合は、 numpy配列で動作するヘルパー関数numpy.realおよびnumpy.imagなどのセット。

したがって、たとえば、次のように格納された複素数の配列があるとします。

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)

これは、各ポイントのアーガンド図にドットをプロットします。

編集:プロット部分については、もちろん、from matplotlib.pyplot import *を介してmatplotlib.pyplotをインポートしておくか、(私がしたように)pylabモードでipythonシェルを使用する必要があります。

14
inclement

@inclementの回答をフォローアップするには、次の関数は、0,0を中心とし、複素数のセットの最大絶対値にスケーリングされるアーガンドプロットを生成します。

プロット関数を使用し、(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 function output graph

編集:

polar プロット関数もあることに気づきました:

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

enter image description here

7
atomh33ls
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

0
Holomorphic Guy

以下のようなプロットを好む場合

1種類のプロット

またはこれ 2番目のタイプのプロット

これは、次の2行で簡単に実行できます(上記のプロットの例として)。

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

私は自分の目的のためにそれを書きました。さらにそれは他の人に役立ちます。

0
Dejan