以特定分辨率/像素密度保存Python SymPy图形

2024-06-30 16:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有办法改变sypy图的像素密度/分辨率。例如,让我们考虑下面的简单代码片段:

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

enter image description here

注意事项:

  • 当我尝试使用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后端:

^{pr2}$

其中plt=matplotlib.pyplot。然而,画布是空白的。另外,相关信息可能是我正在IPython笔记本中运行它,并且启用了%matplotlib inline。在

  • 我用的是SymPy v.0.7.6

下面的backend解决方案显示了IPython笔记本中的绘图,但它也生成了一个白色画布(如png)

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

enter image description here

编辑和解决方案:

多亏了Cody Piersall的回答,这个问题现在得到了解决。我更新到ipython4.0(Jupyter笔记本)并绘制如下

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

Tags: tobackendfalseplotpngmatplotlibsaveshow
1条回答
网友
1楼 · 发布于 2024-06-30 16:14:45

假设您使用的是matplotlib后端(如果安装了matplotlib,这是默认设置),您只需import matplotlib.pyplot并使用^{}。在

这是因为sympy使用matplotlib进行打印,而且由于matplotlib是有状态的,所以它知道您正在使用哪个plot。在

下面是您的示例,但是使用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保存它们。你只需要有点棘手。在

^{pr2}$

相关问题 更多 >