2015-01-06 73 views
0

我正在嘗試在android中向我的蠟燭圖圖表添加軸中斷。 添加或不添加軸中斷由底層數據決定。在TeeChart中使用AxisBreaks和蠟燭Android

在第一張圖片上,您可以看到沒有軸中斷的正常圖表狀態。請在左上角提及註釋: The chart without axis breaks

在第二張圖片上,您可以看到帶有軸斷點的圖表。正如你從圖片中可以看到的,有一些問題:

  1. 蠟燭的一半藏在軸斷線的後面。我怎樣才能防止這種重疊?

  2. 注意註釋的位置:它顯示在錯誤的位置和奇怪的角度!

  3. 另外請提及第三軸斷點,它也顯示不正確。

enter image description here

可能任何人都可以提出如何解決問題的描述?

+0

這是使用的TeeChart Java的Android或.NET的TeeChart爲Xamarin.Android ? – Yeray

+0

@Yeray TeeChart Android版 – Dennis

+0

Java還是.NET?這仍然不清楚 – Yeray

回答

1
  1. 蠟燭的一半隱藏在軸斷線的後面。 如何防止這種重疊?

您可以添加一些保證金軸斷裂在startValue和endValue值。

  1. 注意註釋的位置:它顯示在不正確的位置和奇怪的角度!

我不能用下面的示例代碼重現這一點。
請問您可以改進您的問題,添加一個簡單的示例項目,我們可以按原樣重現此問題?

  • 還請提第三軸斷裂,它示出不正確,也。
  • 我可以看到正在制定一個類似的圖像,斜,並在圖表中間的額外軸斷裂。但是,我只能用評估版本重現此問題,而不能使用註冊版本(ID1078)。
    我認爲它與我們在圖表中間繪製的「評估版本」斜向水印有關。

    這裏是我使用的代碼:

    tChart1.getAspect().setView3D(false); 
        tChart1.getLegend().setVisible(false); 
    
        Candle candle1 = new Candle(tChart1.getChart()); 
    
        candle1.fillSampleValues(80); 
    
        DateTime dt = DateTime.getNow(); 
        for (int i = 0; i < candle1.getCount(); i++) { 
         candle1.getXValues().setValue(i, dt.toDouble()); 
         dt.add(Calendar.MINUTE, 1);    
        } 
    
        //tChart1.getAxes().getBottom().setIncrement(DateTimeStep.FIVEMINUTES); 
        tChart1.getAxes().getBottom().getLabels().setDateTimeFormat("hh:mm"); 
    
        AxisBreaksTool axisBreaksTool1 = new AxisBreaksTool(tChart1.getAxes().getBottom()); 
    
        for (int i=0; i<3; i++) { 
         AxisBreak axisBreak1 = new AxisBreak(axisBreaksTool1); 
         axisBreak1.setStartValue(candle1.getXValues().getValue(10*(i+1))-0.6); 
         axisBreak1.setEndValue(candle1.getXValues().getValue(10*(i+1)+5)+0.6); 
         axisBreak1.setStyle(AxisBreakStyle.LINE); 
         axisBreaksTool1.getBreaks().add(axisBreak1); 
        } 
    
        Annotation annotation1 = new Annotation(tChart1.getChart()); 
        annotation1.setText("My Text"); 
        annotation1.setLeft(10); 
        annotation1.setTop(10); 
    

    似乎與註釋工具和AxisBreaksTool衝突:只要我添加一個軸斷裂,註釋消失(ID1077)。


    編輯:

    如果你希望你的軸打破在startValue和endValue值依賴於CandleWidth,你可以計算軸單位蠟燭寬度的大小,但你需要的圖表上得到這樣做。
    這裏是你如何可以使用ChartPaintListener計算CandleWidth在中軸下方單位,並用它作爲額外餘量爲AxisBreaks:

    tChart1.addChartPaintListener(new ChartPaintAdapter() { 
    
         @Override 
         public void chartPainted(ChartDrawEvent e) { 
          Candle candle1 = (Candle)tChart1.getSeries(0); 
          double onePxWidth = tChart1.getAxes().getBottom().calcPosPoint(1) - tChart1.getAxes().getBottom().calcPosPoint(0); 
          double tmpWidthLeft = onePxWidth*(candle1.getCandleWidth()/2 + 4); 
          double tmpWidthRight = onePxWidth*(candle1.getCandleWidth()/2 + 3); 
    
          AxisBreaksTool axisBreaksTool1 = (AxisBreaksTool)tChart1.getTools().getTool(0); 
          for (int i=0; i<axisBreaksTool1.getBreaks().size(); i++) { 
           AxisBreak axisBreak1 = axisBreaksTool1.getBreaks().get(i); 
           axisBreak1.setStartValue(candle1.getXValues().getValue(10*(i+1))+tmpWidthLeft); 
           axisBreak1.setEndValue(candle1.getXValues().getValue(10*(i+1)+5)-tmpWidthRight); 
          } 
         } 
        }); 
    
    +0

    謝謝你的回覆!我已經訂閱了Steema的bugzilla中的錯誤。 – Dennis

    +0

    你能否解釋我如何猜測數據條款中的保證金值?在我的情況下,根據數據比例,兩條線之間的距離可以從1分鐘到31天。我應該如何將DateTime值轉換爲像素? 你知道,我們用像素來指定蠟燭的寬度,而不是用數據術語。所以我不能猜測要爲我的軸斷點添加哪個邊距來實現,例如3px,在我的情況下是蠟燭的半寬度... – Dennis

    +0

    我已經做了一個實驗,並且看到了2個棒之間的距離double等於條的值之間的毫秒數。 – Dennis

    相關問題