繁体   English   中英

在具有内联后端的jupyter笔记本中进行Sympy绘图

[英]Sympy plotting in the jupyter notebook with inline backend

我可以修改plot = sympy.plot(..., show=False)对象,以修改plot的属性并稍后调用plot.show()

如果我需要自定义情节的某些方面不直接暴露plot ,例如,axes'labels的大小,我可以访问的Matplotlib后端我的情节, be = plot._backend与我已经展示了条件(如plot.show()

可以在终端IPython会话中很好地工作(使用%matplotlib魔术),因为该图不断更新并且可以在脚本中工作(不太好),因为出于各种原因,我可以做的,但总的来说,足够好了,就是使用后端的savefig方法be.fig.savefig(...)

输入Jupiter笔记本。 出于性能原因,我更喜欢使用魔术的%matplotlib inline ,因此,如果我要访问Matplotlib后端,则必须在输出单元中实例化该图,但是稍后我进行的所有修改都将丢失,因为该图不再更新再次,我只能做一个savefig 如果我尝试去做

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, "

是否可以做我想做的事,即使用Jupyter笔记本中的Matplotlib后端并使用%matplotlib inline魔术来修改Sympy绘图的细节?

sympy图是matplotlib图。 现在肯定取决于您要做什么。 对于大多数stileistic适应,您可以在绘制之前设置各自的rcParam

%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))

在此处输入图片说明

另外,确实应该可以在创建图形之后修改图形和轴。

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

在此处输入图片说明

可能值得注意的是, fig.show()根本不应该fig.show()联后端中工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM