2017-08-06 2 views
0
var dataEntries: [ChartDataEntry] = [] 
    let financialData = data 

    for chartData in financialData{ 
      let dataEntry = CandleChartDataEntry(x: chartData.date, shadowH: chartData.High, shadowL: chartData.Low, open: chartData.Open, close: chartData.Close) 
      dataEntries.append(dataEntry) 
    } 

    let chartDataSet = CandleChartDataSet(values: dataEntries, label: "") 
    chartDataSet.axisDependency = .left 
    chartDataSet.drawValuesEnabled = false 
    chartDataSet.increasingColor = UIColor.green 
    chartDataSet.increasingFilled = false 
    chartDataSet.decreasingColor = UIColor.red 
    chartDataSet.decreasingFilled = true 
    chartDataSet.barSpace = 0.25 
    chartDataSet.shadowColor = UIColor.darkGray 
    chartDataSet.neutralColor = UIColor.blue 

    let chartData = CandleChartData(dataSet: chartDataSet) 
    chartView.data = chartData 

    let xaxis = chartView.xAxis 
    xaxis.valueFormatter = axisFormatDelegate 

以下は、サーバーから受信されているサンプルデータセットと表示されているチャートを示す画像です。 https://api.cryptowat.ch/markets/gdax/btcusd/ohlc?periods=60danielgindi/Chartsフレームワークを使用してiosでローソク足チャートが正しく表示されない

[CloseTime、てOpenPrice、HighPrice、LowPrice、ClosePrice、音量]

私は現在、それがどのような方法でキャンドルスティックチャートに似ていないデータの表示を固定する際の助けを必要としています。誰かが私がここで間違っていることで私を助けてくれますか?

CandleStick chart data being displayed in the app

+0

あなたはどのフレームワークを使用していますか?あなたが助けを求めているなら、これは重要な情報です。あなたはそれをタイトルに入れて、そして/またはあなたの質問にキーワードをつけるべきです。 –

+0

私はこのチャートライブラリを使用しています - https://github.com/danielgindi/Charts – triksiadek

答えて

0

だから念のために誰もが同じ問題を抱えている、私もキャンドルの問題を持っていたし、私はこの記事に基づいて解決策を見つけた: https://github.com/danielgindi/Charts/issues/2742

  • は用のクラスを作成します。 initでエントリをサポートするchartView.xAxis.valueFormatter
  • あなたの結果のエントリを持っていたら、私はあなたの文字列を提示したいように動作IAxisValueFormatterから継承するクラス内のstringForValue法でCandleChartDataEntry
  • にxの列挙された値を使用し、私の場合には、日付でした。

最初の2点:

//Check nil results 
if result != nil { 

//Save to Holder for future use 
self.historyData = result 

// Set the formatter class for the chartView 
self.chartView.xAxis.valueFormatter  = dateFormatter(elementsForFormatter: self.historyData!) 

//Create a new chart data entry 
var chartEntries = [ChartDataEntry]() 

//Loop results 
result?.enumerated().forEach({ (i, element) in 

    // I'm force unwrapping, but please take care of this don't do me... 
    let newDataEntryValue = CandleChartDataEntry(x:Double(i), 
               shadowH: element["high"] as! Double, 
               shadowL: element["low"] as! Double, 
               open: element["open"] as! Double, 
               close: element["close"] as! Double) 

    chartEntries.append(newDataEntryValue) 
}) 


} 
// Do rest of conf. for your chart.... 

最終ポイント(クラスの実装):

class dateFormatter: IAxisValueFormatter { 

var elements:Array<Dictionary<String,Any>> 

init(elementsForFormatter:Array<Dictionary<String,Any>>) { 
    self.elements = elementsForFormatter 
} 
func stringForValue(_ value: Double, axis: AxisBase?) -> String { 

    let formatter = DateFormatter() 
    formatter.dateStyle = .short 

    //Get the date based on the value which is the index 
    if let time = self.elements[Int(value)]["time"] as? Double { 
     print(time) 
     let dateString = formatter.string(from: Date(timeIntervalSince1970: TimeInterval(time))) 

     return dateString 

    } else { 
     return "" 
    } 


} 
} 

これは誰かに役立ちます願っています!

関連する問題