Python 相当于 Matlab 中的“等待”

Posted

技术标签:

【中文标题】Python 相当于 Matlab 中的“等待”【英文标题】:Python equivalent to 'hold on' in Matlab 【发布时间】:2014-02-23 07:35:47 【问题描述】:

在 Python 的 matplotlib 中对于 Matlab 的 hold on 是否有明确的等效命令?我正在尝试将我所有的图表绘制在同一个轴上。一些图表是在for 循环内生成的,这些图表与susl 分开绘制:

import numpy as np
import matplotlib.pyplot as plt

for i in np.arange(1,5):
    z = 68 + 4 * np.random.randn(50)
    zm = np.cumsum(z) / range(1,len(z)+1)
    plt.plot(zm)
    plt.axis([0,50,60,80])

plt.show()

n = np.arange(1,51)
su = 68 + 4 / np.sqrt(n)
sl = 68 - 4 / np.sqrt(n)

plt.plot(n,su,n,sl)

plt.axis([0,50,60,80])
plt.show()

【问题讨论】:

你的意思是plt.hold(True) 可能是multiple-plot-in-one-figure-in-python的欺骗 @Cody Piersall - 它可能适用于其他人,但显然不适用于我的示例。 应该指出hold=True是默认的。 我希望这对我有用:LINK 【参考方案1】:

使用 plt.sca(ax) 设置当前坐标区,其中 ax 是您想要激活的坐标区对象。

例如:

在第一个函数中: 将 numpy 导入为 np 将 matplotlib.pyplot 导入为 plt

for i in np.arange(1,5):
    z = 68 + 4 * np.random.randn(50)
    zm = np.cumsum(z) / range(1,len(z)+1)
    plt.plot(zm)
    plt.axis([0,50,60,80])

plt.show()

在下一个函数中: def function2(...., ax=None)

if ax is None:
    fig, ax = plt.subplots(1)
else:
    plt.sca(ax)

n = np.arange(1,51)
su = 68 + 4 / np.sqrt(n)
sl = 68 - 4 / np.sqrt(n)

plt.plot(n,su,n,sl)

plt.axis([0,50,60,80])
plt.show()

【讨论】:

【参考方案2】:

检查pyplot 文档。为了完整起见,

import numpy as np
import matplotlib.pyplot as plt

#evenly sampled time at 200ms intervals
t = np.arange(0., 5., 0.2)

# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()

【讨论】:

【参考方案3】:

hold on 功能在matplotlib.pyplot 中默认开启。因此,每次您在 plt.show() 之前调用 plt.plot() 时,都会将绘图添加到绘图中。在函数plt.show() 之后启动plt.plot() 会导致重绘整个画面。

【讨论】:

在使用 IPython 时你会如何解决这个问题? 使用后端 %matplotlib inline 并且一个单元格内的所有 plt.plot() 将在同一帧中输出。如果将 plt.show() 放在单元格内的 plt.plot() 函数之间,它将创建更多帧,每个 plt.show() 都会创建一个新帧【参考方案4】:

您可以使用以下内容:

plt.hold(True)

【讨论】:

此功能已弃用,还有其他类似的解决方案吗? @Jyotirmay matplotlib 中的保持函数没有任何用途,因此已被弃用。 pyplot 总是表现得好像 hold 无论如何都设置为 True。【参考方案5】:

只需在最后拨打plt.show()

import numpy as np
import matplotlib.pyplot as plt

plt.axis([0,50,60,80])
for i in np.arange(1,5):
    z = 68 + 4 * np.random.randn(50)
    zm = np.cumsum(z) / range(1,len(z)+1)
    plt.plot(zm)    

n = np.arange(1,51)
su = 68 + 4 / np.sqrt(n)
sl = 68 - 4 / np.sqrt(n)

plt.plot(n,su,n,sl)

plt.show()

【讨论】:

注意:这在命令行交互式输入的情况下不起作用。如果在脚本中运行,则可以正常工作。

以上是关于Python 相当于 Matlab 中的“等待”的主要内容,如果未能解决你的问题,请参考以下文章

matlab中的norm( )是啥函数?

相当于matplotlib中matlab的imagesc? [复制]

Python相当于MATLAB的Excel编写函数,xlswrite()

将一个数字与 Python 中列表(或数组)中的每个元素相加

相当于Matlab的聚类质量函数?

Matlab 调用 Python 脚本