我一直试图将椭圆绘制成一个imshow情节.它有效,但绘制图像后绘制椭圆似乎增加了xlim和ylim,产生了一个边框,我想摆脱它:

请注意,仅在调用imshow后没有直接显示白色边框.
我的代码如下:
self.dpi = 100
self.fig = Figure((6.0, 6.0), dpi=self.dpi)
self.canvas = FigureCanvas(self.fig)
self.canvas.setMinimumSize(800, 400)
self.cax = None
self.axes = self.fig.add_subplot(111)
self.axes.imshow(channel1, interpolation="nearest")
self.canvas.draw()
self.axes.plot(dat[0], dat[1], "b-")
Run Code Online (Sandbox Code Playgroud)
我已经尝试在调用"plot"之前和之后设置限制,但没有效果
# get limits after calling imshow
xlim, ylim = pylab.xlim(), pylab.ylim()
...
# set limits before/after calling plot
self.axes.set_xlim(xlim)
self.axes.set_ylim(ylim)
Run Code Online (Sandbox Code Playgroud)
如何强制阴谋不增加现有的数字限制?
解决方案(感谢Joe):
#for newer matplotlib versions
self.axes.imshow(channel1, interpolation="nearest")
self.axes.autoscale(False)
self.axes.plot(dat[0], dat[1], "b-")
#for older matplotlib versions (worked for me using 0.99.1.1)
self.axes.imshow(channel1, interpolation="nearest")
self.axes.plot(dat[0], dat[1], "b-", scalex=False, scaley=False)
Run Code Online (Sandbox Code Playgroud) 我正在尝试确定函数的实际当前模块(如果从其他地方导入,则会看到),即使当前模块是" 顶级脚本环境 " __main__.
这可能听起来像一个奇怪的事情,但背景是我需要序列化一个函数并在不同的机器上反序列化它(包括参数),为此我需要确保__main__在反序列化之前导入正确的模块AND NOT (否则我得到一个错误说AttributeError: 'module' object has no attribute my_fun).
到目前为止,我已经尝试过检查:
import inspect
print inspect.getmodule(my_fun)
Run Code Online (Sandbox Code Playgroud)
这给了我
<module '__main__' from 'example.py'>
Run Code Online (Sandbox Code Playgroud)
当然.我也试过找一些有用的东西globals(),没有运气.
我真正想要的是<module 'example' from 'example.py'>.我想一个hacky方法是使用类似的东西从文件名解析它
m_name = __main__.__file__.split("/")[-1].replace(".pyc","")
Run Code Online (Sandbox Code Playgroud)
然后按名称查找模块sys.modules[m_name].
有更干净/更好的方法吗?
编辑:在了解了ipython的"FakeModule"以及更多谷歌搜索后,我发现了这篇文章,它正好描述了我面临的问题,包括我当前的解决方案(明确导入当前模块import current_module并序列化current_module.my_fun而不是my_fun).我试图避免这种情况,因为对我的软件包的用户来说可能不太直观.