matplotlib与pgf,错误:维度太大

tsj*_*tsj 8 python matplotlib pgf

在使用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规范,大概占轴本身的东西.

小智 -2

试试这个代码

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)

x_limit = (-0.1, 0.1)
y_limit = (99, 101)

# Filter data based on visible range
visible_data = (x_limit[0] <= x) & (x <= x_limit[1]) & (y_limit[0] <= y) & (y <= y_limit[1])

plt.xlim(x_limit)
plt.ylim(y_limit)

plt.plot(x[visible_data], y[visible_data])
plt.savefig('exp.png')
Run Code Online (Sandbox Code Playgroud)