두 개의 계열 (계열은 동일한 도메인/x 값을 갖지만 범위/y 값은 완전히 다릅니다)을 사용하여 XYPlot을 만들 수 있습니까? 내 말은, 첫 번째 시리즈는 왼쪽 범위 축에 자체 축척이 있고 두 번째 축은 오른쪽 축에 자체 축척이 있음을 의미합니다.이중 축 레이블
Q
이중 축 레이블
0
A
답변
0
편집 : 1.3.1부터 NormallyXYSeries가 추가되어 듀얼 스케일 구현이 조금 더 간단 해졌습니다. 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 사이의 범위로 정규화 한 다음 정규화 된 값을 사용자 지정 포맷터의 원래 값으로 다시 확장하는 것입니다.
은 DualScaleActivity 예제 및 NormedXYSeries 편리한 클래스를 포함하도록 내 대답을 업데이트했습니다. – Nick