以特定 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()
备注:
当我尝试使用 graph.savefig
时,我得到了 AttributeError: 'Plot' object has no attribute 'saveimage'
我在一些在线资源中偶然发现了 saveimage
方法,听起来好像是常见的方法——我猜 API 变了?
graph.save('./figures/miles_to_km.png', dpi=300)
产生类型错误:TypeError: save() got an unexpected keyword argument 'dpi'
在plot
中使用dpi
属性不会引发任何错误,但也不会影响图像质量:graph = syp.plot(miles_to_km, dpi=300, show=False)
我也试过使用 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
。
- 我正在使用 SymPy v. 0.7.6
下面的 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。
我想知道是否有办法更改 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()
备注:
当我尝试使用
graph.savefig
时,我得到了AttributeError: 'Plot' object has no attribute 'saveimage'
我在一些在线资源中偶然发现了saveimage
方法,听起来好像是常见的方法——我猜 API 变了?graph.save('./figures/miles_to_km.png', dpi=300)
产生类型错误:TypeError: save() got an unexpected keyword argument 'dpi'
在
plot
中使用dpi
属性不会引发任何错误,但也不会影响图像质量:graph = syp.plot(miles_to_km, dpi=300, show=False)
我也试过使用 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
。
- 我正在使用 SymPy v. 0.7.6
下面的 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。