ControlMatplotlib控件使用问题:Pyform嵌入pyplot时如何设置value值
解决ControlMatplotlib控件的value赋值问题
我来帮你搞定这个问题!你遇到的核心问题是没有正确关联matplotlib的Figure对象到ControlMatplotlib控件上——直接用pplot.scatter()操作的是全局的pyplot画布,和控件的画布不是同一个,所以控件无法识别你绘制的内容。
下面给你两种可行的解决方案:
方案1:使用控件自带的Figure对象(推荐)
ControlMatplotlib控件本身已经内置了一个Figure实例,你可以直接获取它并在上面绘图,不需要手动设置value:
from pyforms import BaseWidget from pyforms.controls import ControlMatplotlib import matplotlib.pyplot as plt class SimpleExample(BaseWidget): def __init__(self): super(SimpleExample, self).__init__('Simple example') self._graph = ControlMatplotlib("plot") self.formset = [' ', (' ', '_graph', ' '), ' '] # 获取控件自带的Figure和Axes fig = self._graph.get_figure() ax = fig.add_subplot(111) # 在Axes上绘制图形 X = [i for i in range(0,100,2)] Y = [i for i in range(0,150,3)] ax.scatter(X, Y) # 刷新控件显示 self._graph.draw()
方案2:手动创建Figure并赋值给value
如果你想自己管理Figure对象,也可以创建一个独立的Figure实例,然后赋值给self._graph.value:
from pyforms import BaseWidget from pyforms.controls import ControlMatplotlib from matplotlib.figure import Figure class SimpleExample(BaseWidget): def __init__(self): super(SimpleExample, self).__init__('Simple example') self._graph = ControlMatplotlib("plot") self.formset = [' ', (' ', '_graph', ' '), ' '] # 手动创建Figure和Axes fig = Figure() ax = fig.add_subplot(111) X = [i for i in range(0,100,2)] Y = [i for i in range(0,150,3)] ax.scatter(X, Y) # 将自定义的Figure赋值给控件的value self._graph.value = fig self._graph.draw()
关键说明
你原代码里直接调用pplot.scatter()是在操作matplotlib的全局默认Figure,这个Figure和ControlMatplotlib控件内部的画布没有关联,所以控件无法显示你绘制的内容。必须确保绘图操作是在和控件绑定的Figure/Axes上进行的。
内容的提问来源于stack exchange,提问作者KenanKarav
相关产品推荐
相关产品推荐

