使用danielgindi/Charts框架在ios中无法正确显示烛台图表

使用danielgindi/Charts框架在ios中无法正确显示烛台图表,ios,swift,swift3,candlestick-chart,Ios,Swift,Swift3,Candlestick Chart,下面是从服务器接收的示例数据集和显示图表的图像。 [CloseTime、OpenPrice、HighPrice、LowPrice、ClosePrice、Volume] 我需要帮助修复数据显示,因为目前它在任何方面都不像蜡烛棒图表。有人能帮我一下我做错了什么吗 为了防止有人遇到同样的问题,我也遇到了蜡烛的问题,我根据这篇文章找到了一个解决方案: 为chartView.xAxis.valueFormatter创建一个类,该类支持init中的条目 一旦有了结果条目,我就在CandleChartD

下面是从服务器接收的示例数据集和显示图表的图像。

[CloseTime、OpenPrice、HighPrice、LowPrice、ClosePrice、Volume]

我需要帮助修复数据显示,因为目前它在任何方面都不像蜡烛棒图表。有人能帮我一下我做错了什么吗


为了防止有人遇到同样的问题,我也遇到了蜡烛的问题,我根据这篇文章找到了一个解决方案:

  • 为chartView.xAxis.valueFormatter创建一个类,该类支持init中的条目
  • 一旦有了结果条目,我就在CandleChartDataEntry上使用了x的枚举值
  • 在类中的stringForValue方法中,该方法继承自IAxisValueFormatter,其工作方式与您希望显示字符串的方式相同,在我的示例中是dates
前两点:

    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
最后一点(类实现):

类日期格式化程序:IAxisValueFormatter{
变量元素:数组
init(elementsForFormatter:Array){
self.elements=elementsForFormatter
}
func stringForValue(uvalue:Double,axis:AxisBase?)->String{
let formatter=DateFormatter()
formatter.dateStyle=.short
//根据索引值获取日期
如果let time=self.elements[Int(value)][“time”]as?Double{
打印(时间)
让dateString=formatter.string(起始日期:日期(timeIntervalSince1970:TimeInterval(时间)))
返回日期字符串
}否则{
返回“”
}
}
}

希望这对别人有帮助

您使用的是什么框架?如果你需要帮助,这是一个重要的信息。你应该把它放在标题中,或者在你的问题中加上关键词。我正在使用这个图表库-
//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 ""
    }


}
}