以特定 resolution/pixel 密度保存 Python SymPy 数字

Saving Python SymPy figures with a specific resolution/pixel density

我想知道是否有办法更改 sympy 图的像素 density/resolution。例如,让我们考虑下面的简单代码片段:

import sympy as syp

x = syp.Symbol('x')
miles_to_km = x * 1.609344
miles_to_km.evalf()

graph = syp.plot(miles_to_km, show=False)
graph.save('./figures/miles_to_km.png')
graph.show()

备注:

我也试过使用 matplotlib 后端:

plt.figure()
graph = syp.plot(miles_to_km, show=False)
#graph.save('./figures/miles_to_km.png')
plt.savefig('./figures/miles_to_km.png')
graph.show()

其中 plt = matplotlib.pyplot。但是,canvas 是空白的。另外相关信息可能是我 运行 它在 IPython 笔记本中,启用了 %matplotlib inline

下面的 backend 解决方法显示了 IPython 笔记本中的绘图,但它也会生成白色 canvas(如 png)

graph = syp.plot(miles_to_km, show=False)
backend = graph.backend(graph)
backend.fig.savefig('ch01_2.png', dpi=300)
backend.show()

编辑和解决方案:

感谢 Cody Piersall 的回答,问题现已解决。我更新到 IPython 4.0 (Jupyter notebook) 并绘制如下

graph = syp.plot(miles_to_km, show=False)
backend = graph.backend(graph)
backend.process_series()
backend.fig.savefig('miles_to_km.png', dpi=300)
backend.show()

假设您使用的是 matplotlib 后端,如果您安装了 matplotlib,这是默认后端,您只需 import matplotlib.pyplot 并使用 pyplot.savefig.

之所以可行,是因为 sympy 使用 matplotlib 进行绘图,并且由于 matplotlib 是有状态的,它知道您正在使用哪个绘图。

这是您的示例,但使用 savefig 保存为 png。

import sympy as syp

x = syp.Symbol('x')
miles_to_km = x * 1.609344
miles_to_km.evalf()

graph = syp.plot(miles_to_km, show=False)

# Does not work in IPython Notebook, but works in a script.
import matplotlib.pyplot as plt
plt.savefig('./figures/miles_to_km.png', dpi=300)

如果您在 IPython 笔记本中,上述方法将不起作用,但您仍然可以使用指定的 dpi 保存它们。你只需要对此有点棘手。

# works in IPython Notebook
backend = graph.backend(graph)
ackend.fig.savefig('300.png', dpi=300)
backend.fig.savefig('20.png', dpi=20)

这个问题已经解决,您现在可以简单地使用这个:

graph = sympy.plot(f, show = False)
graph.save('fig.png')

不幸的是,它似乎不允许选择 dpi。