【问题标题】:kivy garden Grap xmin xmax update (real time)kivy garden Grap xmin xmax 更新(实时)
【发布时间】:2016-10-28 16:29:11
【问题描述】:

有没有办法更新kivy garden中Graph的xmin和xmax?

目前,我的 xmin 为 0,xmax 为 10,我正在绘制一个包含 (x,y) 点的列表。 y 从 0 开始,每秒递增一次,而 x 只是一个计算迭代次数的计数器。因此,一旦 x > 10,图形就不会实时更新,因此 x 轴不会像例如1-11 和下一秒 2-12 和下一个 3-13 等等,所以我总是显示 10 个值,但 grap 是“活的”。

kivy garden Graph如何实现?

   graph = Graph(
                    xlabel='Iteration',
                    ylabel='Value',
                    x_ticks_minor=1,
                    x_ticks_major=5,
                    y_ticks_major=1,
                    y_grid_label=True,
                    x_grid_label=True,
                    padding=5,
                    xlog=False,
                    ylog=False,
                    x_grid=True,
                    y_grid=True,
                    xmin=0,
                    xmax=10,
                    ymin=0,
                    ymax=11,
                    **graph_theme)

【问题讨论】:

    标签: graph kivy


    【解决方案1】:

    没用过这种花,试试graph.xmin = <something>。如果它不起作用,则代码可能具有该变量的其他名称,因为Graph(...) 中的xmin 只是关键字参数。尝试查看它的__init__(),并在看到有价值的内容后,尝试通过graph.<variable> 访问它。如果它不是局部变量,那么它应该可以工作。

    但是,这只是说明如何手动更改。如果除了graph = Graph(...) 之外,您还有更多代码,请粘贴它,可能存在问题。否则,您可以尝试在花园的 Graph 存储库中报告故障。

    【讨论】:

      【解决方案2】:

      根据“garden.graph”库中的代码,您可以调用图形的实例来设置xmax、xmin、ymax和ymin的属性。

      例如,我将 ymax 的属性设置为我的数据集的最大值:

      Class Test(Widget):
          data = #list of datapoints
          graph_test = ObjectProperty(None)
          def setgraph:
              plot = MeshLinePlot(color=[1, 0, 0, 1])
              self.graph_test.ymax=max(data[1])
               plot.points = [(data[0][i], data[1][i]) for i in range(0,500)]
               self.graph_test.add_plot(plot)
      

      我还有一个 .kv 文件,其中包含以下内容

      #:kivy 1.0.9
      <Test>:
          graph_test : graph_test
          Graph:
              id: graph_test
              plot: MeshLinePlot
              xlabel:'X'
              ylabel:'Y'
              x_ticks_minor:1000000000000
              x_tics_major:5000000000000
              y_ticks_major:1000
              y_grid_label:True
              x_grid_label:True
              padding:5
              x_grid:True
              y_grid:True
              xmin:123413241234
              xmax:123412341234
              ymin:2000
              ymax:15000
              pos: 0, 0
              size: root.width , root.height
      

      【讨论】:

        【解决方案3】:

        老问题,但我正在使用一些 Kivy 图表来执行此操作,而不是重置 XMin 和 XMax(这意味着只要图表“实时”运行,这些数字就会不断增加),我们移动数据点并保留 X 范围。

        我们构建了这个简单的 LiveGraph 类来包装它,它运行良好且性能相对较好。

        class LiveGraph(Graph):
           def __init__(self, num_data_points=50, **kwargs):
              super(LiveGraph, self).__init__(**kwargs)
              self._num_data_points = num_data_points
              self.xmin = 0
              self.xmax = num_data_points
              build_chart()
        
           def build_chart(self):
              plot = MeshLinePlot()
        
              # Initialize with empty Y values to start with
              plot.points = [(x,0) for x in range(self._num_data_points)
        
           # I tested a number of ways to do this - this ended up being
           # the fastest. 
           def add_point(self, point_value):
              new_points = self.plots[0].points
              new_points = [(i, new_points[i+1][1]) for i in range(self._num_data_points - 1)]
              new_points.append([len(new_points) - 1, new_value])
              self.plots[0].points = new_points
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-27
          • 2019-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-30
          • 2020-01-28
          相关资源
          最近更新 更多