双轴标签

时间:2016-11-23 20:51:10

标签: java android androidplot

是否可以创建具有两个系列的XYPlot(系列具有相同的域/ x值,但范围/ y值完全不同)?我的意思是,第一个系列在左侧轴上显示它自己的比例,第二个系列在右侧轴上显示它自己的比例。

1 个答案:

答案 0 :(得分:0)

修改 从1.3.1开始,添加了NormedXYSeries,使双规模实现更简单一些。 DualScaleActivity in the DemoApp提供了一个完整的示例。

从1.x及更高版本开始,这可以通过Androidplot实现 - f(x) example提供了如何完成它的基本示例。

两个重要部分是创建自定义LineLabelRenderer以生成刻度标签。此提供的示例用于自定义着色和刻度间距:

    /**
     * Draws every other tick label and renders text in gray instead of white.
     */
    class MySecondaryLabelRenderer extends MyLineLabelRenderer {


        @Override
        public void drawLabel(Canvas canvas, XYGraphWidget.LineLabelStyle style,
                Number val, float x, float y, boolean isOrigin) {
            if(val.doubleValue() % 2 == 0) {
                final Paint paint = style.getPaint();
                if(!isOrigin) {
                    paint.setColor(Color.GRAY);
                }
                super.drawLabel(canvas, style, val, x, y, isOrigin);
            }
        }
    }

然后你需要将自定义LineLabelRenderer附加到绘图的一个边缘:

plot.getGraph().setLineLabelRenderer(XYGraphWidget.Edge.RIGHT, new MySecondaryLabelRenderer());

如果您不需要任何花哨的着色,您也可以设置自定义格式化程序:

      plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.RIGHT).setFormat(new Format() {
            @Override
            public StringBuffer format(Object seriesVal, StringBuffer stringBuffer,
                    FieldPosition fieldPosition) {

                // do whatever you need to do here.
                stringBuffer.append(((Number) seriesVal).doubleValue() + "bla");
                return stringBuffer;
            }

            @Override
            public Object parseObject(String s, ParsePosition parsePosition) {
                // nothing to do here
                return null;
            }
        });

这将为您提供准确标记的双刻度,但根据两个刻度的不同,您最终可能会将其中一个系列缩小,或者至少不是理想尺寸。

解决此新问题的最佳方法是将所有系列数据规范化为0到1之间的范围,然后将规范化值扩展回自定义格式化程序中的原始值。