2016-11-23 125 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