Get Jupyter notebook to display matplotlib figures in real-time
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I have a long running Python loop (used for machine learning), which periodically prints output and displays figures (using matplotlib). When run in Jupyter Notebook, all the text (stdout) is displayed in real-time, but the figures are all queued and not displayed until the entire loop is done.
I'd like to see the figures in real-time, on each iteration of the loop. During cell execution, not when the entire cell execution is done.
For example, if my code is:
for i in range(10):
print(i)
show_figure(FIG_i)
do_a_10_second_calculation()
I currently see:
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9
What I'd like is:
0
FIG_0
1
FIG_1
2
FIG_2
...
Most importantly, I'd like to see the figures as they are calculated, as opposed to not seeing any figures on the screen until the entire loop is done.
python matplotlib jupyter-notebook real-time
add a comment |
I have a long running Python loop (used for machine learning), which periodically prints output and displays figures (using matplotlib). When run in Jupyter Notebook, all the text (stdout) is displayed in real-time, but the figures are all queued and not displayed until the entire loop is done.
I'd like to see the figures in real-time, on each iteration of the loop. During cell execution, not when the entire cell execution is done.
For example, if my code is:
for i in range(10):
print(i)
show_figure(FIG_i)
do_a_10_second_calculation()
I currently see:
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9
What I'd like is:
0
FIG_0
1
FIG_1
2
FIG_2
...
Most importantly, I'd like to see the figures as they are calculated, as opposed to not seeing any figures on the screen until the entire loop is done.
python matplotlib jupyter-notebook real-time
add a comment |
I have a long running Python loop (used for machine learning), which periodically prints output and displays figures (using matplotlib). When run in Jupyter Notebook, all the text (stdout) is displayed in real-time, but the figures are all queued and not displayed until the entire loop is done.
I'd like to see the figures in real-time, on each iteration of the loop. During cell execution, not when the entire cell execution is done.
For example, if my code is:
for i in range(10):
print(i)
show_figure(FIG_i)
do_a_10_second_calculation()
I currently see:
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9
What I'd like is:
0
FIG_0
1
FIG_1
2
FIG_2
...
Most importantly, I'd like to see the figures as they are calculated, as opposed to not seeing any figures on the screen until the entire loop is done.
python matplotlib jupyter-notebook real-time
I have a long running Python loop (used for machine learning), which periodically prints output and displays figures (using matplotlib). When run in Jupyter Notebook, all the text (stdout) is displayed in real-time, but the figures are all queued and not displayed until the entire loop is done.
I'd like to see the figures in real-time, on each iteration of the loop. During cell execution, not when the entire cell execution is done.
For example, if my code is:
for i in range(10):
print(i)
show_figure(FIG_i)
do_a_10_second_calculation()
I currently see:
0
1
2
...
9
FIG_0
FIG_1
...
FIG_9
What I'd like is:
0
FIG_0
1
FIG_1
2
FIG_2
...
Most importantly, I'd like to see the figures as they are calculated, as opposed to not seeing any figures on the screen until the entire loop is done.
python matplotlib jupyter-notebook real-time
python matplotlib jupyter-notebook real-time
asked Nov 23 '18 at 16:32
SRobertJamesSRobertJames
2,46773272
2,46773272
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
I suppose the problem lies in the part of the code you do not show here. Because it should work as expected. Making it runnable,
%matplotlib inline
import matplotlib.pyplot as plt
def do_a_1_second_calculation():
plt.pause(1)
def show_figure(i):
plt.figure(i)
plt.plot([1,i,3])
plt.show()
for i in range(10):
print(i)
show_figure(i)
do_a_1_second_calculation()
results in the desired outcome
Aha! I didn't realize you need to explicitly doplt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.
– SRobertJames
Nov 23 '18 at 17:38
add a comment |
The display
function from IPython.display
can be used to immediately flush a figure to cell output. Assuming that FIG_i
in your code is an actual Matplotlib figure object, you can just replace show_figure(FIG_i)
with display(FIG_i)
and the figures will output in real time.
Here's a complete example of display
in action:
from matplotlib import pyplot as plt
import numpy as np
from IPython.display import display
from time import sleep
for eps in range(0, 11, 5):
data = np.random.randint(eps, eps+10, size=(2,10))
fig = plt.figure()
ax = fig.gca()
ax.plot(*data)
print('eps %f' % eps)
display(fig)
plt.close() # .close prevents the normal figure display at end of cell execution
sleep(2)
print('slept 2 sec')
Here's a screenshot of the output:
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53450189%2fget-jupyter-notebook-to-display-matplotlib-figures-in-real-time%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
I suppose the problem lies in the part of the code you do not show here. Because it should work as expected. Making it runnable,
%matplotlib inline
import matplotlib.pyplot as plt
def do_a_1_second_calculation():
plt.pause(1)
def show_figure(i):
plt.figure(i)
plt.plot([1,i,3])
plt.show()
for i in range(10):
print(i)
show_figure(i)
do_a_1_second_calculation()
results in the desired outcome
Aha! I didn't realize you need to explicitly doplt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.
– SRobertJames
Nov 23 '18 at 17:38
add a comment |
I suppose the problem lies in the part of the code you do not show here. Because it should work as expected. Making it runnable,
%matplotlib inline
import matplotlib.pyplot as plt
def do_a_1_second_calculation():
plt.pause(1)
def show_figure(i):
plt.figure(i)
plt.plot([1,i,3])
plt.show()
for i in range(10):
print(i)
show_figure(i)
do_a_1_second_calculation()
results in the desired outcome
Aha! I didn't realize you need to explicitly doplt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.
– SRobertJames
Nov 23 '18 at 17:38
add a comment |
I suppose the problem lies in the part of the code you do not show here. Because it should work as expected. Making it runnable,
%matplotlib inline
import matplotlib.pyplot as plt
def do_a_1_second_calculation():
plt.pause(1)
def show_figure(i):
plt.figure(i)
plt.plot([1,i,3])
plt.show()
for i in range(10):
print(i)
show_figure(i)
do_a_1_second_calculation()
results in the desired outcome
I suppose the problem lies in the part of the code you do not show here. Because it should work as expected. Making it runnable,
%matplotlib inline
import matplotlib.pyplot as plt
def do_a_1_second_calculation():
plt.pause(1)
def show_figure(i):
plt.figure(i)
plt.plot([1,i,3])
plt.show()
for i in range(10):
print(i)
show_figure(i)
do_a_1_second_calculation()
results in the desired outcome
answered Nov 23 '18 at 17:30
ImportanceOfBeingErnestImportanceOfBeingErnest
142k13170248
142k13170248
Aha! I didn't realize you need to explicitly doplt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.
– SRobertJames
Nov 23 '18 at 17:38
add a comment |
Aha! I didn't realize you need to explicitly doplt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.
– SRobertJames
Nov 23 '18 at 17:38
Aha! I didn't realize you need to explicitly do
plt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.– SRobertJames
Nov 23 '18 at 17:38
Aha! I didn't realize you need to explicitly do
plt.show()
. I had omitted that, and all the figures still displayed at the end, when the cell completed execution. Adding that in the loop indeed solves the problem.– SRobertJames
Nov 23 '18 at 17:38
add a comment |
The display
function from IPython.display
can be used to immediately flush a figure to cell output. Assuming that FIG_i
in your code is an actual Matplotlib figure object, you can just replace show_figure(FIG_i)
with display(FIG_i)
and the figures will output in real time.
Here's a complete example of display
in action:
from matplotlib import pyplot as plt
import numpy as np
from IPython.display import display
from time import sleep
for eps in range(0, 11, 5):
data = np.random.randint(eps, eps+10, size=(2,10))
fig = plt.figure()
ax = fig.gca()
ax.plot(*data)
print('eps %f' % eps)
display(fig)
plt.close() # .close prevents the normal figure display at end of cell execution
sleep(2)
print('slept 2 sec')
Here's a screenshot of the output:
add a comment |
The display
function from IPython.display
can be used to immediately flush a figure to cell output. Assuming that FIG_i
in your code is an actual Matplotlib figure object, you can just replace show_figure(FIG_i)
with display(FIG_i)
and the figures will output in real time.
Here's a complete example of display
in action:
from matplotlib import pyplot as plt
import numpy as np
from IPython.display import display
from time import sleep
for eps in range(0, 11, 5):
data = np.random.randint(eps, eps+10, size=(2,10))
fig = plt.figure()
ax = fig.gca()
ax.plot(*data)
print('eps %f' % eps)
display(fig)
plt.close() # .close prevents the normal figure display at end of cell execution
sleep(2)
print('slept 2 sec')
Here's a screenshot of the output:
add a comment |
The display
function from IPython.display
can be used to immediately flush a figure to cell output. Assuming that FIG_i
in your code is an actual Matplotlib figure object, you can just replace show_figure(FIG_i)
with display(FIG_i)
and the figures will output in real time.
Here's a complete example of display
in action:
from matplotlib import pyplot as plt
import numpy as np
from IPython.display import display
from time import sleep
for eps in range(0, 11, 5):
data = np.random.randint(eps, eps+10, size=(2,10))
fig = plt.figure()
ax = fig.gca()
ax.plot(*data)
print('eps %f' % eps)
display(fig)
plt.close() # .close prevents the normal figure display at end of cell execution
sleep(2)
print('slept 2 sec')
Here's a screenshot of the output:
The display
function from IPython.display
can be used to immediately flush a figure to cell output. Assuming that FIG_i
in your code is an actual Matplotlib figure object, you can just replace show_figure(FIG_i)
with display(FIG_i)
and the figures will output in real time.
Here's a complete example of display
in action:
from matplotlib import pyplot as plt
import numpy as np
from IPython.display import display
from time import sleep
for eps in range(0, 11, 5):
data = np.random.randint(eps, eps+10, size=(2,10))
fig = plt.figure()
ax = fig.gca()
ax.plot(*data)
print('eps %f' % eps)
display(fig)
plt.close() # .close prevents the normal figure display at end of cell execution
sleep(2)
print('slept 2 sec')
Here's a screenshot of the output:
edited Nov 23 '18 at 17:05
answered Nov 23 '18 at 16:46
teltel
7,52921433
7,52921433
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53450189%2fget-jupyter-notebook-to-display-matplotlib-figures-in-real-time%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown