Я пытаюсь создать свечную диаграмму, используя Charts Framework, используя Codable, так как JSON, передавая myclass, может отображаться как:
struct ChartDataPair: Codable {
var DateTime: String = ""
var Open: Double = 0.0
var High: Double = 0.0
var Low: Double = 0.0
var Close: Double = 0.0
}
, который создает массив chartDataPairs, как показано:
struct ChartData: Codable {
var chartDataPairs: [ChartDataPair]
}
Значение, которое я получаю, будет показано ниже в качестве примера:
{"chartDataPairs":
[{
"DateTime": "2018/10/1 10:00:01",
"Open": 50.05,
"High": 50.05,
"Low": 49.00,
"Close":49.00
},
{
"DateTime": "2018/10/1 10:05:02",
"Open": 51.05,
"High": 54.06,
"Low": 40.00,
"Close":45.06
},
{
"DateTime": "2018/10/1 10:10:02",
"Open": 50.05,
"High": 64.06,
"Low": 40.00,
"Close":58.06
}]
}
Данные являются просто примером, поэтому просто записали 3 значения. Теперь мне нужно выбрать только время и преобразовать строку DateTime в Double, чтобы отобразить ее на оси X графиков. Для с я использую:
var dataEntries: [ChartDataEntry] = []
guard let financialData = dataChart.self else {
return
}
for chartData in financialData{
let open = chartData.Open
let close = chartData.Close
let high = chartData.High
let low = chartData.Low
let datetime = chartData.DateTime
let formatter = DateFormatter()
formatter.dateFormat = "YYYY/MM/dd HH:mm:ss"
let yourDate = formatter.date(from: datetime)
formatter.dateFormat = "HH:mm"
let myStringafd = formatter.string(from: yourDate!)
let time = myStringafd
let components = time.characters.split { $0 == ":" } .map { (x) -> Int in return Int(String(x))! }
let hours = components[0]
let minutes = components[1]
let double1 = Double("\(hours).\(minutes)")
let dataEntry = CandleChartDataEntry(x: double1! , shadowH: high, shadowL: low, open: open, close: close)
dataEntries.append(dataEntry)
}
let chartDataSet = CandleChartDataSet(values: dataEntries, label: "")
chartDataSet.axisDependency = .left
chartDataSet.drawIconsEnabled = false
chartDataSet.shadowColor = .darkGray
chartDataSet.shadowWidth = 0.7
chartDataSet.decreasingColor = .red
chartDataSet.decreasingFilled = true // fill up the decreasing field color
chartDataSet.increasingColor = UIColor(red: 122/255, green: 242/255, blue: 84/255, alpha: 1)
chartDataSet.increasingFilled = true // fill up the increasing field color
chartDataSet.neutralColor = .blue
chartDataSet.barSpace = 1.0
chartDataSet.drawValuesEnabled = false
let chartData = CandleChartData(dataSet: chartDataSet)
candlestickView.data = chartData
Я знаю, что преобразование времени в удвоение не является правильным, так как это необходимо, Здесь мне нужна помощь по преобразованию даты и времени в удвоенное значение.
Второй вопрос - ширина бара свечи, я не могу уменьшить ширину свечи.
И я хочу заполнить ось X значением времени, например, ЧЧ: ММ, с определенными интервалами, такими как 15 минут, 50 минут, 4 часа и т. Д.
За что я следил за несколькими вопросами и предложениями здесь, в приведенной ссылке ниже:
Библиотека iOS-диаграмм: надписи по оси x без данных основы не отображаются
По этому вопросу: candlestickView.xAxisRenderer = XAxisWeekRenderer()
не работает. Он вызывает viewporthandler, ось x и преобразование.
Хотя я могу получить пользовательские метки из пользовательского IAxisValueFormatter. Интервал между двумя значениями на оси х не такой, каким я хотел бы, чтобы он был через 15 минут, 50 минут, 4 часа и т. Д.
ios Charts 3.0 - Совместите метки x (даты) с графиками
По вышеуказанной ссылке я не могу получить minTimeInterval
and referenceTimeInterval
По сути, я хочу построить график часов и минут для строки, которую я извлекаю из JSON по оси x, и создать собственный интервал между значениями оси x при создании настраиваемой оси x. этикетки.
Мой график в настоящее время отображается как:
Диаграмма подсвечника