我想在kivy中创建一个实时图表。我怎样才能实现这一目标?我是kivy的新手。请帮帮我。
我想在kivy中创建一个实时图表。我怎样才能实现这一目标?我是kivy的新手。请帮帮我。
我也想在Kivy做一个实时图表。
我开始使用Youscope。您可以在以下YouTube视频中看到youscope的演示 https://www.youtube.com/watch?v=-1E0DpQ_cFo
源代码在这里: https://code.google.com/p/felipesanches/source/browse/trunk/youscope-emu/youscope-emu.py
它是用Pygame编写的,并使用波形音频文件作为输入源,但您也可以使用其他来源(例如串行数据或计算曲线)。
Youscope的问题在于我无法从中构建适用于Android的APK。我已经尝试为android安装python子集,但我总是在构建时得到错误消息。 (没弄清楚出了什么问题。)
所以我决定将Youscope代码移植到Kivy,因为使用Buildozer我可以制作Android APK。 (尚未经过测试以构建图形应用程序,但这应该可行。)
绘图似乎与原始代码一样快,但目前我仍然在重绘曲线。但我认为绘图应该更快,也许计算得分时间太长。 我想我应该检查一个WAV文件作为输入,如果它更快。
Kivy的源代码与pygame代码非常相似,但在Kivy中没有带有while循环的游戏循环。 在Kivy中,你使用Clock.schedule_intervall(回调,time_in_sec)进行回调(参见 http://kivy.org/docs/api-kivy.clock.html)用于更新/绘制屏幕。
对于绘图,您需要使用添加到画布的帧缓冲区。看到 http://kivy.org/docs/api-kivy.graphics.fbo.html
曲线从左到右逐点绘制。 通过重绘我的意思是我在帧缓冲区绘制第一条曲线(我使用计算的正弦波),在我到达屏幕的右边缘后,我再次使用新曲线从左侧绘制。
现在仍然需要清除之前绘制的曲线。您可以在此处重绘整个屏幕,但这可能比逐点删除旧行更慢。
这里的困难是恢复旧曲线下面的背景颜色。看起来我得到了错误像素的颜色,但我不确定是什么问题。
使用Framebuffer.get_pixel_color(wx,wy)(需要Kivy 1.8.0),您可以获得rgba中像素的颜色,但这样做不正常。也许这是一个更新问题,但我不确定。
使用黑色像素清除(没有get_pixel_color)正在工作,但这会删除背景网格。
定义你的情节
例如
plot = MeshLinePlot(color=next(colors))
定义图
例如
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,
ymin=0,
ymax=11,
**graph_theme)
更新图表并更新x轴:
例如
def update_xaxis(self,*args):
global graph
global cnt
graph.xmin = cnt - 50
graph.xmax = cnt
def update_points(self, *args):
global i
global MYLIST
global cnt
#self.plot.points = [(i,i)]
self.plot.points = [z for z in MYLIST]
叫一个时钟
例如
Clock.schedule_interval(self.update_points, 1/60.)
Clock.schedule_interval(self.update_xaxis, 1/60.)
并添加小部件:
b.add_widget(graph)
我希望我没有忘记任何事情。它为您提供了kivy Garden的运行图。