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

新手上路,请多包涵

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

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

  • 谁能推荐一种方法?

在此处输入图像描述

图片LeonardoG 提供,CC-SA-3.0

原文由 Lee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 963
2 个回答

我不确定你到底想在这里做什么……你有一组复数,并想通过将它们的实部用作 x 坐标并将虚部用作 y 来将它们映射到平面?

如果是这样,您可以使用 --- 获得任何 python 虚数的实部,使用 number.imag number.real 获得虚数部分。如果您使用的是 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 * 或者(像我一样)在 pylab 模式下使用 ipython shell。

原文由 inclement 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

我使用了 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)

产生:argand 函数输出图

编辑:

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

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

在此处输入图像描述

原文由 Lee 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏