Python 相当于 Matlab 中的“等待”
Posted
技术标签:
【中文标题】Python 相当于 Matlab 中的“等待”【英文标题】:Python equivalent to 'hold on' in Matlab 【发布时间】:2014-02-23 07:35:47 【问题描述】:在 Python 的 matplotlib 中对于 Matlab 的 hold on
是否有明确的等效命令?我正在尝试将我所有的图表绘制在同一个轴上。一些图表是在for
循环内生成的,这些图表与su
和sl
分开绘制:
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 中的“等待”的主要内容,如果未能解决你的问题,请参考以下文章
相当于matplotlib中matlab的imagesc? [复制]
Python相当于MATLAB的Excel编写函数,xlswrite()