无法获得以下代码来完成所有三件事:
在调试breakpoint
import matplotlib.pyplot as plt
from ipdb import set_trace
fig, ax = plt.subplots()
ax.plot(range(10))
plt.show()
set_trace()同时完成所有三件事情的用例是在一个模块内部进行调试,该模块需要matplotlib可视化中的信息。
从控制台作为IPython运行ipython --pylab只完成(1)和(3)上面的操作,如下所示。在代码中使用plt.ion()也是如此。调试器可用,但可视化不会呈现。

从控制台以ipython的形式运行IPython,或者运行python <script.py>,只完成(1)和(2)上面的操作,如下所示。可视化已呈现,但调试器不可用。

现在我正在使用python 3.7.7、matplotlib 3.1.3和Qt5Agg后端、ipython 7.13.0和ipdb 0.12.3。
发布于 2020-04-13 03:56:27
如果使用ion()启用交互模式,则可以在运行python <script.py>时实现它。它将在plot之后立即显示绘图(通过调用draw),并将控件留在set_trace的控制台上。
import matplotlib.pyplot as plt
from ipdb import set_trace
# Enable interactive mode
plt.ion()
fig, ax = plt.subplots()
# Shown immediately
ax.plot(range(10))
set_trace()发布于 2020-04-16 11:29:26
场景1
import matplotlib.pyplot as plt
from ipdb import set_trace
fig, ax = plt.subplots()
ax.plot(range(10))
plt.show()
set_trace()在你的例子中,你
因此,plt.show()会阻止脚本其余部分的执行,直到图形关闭为止。
场景2
import matplotlib.pyplot as plt
from ipdb import set_trace
# Enable interactive mode
plt.ion()
fig, ax = plt.subplots()
ax.plot(range(10))
# Shown immediately
set_trace()使用@ mode 444代码,您处于交互式模式。但是,考虑到代码注释,交互模式的工作方式与@ code 444期望的工作方式略有不同。它不会立即强制抽签,但是当控件返回给REPL (在您的例子中是ipython )时,它会强制使用。但是,在进入调试器之前,我们永远不会到达那里。
场景3
import matplotlib.pyplot as plt
from ipdb import set_trace
# Enable interactive mode
plt.ion()
fig, ax = plt.subplots()
ax.plot(range(10))
plt.show() # or: fig.canvas.draw() or plt.pause()
set_trace()注释中的@ilke444建议是有效的,因为我们实际上在进入调试器之前强制绘制了图形。
发布于 2021-06-29 09:18:35
在以下情况下,我遇到了类似的问题:我在Pycharm上运行调试模式,并停在某个地方,然后我尝试在调试控制台中运行一个函数,该函数应该使用matplotlib.pyplot绘制图形,但它没有
解决方案是在函数结束时实际删除plt.show(),现在它可以工作了
https://stackoverflow.com/questions/61111129
复制相似问题