是否可以创建具有两个系列的XYPlot(系列具有相同的域/ x值,但范围/ y值完全不同)?我的意思是,第一个系列在左侧轴上显示它自己的比例,第二个系列在右侧轴上显示它自己的比例。
答案 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之间的范围,然后将规范化值扩展回自定义格式化程序中的原始值。