It's interesting to see this, I want to know about how others work.
But I've found with jupyter that it's most productive for me to just use jupyterlab in the browser, it has lots of features and for the visualizations that I do I need a good viewer. So vim doesn't work, and executing in ipython is like the console, not the notebook interface anyway.
I recommend using jupytext too, and then you can keep .py files as the canonical notebook files in your repo and code history.
From my perspective when I had to turn ML models from a "real scientist" to something I could use in production, emacs-ipython-notebooks[1] was immensely helpful for me, since it allowed to connect to the jupyter server and edit and copy things from emacs to other code places as if I'm looking at an org mode file.
I see the appeal of Jupyter notebooks for someone testing out things or experimenting, but it's a bit like a brain dump that isn't that trivial to navigate around when a second or third person is involved.
I use different tools, but what I do is insert image outputs inline with the calling code, in an Emacs text buffer. (emacs-gtk has native support for this). I don't have any explicit "notebook cell" logic. What I do is heuristically assume that an image object immediately following a code block is its corresponding output, and overwrite it on reevaluation. Very inexpensive hack that almost always does the right thing.
(Also, the image-invoking functions are just native functions in the source language, so I get a lot of orthogonality for free. For example, all the eval- and send-expr- style keybindings work automagically -- no need to extend the elisp language mode to special-case images).
I used to do the same, but I've been pleasantly surprised by VS Code's support for Jupyter notebooks. VS Code is my main editor, so it's really nice having all my familiar keybindings, plugins, VSCodeVim, etc. working out of the box.
I use IPython in a terminal and keep a Firefox tab open in a split screen to look at plots. When the IPython script is working, I write it out to a Python file. The only times I use Jupyter notebooks are:
1. If there's a really visually intensive workflow, like some sort of data exploration step where I need to be generating and inspecting multiple plots at the same time over and over.
2. If my goal is to make an instructional artifact and interleaving Python and explanatory HTML is helpful.
But I've found with jupyter that it's most productive for me to just use jupyterlab in the browser, it has lots of features and for the visualizations that I do I need a good viewer. So vim doesn't work, and executing in ipython is like the console, not the notebook interface anyway.
I recommend using jupytext too, and then you can keep .py files as the canonical notebook files in your repo and code history.