问题
I have a jupyter notebook and wish to create a plot in one cell, then write some markdown to explain it in the next, then set the limits and plot again in the next. This is my code so far:
# %%
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi)
y = np.sin(x ** 2)
plt.plot(x, y);
# %%
Some markdown text to explain what's going on before we zoom in on the interesting bit
# %%
plt.xlim(xmax=2);
The start of each cell is marked # %% above. The third cell shows an empty figure.
I'm aware of plt.subplots(2) to plot 2 plots from one cell but this does not let me have markdown between the plots.
Thanks in advance for any help.
回答1:
This answer to a similar question says you can reuse your axes and figure from a previous cell. It seems that if you just have figure as the last element in the cell it will re-display its graph:
# %%
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi)
y = np.sin(x ** 2)
fig, ax = plt.subplots()
ax.plot(x, y);
fig # This will show the plot in this cell, if you want.
# %%
Some markdown text to explain what's going on before we zoom in on the interesting bit
# %%
ax.xlim(xmax=2); # By reusing `ax`, we keep editing the same plot.
fig # This will show the now-zoomed-in figure in this cell.
回答2:
Easiest thing I can think of is to extract the plotting into a function that you can call twice. On the 2nd call you can then also call plt.xlim to zoom in. So something like (using you %% notation for new cells):
# %%
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
# %%
def make_plot():
x = np.linspace(0, 2 * np.pi)
y = np.sin(x ** 2)
plt.plot(x, y);
make_plot()
# %%
Some markdown text to explain what's going on before we zoom in on the interesting bit
# %%
make_plot()
plt.xlim(xmax=2)
来源:https://stackoverflow.com/questions/41537457/how-to-reuse-plot-in-next-jupyter-cell