Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向Kivy MeshLinePlot添加多个绘图_Python_Kivy - Fatal编程技术网

Python 向Kivy MeshLinePlot添加多个绘图

Python 向Kivy MeshLinePlot添加多个绘图,python,kivy,Python,Kivy,我想在图表中添加多个绘图。以下示例仅添加在循环的最后一行中计算的数据。我怎样才能达到我的目标 注意:当使用不使用.kv文件的kivy示例时,我可以很好地做到这一点,并且在循环中运行多个“graph.add_plot”命令后添加了graph小部件。我还发现,当使用.kv文件时,小部件会自动更新,而当从python代码运行时,它们不会自动更新 from kivy.garden.graph import MeshLinePlot from kivy.app import App from kivy.u

我想在图表中添加多个绘图。以下示例仅添加在循环的最后一行中计算的数据。我怎样才能达到我的目标

注意:当使用不使用.kv文件的kivy示例时,我可以很好地做到这一点,并且在循环中运行多个“graph.add_plot”命令后添加了graph小部件。我还发现,当使用.kv文件时,小部件会自动更新,而当从python代码运行时,它们不会自动更新

from kivy.garden.graph import MeshLinePlot
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from math import sin

class RootWidget(BoxLayout):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__()
        self.plot = MeshLinePlot(color=[.5, .5, 1, 1])

    def start(self):
        #self.ids.graph.add_plot(self.plot) #same result if this line is added here
        for i in range(24):
            data_to_graph = [(x, sin(x)+ i) for x in range(0, 101)] #apply a DC offset to each trace to display multiple traces
            print(data_to_graph)
            self.plot.points =  data_to_graph
            self.ids.graph.add_plot(self.plot)

class GraphDemo(App):
    def build(self):
        return Builder.load_file("mainWindow_play.kv")

if __name__ == "__main__":
    GraphDemo().run()
主窗口\u play.kv

#:import MeshLinePlot kivy.garden.graph.MeshLinePlot
RootWidget:
    BoxLayout:
        orientation: "vertical"
        BoxLayout:
            size_hint: [1, .8]
            Graph:
                id: graph
                xlabel: "X"
                ylabel: "Y"
                y_ticks_major: 4
                x_ticks_major: 4
                y_grid_label: True
                x_grid_label: True
                padding: 5
                x_grid: True
                y_grid: True
                ymin: -1
                ymax: 25
                xmin: 0
                xmax: 25

        BoxLayout:
            size_hint: [1, .2]
            orientation: "horizontal"
            Button:
                text: "START"
                bold: True
                on_press: root.start()

您只创建一个打印,并且只更改该打印的打印点。所以最后一个情节是最后一个。一个绘图只能添加到一个图形中一次,因此除了第一个
add\u plot()
之外的所有绘图都将被忽略。当绘图点更改时,一个绘图将更新以显示最后的点。如果要查看所有绘图,则需要为每组数据点创建单独的绘图。也许是这样的:

class RootWidget(BoxLayout):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__()

    def start(self):
        #self.ids.graph.add_plot(self.plot) #same result if this line is added here
        for i in range(24):
            data_to_graph = [(x, sin(x)+ i) for x in range(0, 101)] #apply a DC offset to each trace to display multiple traces
            print(data_to_graph)
            self.plot = MeshLinePlot(color=[.5, .5, 1, 1])
            self.plot.points =  data_to_graph
            self.ids.graph.add_plot(self.plot)
MeshLinePlot
的创建移动到循环内部,以便每次都创建一个新的绘图并将其添加到图形中