有没有办法在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是'live'。
如何在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)
答案 0 :(得分:0)
从未使用过此花,请尝试#!/bin/bash
shopt -s failglob
sourcedir=/Users/georgi/Loopback_projects/ESPC/common/models
targetdir=/Users/georgi/AndroidStudioProjects/ESPC_Retrofit/app/src/main/assets
cp -v "$sourcedir"/*.json "$targetdir"
。如果它不起作用,则代码可能具有该变量的其他名称,因为cp
中的graph.xmin = <something>
仅是关键字参数。尝试查看其xmin
,看到有什么价值后,尝试通过Graph(...)
访问它。如果它不是局部变量,那么它应该可以工作。
但是,这只说明如何手动更改 。如果除了__init__()
之外还有更多代码,请粘贴它,可能存在问题。否则,您可以尝试在花园的回购中报告故障图。
答案 1 :(得分:0)
根据“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
答案 2 :(得分:0)
一个老问题,但是我正在用一些Kivy Graph来做到这一点,而不是重置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