如何在保持与使用默认标签时相同的缩放/平移功能的同时,将自定义x轴标签应用于我的AChartEngine BarGraph?问题是我有100多个数据点,所以我只想在屏幕上一次绘制5或6个标签。
默认功能最初绘制3个标签(在我的情况下为0,50和100),放大时会绘制4/5个标签。向左或向右平移时,标签会与相应的条形移动:
我尝试了两种方法,但它们都没有给我与默认标签相同的缩放和平移功能。
1)首次创建图表时生成5个均匀间隔的标签。
这个问题是它只会创建5个标签,因此当您放大太远时,不会显示任何标签。
//For 100 data points, add five labels every 20 datapoints
mRenderer.addXTextLabel(0, "label 1");
mRenderer.addXTextLabel(20, "label 2");
mRenderer.addXTextLabel(40, "label 3");
mRenderer.addXTextLabel(60, "label 4");
mRenderer.addXTextLabel(80, "label 5");
mRenderer.setXLabels(0);
2)在GraphicalView上实现ZoomListener和PanListener接口。
此解决方案几乎可以使用,但标签始终位于固定位置,并且只是在向左或向右平移图形时使用新值“更新”。我需要它们随着相应的条移动。
graphicalView.addZoomListener( new ZoomListener() {
@Override
public void zoomApplied(ZoomEvent e) {
double start = mRenderer.getXAxisMin();
double stop = (double)mRenderer.getXAxisMax();
double step = (double)(stop - start) / 5;
mRenderer.clearXTextLabels();
for (double i = start; i <= stop; i += step)
mRenderer.addXTextLabel(i+1, "label"+(int)i);
mRenderer.setXLabels(0);
}
@Override
public void zoomReset() { }
}, true, true);
graphicalView.addPanListener(new PanListener() {
@Override
public void panApplied() {
double start = mRenderer.getXAxisMin();
double stop = (double)mRenderer.getXAxisMax();
double step = (double)(stop - start) / 5;
mRenderer.clearXTextLabels();
for (double i = start; i <= stop; i += step)
mRenderer.addXTextLabel(i+1, "label"+(int)i);
mRenderer.setXLabels(0);
}
});
我想要实现的自定义标签是以分钟为单位的时间。可以使用 带有条形图的TimeSeries类?
答案 0 :(得分:1)
您的解决方案非常好,因此我只能建议改进您所需的标签行为:在MathHelper.getLabels(start, stop, approxNumLabels)
和{{1}之间使用for
代替start
循环}}
所以你的stop
循环会变成这样:
for