在使用matplotlib的pgf后端时,我有时会看到如下错误:
! Dimension too large.
<to be read again>
\advance
l.69 ...o{\pgfqpoint{-11.400000in}{-235.382893in}}
Run Code Online (Sandbox Code Playgroud)
这是来自LaTeX处理步骤,如果我向matplotlib询问png,或者在处理嵌入了pgf文件的文档时会发生这种情况.当我设置与数据限制相比非常窄的轴限制时,会发生这种情况.所以我假设pgf接收并尝试处理或绘制整个数据集,并且一些超出预期可见范围的点也在pgf的内部大小限制之外.
MWE:
import matplotlib as mpl
mpl.use("pgf")
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5,5)
y = 100*np.exp(x)
plt.xlim((-0.1,0.1))
plt.ylim((99,101))
plt.plot(x,y)
plt.savefig('exp.png')
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有什么方法可以让matplotlib提供pgf一组有限的数据?或者还有其他解决方案吗?我可以根据我想要的限制截断我提供给pyplot命令的数据,但我希望matplotlib有一个内部解决方案,以避免我从许多个案的烦躁中获取.(还有一种情况,当我在轴上添加样条补丁时,我不知道如何切断部分曲线.)
我看了一些文件,看到get_clip_on()和get_clip_box()的Line2D,但任何常规的情节命令后,前一种方法反正返回true,后者返回一些TransformedBbox规范,大概占轴本身的东西.
我有时会因为 matplotlib 的 mplot3d 中缺少某些渲染功能而感到沮丧。在大多数情况下,我确实发现我可以在 mayavi 中得到我想要的东西,但是 matplotlib 3d 轴仍然更可取,如果只是为了美观,比如 LaTeX 化的标签和与我的其他图形的视觉一致性。
我的问题是关于明显的 hack:是否可以在没有轴的情况下在 Mayavi 中绘制一些 3d 对象(表面或 3d 散点图或其他),导出该图像,然后将其放置在具有正确大小、方向、坐标的 matplotlib Axes3D 中投影等?任何人都可以想出实现这一目标需要什么的大纲,或者甚至提供一个框架解决方案?
前段时间我摆弄了这个,发现我在导出透明背景 mayavi 图形并将其放置在空的 matplotlib Axes3D(带有刻度、标签等)方面没有问题,但我并没有得到什么mayavi 和 matplotlib 的相机配置相匹配。简单地将方位角、仰角和距离这三个常用参数在两种环境中设置为相等并不能解决问题;大概需要的是对渲染整个场景的透视(或其他)变换进行一些考虑,而我在该领域相当无能为力。
看起来这可能有用:http : //docs.enthought.com/mayavi/mayavi/auto/example_mlab_3D_to_2D.html