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