Python Debug PlotsPlot and inspect NumPy arrays, Pandas DataFrames and tensors while you are stopped in the debugger. Type an expression, see the data.
Two arrays from one expression. The gap at x ≈ 2000 is real — 40 NaN, and the
statistics say so. The spikes at 1234 and 3999 are single samples the plot is
far too coarse to draw, which is exactly why WhyVS Code can already show you a DataFrame as a table, and it can show you an image. What it cannot do is answer the question you actually have at a breakpoint: did this array change the way I expected? This is built for stepping through an algorithm — plotting the same expression at successive steps, overlaying them, and seeing what moved. Getting started
You can also select an expression in the editor and press Expressions are re-evaluated every time the debugger stops, so stepping through a loop animates the plot. Freeze a pane to hold it still for comparison. Plotting several things togetherEach expression is one pane, so combining values means making the expression produce them. A plain dict needs no library at all:
Six views, chosen per paneThe dropdown offers whatever suits the value. Auto follows what the runtime suggests after looking at it.
Binning happens inside the debuggee, so five million points become sixty bars before anything crosses the wire. The bars sum to less than the element count, and rather than leave you to notice that, the pane says why.
A million cells would be a million DOM nodes, so only the visible rows exist. Pandas, with real dates
Every numeric column becomes a line on a shared time axis. The text column is reported rather than dropped — a column vanishing without a word is indistinguishable from a bug in your own code. This picture also shows a trap worth knowing:
The same data as a colour matrix, with its scale — and a note that the cells were stretched to fit, because a stretched cell misrepresents the proportions of what is in it. What else it does
Works with NumPy arrays, Pandas DataFrames, Series and indexes, PyTorch and TensorFlow tensors, dicts of arrays, and plain lists. Anything else is described — type, shape and repr — rather than refused. Tensors are handled properly rather than nominally: one with No installation in your projectThe Python side is injected into the debug session at runtime. There is nothing
to Settings
Bin count, point budget, log scales, colormap and the x axis are set per pane, in the row under its header — they belong to one question rather than to the whole workspace. RequirementsVS Code 1.89 or newer, and a Python debug session using StatusFirst release. Everything above works and is covered by tests, including runs against a real debugpy session. Two things are honest gaps rather than oversights. It has not been run against a real Remote-SSH or dev-container setup: the design is built for them and the reasoning is written down, but reasoning is not a measurement. And scatter takes one series against the x axis rather than several x/y pairs. Reports from remote setups are especially welcome on GitHub. LicenseMIT |





