2016-11-23 109 views
0

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

回答

0

编辑: 从1.3.1版本开始,添加了NormedXYSeries,使得双比例实现更简单一些。 DualScaleActivity in the DemoApp提供了一个完整的例子。

从1.x及更高版本开始,Androidplot可以实现这一点--提供了一个基本的例子。

这两个重要的部分是创建一个自定义的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之间的范围,然后将标准化值在自定义格式化程序中扩展回原始值。

+0

更新了我的答案,包括DualScaleActivity示例和NormedXYSeries便利类。 – Nick