4

我实际上使用 AndroidPlot 库在我的 android 项目中使用一个简单的图表,但我不知道如何更改域区域的值。

更具体地说,这一行:

mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("#"));

在网站上说我可以使用其他格式和它的真实,但如果我使用例如:

SimpleDateFormat("dd-MM-yyyy")

在图表中,所有域值中都出现“31-12-1969”

有人知道我怎样才能更改那个日期吗?或使用其他格式(如字符串)?

4

1 回答 1

4

迟到的答案,但也许对其他人有用。

我也很难解决这个问题,特别是因为我是 Java 初学者。我实现了一个自定义格式化程序。似乎有点丑陋的解决方案,但它的工作原理。思路如下:

  • 仅将 Y 轴作为值,并将 X 轴作为索引到数组中(如 Androidplot 教程所建议的,使用 using ArrayFormat.Y_VALS_ONLY,// Y_VALS_ONLY 表示使用元素索引作为 x 值)
  • 每次数据更改时,您都需要将新的格式化程序与 X 轴的新数据一起传递给 Plot

以下是一些代码片段。

首先是将数组索引转换为自定义标签字符串的类:

public class MyIndexFormat extends Format {

    public String[] Labels = null;

        @Override
        public StringBuffer format(Object obj, 
                StringBuffer toAppendTo, 
                FieldPosition pos) {

            // try turning value to index because it comes from indexes
            // but if is too far from index, ignore it - it is a tick between indexes
            float fl = ((Number)obj).floatValue();
            int index = Math.round(fl);
            if(Labels == null || Labels.length <= index ||
                    Math.abs(fl - index) > 0.1)
                return new StringBuffer("");    

            return new StringBuffer(Labels[index]); 
        }

这是我将它附加到情节的方式:

MyIndexFormat mif = new MyIndexFormat ();
mif.Labels = // TODO: fill the array with your custom labels

// attach index->string formatter to the plot instance
pricesPlot.getGraphWidget().setDomainValueFormat(mif); 

这个技巧也适用于动态更新。

注意:Androidplot 似乎有绘制水平线的问题,所以如果你的数据有相同的 Y 值,你可能会得到奇怪的结果,我已经在这个问题上寻求帮助。

于 2012-02-03T09:31:47.057 回答