我一直试图将椭圆绘制成一个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-")
我已经尝试在调用“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)
如何强制绘图不增加现有的数字限制?
解决方案(感谢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)
答案 0 :(得分:32)
正在发生的事情是轴是自动缩放以匹配您绘制的每个项目的范围。图像的自动调整比线条等更紧密(imshow
基本上调用ax.axis('image')
)。
获取轴限制并在之后进行设置应该有效。 (但之前limits = axes.axis()
以及之后的axes.axis(limits)
更加清晰。)
但是,如果您不希望自动缩放内容,最好在初始绘图后关闭自动缩放功能。在绘制图像后尝试axes.autoscale(False)
。
举个例子,比较一下:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.imshow(np.random.random((10,10)))
ax.plot(range(11))
plt.show()
有了这个:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.imshow(np.random.random((10,10)))
ax.autoscale(False)
ax.plot(range(11))
plt.show()