Python 向Kivy MeshLinePlot添加多个绘图
我想在图表中添加多个绘图。以下示例仅添加在循环的最后一行中计算的数据。我怎样才能达到我的目标 注意:当使用不使用.kv文件的kivy示例时,我可以很好地做到这一点,并且在循环中运行多个“graph.add_plot”命令后添加了graph小部件。我还发现,当使用.kv文件时,小部件会自动更新,而当从python代码运行时,它们不会自动更新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
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
的创建移动到循环内部,以便每次都创建一个新的绘图并将其添加到图形中