Python 创建绘图框架的画布

Python 创建绘图框架的画布,python,canvas,matplotlib,Python,Canvas,Matplotlib,我有以下功能: def get_rgba_bitmap(fig): fig.canvas.draw() tab = fig.canvas.copy_from_bbox(fig.bbox).to_string_argb() ncols, nrows = fig.canvas.get_width_height() return numpy.fromstring(tab, dtype = numpy.uint8).reshape(nrows, ncols, 4) 有了这个功能,我可以

我有以下功能:

def get_rgba_bitmap(fig):
  fig.canvas.draw()
  tab = fig.canvas.copy_from_bbox(fig.bbox).to_string_argb()
  ncols, nrows = fig.canvas.get_width_height()
  return numpy.fromstring(tab, dtype = numpy.uint8).reshape(nrows, ncols, 4)
有了这个功能,我可以创建一个图像的“地图”。有关我为什么需要“映射”以及生成函数的答案的更多详细信息,请参阅。绘制“地图”可提供:

使用
get\u rgba\u位图(图)
创建的画布是包括灰色背景在内的整个图形。在绘制“地图”时,灰色背景也被包括在内,从而缩小了实际图像的大小。对于单个图像,这对我来说并不重要,因为有一种方法可以解决它。然而,我现在需要几个子地块,这确实成了一个问题

因此,我现在需要的是一个函数,它只创建绘图帧的画布。记号和标签并不重要。我试图修改
get\u rgba\u bitmap
函数,但它不能完全工作:

def test(fig, ax):
  fig.canvas.draw()
  tab = fig.canvas.copy_from_bbox(ax.bbox).to_string_argb()

  bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  width, height = bbox.width * fig.dpi, bbox.height * fig.dpi

  ncols, nrows = width, height
  return numpy.fromstring(tab, dtype = numpy.uint8).reshape(nrows + 1, ncols + 1, 4)
我认为问题在于
ncol
nrows
的值错误。不知道这是从哪里来的

如果在
重塑
中向
ncol
nrows
添加1,脚本将运行并生成一个接近我所需的图像。但是,“地图”在新的绘图框中不正确,从外观上看,它在
x
y
中的偏移量为1像素。这对应于我需要添加到
nrows
ncol
的1。我怎样才能解决这个问题


谢谢您的帮助

您能通过设置相同的种子使图形可复制吗?类似于
random\u gen=np.random.mtrand.RandomState(seed=127260)
然后
x\u test=random\u gen.uniform(-1,1,size=n\u test)
设置种子。我还确信
x
y
中的偏移量是由于我需要添加1以获得正确的数组大小(
nrows
*
ncols
*4)。我基本上需要实现的是数组大小为
nrows
*
ncols
*4,其中
nrows
ncols
的定义与我在上述函数中的定义相同。但是,这需要在不丢失数据的情况下完成。是否
ax1.imshow(位图_rgba1[:-1,1:])
有助于解决您的问题?同样,这也有帮助。你帮了大忙!你有你使用的文档的链接吗?我一直在寻找一个,但我似乎总是在Tkinter小部件结束。这个问题非常有用。然而,我还必须阅读源代码,因为这些特性似乎没有得到很深入的记录。
def test(fig, ax):
  fig.canvas.draw()
  tab = fig.canvas.copy_from_bbox(ax.bbox).to_string_argb()

  bbox = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  width, height = bbox.width * fig.dpi, bbox.height * fig.dpi

  ncols, nrows = width, height
  return numpy.fromstring(tab, dtype = numpy.uint8).reshape(nrows + 1, ncols + 1, 4)