AChartEngine如何设置Y轴自定义标签区域边距和图表数值为字符串?

4
我创建了一个图表,显示了测试中回答的问题数(X)/时间(Y)。你可以在这里查看第一个问题的详细信息。
但是现在我需要正确显示图表的子弹值,目前显示的是毫秒值,但我需要像Y轴标签一样自定义hh:mm:ss值,并以某种方式自定义Y轴区域以正确显示完整的值。 下面是目前图表的截图。
[编辑]
在Dan的帮助下,我几乎得到了我想要的。只是有点小问题。 请在下面的屏幕截图中检查现在出现图表值的位置。 我从AChartEngine仓库更新到了1.1.0版本。 addNotations在TimeSeries对象上。我复制并粘贴了将数据添加到我的TimeSeries实例的代码。
myQuestionsTimeSeries.add(i, DateTimeHelper.getMillisFromTime(answer.getEstimatedAnswerTime()));
                xyMultipleSeriesRenderer.addYTextLabel(DateTimeHelper.getMillisFromTime(answer.getEstimatedAnswerTime()),
                        String.valueOf(answer.getEstimatedAnswerTime()));
                myQuestionsTimeSeries.addAnnotation(String.valueOf(answer.getEstimatedAnswerTime()), i,
                        DateTimeHelper.getMillisFromTime(answer.getEstimatedAnswerTime()));

这段代码的结果是这个图表:

当前的图表

[编辑]

这基本上就是整个类:

private void initQuestionsTimeChart() {
        xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
        xyMultipleSeriesRenderer = new XYMultipleSeriesRenderer();
        questionsTimeChart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, xyMultipleSeriesRenderer);
        rootView.addView(questionsTimeChart);

        initSeriesData();
    }

    private void initSeriesData() {
        createMyQuestionsSeries();
        addSeriesAndRenderer(myQuestionsTimeSeries, myQuestionsRenderer);

        xyMultipleSeriesRenderer.setYTitle("Questions Time");
        xyMultipleSeriesRenderer.setXTitle("Questions Number");
        xyMultipleSeriesRenderer.setMarginsColor(Color.argb(0, 255, 255, 255));
        xyMultipleSeriesRenderer.setAxesColor(Color.BLACK);
        xyMultipleSeriesRenderer.setLabelsColor(Color.BLACK);
        xyMultipleSeriesRenderer.setXLabelsColor(Color.BLACK);
        xyMultipleSeriesRenderer.setYLabelsColor(0, Color.BLACK);
        xyMultipleSeriesRenderer.setAxisTitleTextSize(16);
        xyMultipleSeriesRenderer.setLabelsTextSize(15);
        xyMultipleSeriesRenderer.setYLabelsAlign(Paint.Align.RIGHT);
        xyMultipleSeriesRenderer.setSelectableBuffer(20);
        xyMultipleSeriesRenderer.setYLabels(0);
        xyMultipleSeriesRenderer.setMargins(new int[]{ 80, 80, 80, 80 });
    }

    private void addSeriesAndRenderer(XYSeries series, XYSeriesRenderer renderer) {
        xyMultipleSeriesDataset.addSeries(series);
        xyMultipleSeriesRenderer.addSeriesRenderer(renderer);
    }

    private void createMyQuestionsSeries() {
        myQuestionsTimeSeries = new TimeSeries("My Questions/Time");
        myQuestionsRenderer = new XYSeriesRenderer();
        myQuestionsRenderer.setColor(Color.BLUE);
        myQuestionsRenderer.setLineWidth(3f);
        myQuestionsRenderer.setPointStyle(PointStyle.CIRCLE);
        myQuestionsRenderer.setFillPoints(true);
        myQuestionsRenderer.setChartValuesSpacing(10f);
    }

    private void fillData() {
        int i = 0;
        for (Answer answer : getAnswers()) {
            i++;
            if (answer.getEstimatedAnswerTime() != null) {
                myQuestionsTimeSeries.add(i, DateTimeHelper.getMillisFromTime(answer.getEstimatedAnswerTime()));
                xyMultipleSeriesRenderer.addYTextLabel(DateTimeHelper.getMillisFromTime(answer.getEstimatedAnswerTime()),
                        String.valueOf(answer.getEstimatedAnswerTime()));
                myQuestionsTimeSeries.addAnnotation(String.valueOf(answer.getEstimatedAnswerTime()), i,
                        DateTimeHelper.getMillisFromTime(answer.getEstimatedAnswerTime()));
            }
        }
    }

提前感谢你!

1个回答

7

首先隐藏图表数值:

renderer.setDisplayChartValues(false);

然后,针对每个图表数值,添加注释:
renderer.addAnnotation("text", x, y);

为了使Y轴标签可见,只需将它们对齐到左侧即可:
renderer.setYLabelsAlign(Align.LEFT);

或者您可以增加边距:

renderer.setMargins(margins);

请确保您正在使用可在此处获取的最新ACE版本。


谢谢Dan,我们快要完成了。请查看我编辑后的问题,最后一个问题是关于图表数值的,它们没有按照预期出现,这其中一定有原因! - George Taskos
不要使用TimeSeries,而是使用XYSeries。 - Dan D.
同样的问题,实际上什么也没有改变! - George Taskos
从你发布的三行代码中很难猜测发生了什么。 - Dan D.
我在此链接中上传了整个片段类http://rapidshare.com/files/3229453778/ResultsChartFragment.java。 - George Taskos
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接