0
是否可以創建兩個序列(系列具有相同的域/ x值,但範圍/ y值完全不同)的XY圖?我的意思是,第一個系列在左側範圍軸上顯示自己的比例尺,第二個系列在右側範圍軸上顯示自己的比例尺。雙軸標籤
是否可以創建兩個序列(系列具有相同的域/ x值,但範圍/ y值完全不同)的XY圖?我的意思是,第一個系列在左側範圍軸上顯示自己的比例尺,第二個系列在右側範圍軸上顯示自己的比例尺。雙軸標籤
編輯: 從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之間的範圍,然後將標準化值在自定義格式化程序中擴展回原始值。
更新了我的答案,包括DualScaleActivity示例和NormedXYSeries便利類。 – Nick