Sympy在带有内联后端的jupyter笔记本中绘图

时间:2018-03-16 11:55:41

标签: matplotlib jupyter-notebook sympy

我可以修改plot对象修改 plot.show()的属性以及稍后调用plot

如果我需要定制不直接暴露的情节的某些方面 通过be = plot._backend,例如,轴的标签的大小,我可以访问 我的情节的Matplotlib后端,plot.show()有条件 我已经展示了(如%matplotlib)我的情节。

这在终端IPython会话中很好用(使用 savefig魔法因为这个数字不断更新而且 在脚本中工作(不太好),因为各种原因我都是 可以做,但从根本上说是足够好,是使用be.fig.savefig(...)方法 后端,%matplotlib inline

输入Jupiter笔记本。出于性能原因,我更喜欢使用 魔法savefig,所以如果我想访问Matplotlib 后端我必须在输出单元格中实例化绘图,但稍后 我放置的任何修改都会丢失,因为情节已不复存在 再次更新......我所能做的就是be.fig.show() 。如果我尝试

/home/boffi/lib/miniconda3/lib/python3.6/site-packages/matplotlib/figure.py:459: UserWarning:

我收到错误消息

  

matplotlib is currently using a non-GUI backend, so cannot show the figure   "matplotlib is currently using a non-GUI backend, "   %matplotlib inline

是否有可能做我想做的事情,即修改a的细节 Sympy在Jupyter笔记本中使用Matplotlib后端的情节 使用{{1}}魔法?

1 个答案:

答案 0 :(得分:4)

一个症状情节是一个matplotlib情节。 现在肯定取决于你想做什么。对于大多数stilistic适应,您可以在绘图之前设置相应的rcParams

%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams["xtick.labelsize"] = 16
plt.rcParams["xtick.color"] = "red"

from sympy import symbols
from sympy.plotting import plot
x = symbols('x')

p = plot(x**2, (x, -5, 5))

enter image description here

此外,确实可以在创建图形后修改图形和轴。

fig = p._backend.fig
ax = fig.axes[0]
ax.set_xticks([-4,4])
for i, label in enumerate(ax.get_yticklabels()):
    label.set_rotation(i*15)
    label.set_size(15)
    label.set_color((1.-i/10.,0,i/10.))
fig

enter image description here

值得注意的是fig.show()根本不应该在内联后端工作。