If you wanted to only ever have one plot the two ways come to mind. One is similar to @bbgodfrey's method but incorporating some front end code to delete the previous plot. The other is to make the plot dynamic: a = Table[n, {n, -20, 20}]; Dynamic[ListPlot[a, DataRange -> {-1, 1}], TrackedSymbols :> {a}] Now every time you change `a` the plot will change. The example below is quick and dirty. I've used `Flatten` to modify `a` but there are many other ways: `Join`, `Append`, `Prepend` and so on. [![enter image description here][1]][1] [![enter image description here][2]][2] **Edit** there are a few ways to do it without using dynamic. Here is a [reference][3] so something @Kuba posted: SetOptions[EvaluationCell[], CellTags -> "target"] then NotebookWrite[Cells[CellTags -> "target"][[1]], Cell[BoxData[ToBoxes@ListPlot[a, DataRange -> {-1, 1}]], "Input", CellTags -> "target"]] [![enter image description here][4]][4] [1]: https://i.sstatic.net/E2r63.gif [2]: https://i.sstatic.net/ELf81.gif [3]: http://mathematica.stackexchange.com/questions/51891/overwrite-contents-of-a-cell [4]: https://i.sstatic.net/Ul45C.gif