highcharts iOS中的Highchart动态数据实现

3b6akqbq  于 12个月前  发布在  Highcharts
关注(0)|答案(1)|浏览(265)

我目前正在iOS Swift中使用Highcharts 10.3.3,并使用initWithJSFunction:(NSString *) jsFunction方法成功实现了下钻功能。然而,我面临着性能方面的挑战,因为在初始时间发送所有事件系列需要相当长的时间,特别是对于具有多个嵌套下钻的图表。下面是Swift中使用的Highcharts JS函数的代码:

let drilldownFunction = HIFunction(jsFunction: "function (e) { if (!e.seriesOptions) { const chart = this; const extraData = \(extraDataJSONString); const pointExtraData = extraData[e.point.drilldownTo] || {}; chart.yAxis[0].update( { title: { text: pointExtraData.yAxisTitle || null, enabled: pointExtraData.yAxisTitle !== null }, labels: { formatter: pointExtraData.axisProperties.yAxis.dataType === 'STRING' ? '' :  \(axisFomatter(axis: "yAxis")) } }, true ); chart.xAxis[0].update( { title: { text: pointExtraData.xAxisTitle || null, enabled: pointExtraData.yAxisTitle !== null }, type: pointExtraData.axisProperties.xAxis.type, labels: { formatter: pointExtraData.axisProperties.xAxis.dataType === 'STRING' ? '' : \(axisFomatter(axis: "xAxis")) } }, false ); const dataJSON = \(dataJSONString);  const series = dataJSON[e.point.drilldownTo]; series.forEach(function (d) { chart.addSingleSeriesAsDrilldown(e.point, { name: d.name, type: d.type, drilldownTo: e.point.drilldownTo, color: d.color, dataLabels: {formatter: \(dataLabelformatter) },  data: d.data }); }); chart.applyDrilldown(); } }")

字符串
我正在寻找一种解决方案,在iOS Swift上实现类似于JavaScript的功能。在JavaScript中,我们可以接收第一级钻取图表点击的事件,然后动态追加下一组数据。我很好奇iOS上的Swift是否可以实现这种无缝实现。
任何关于在Swift中实现这一目标的见解或指导都将不胜感激。

rvpgvaaj

rvpgvaaj1#

在Swift中,你可以通过处理图表点击事件和动态更新图表数据来实现类似的动态下钻功能。Highcharts提供了一种在Swift中处理图表事件的机制,允许你响应用户交互,例如下钻。
这里有一个简化的例子,说明如何使用Highcharts在Swift中实现动态下钻功能:

import UIKit
import Highcharts

class ViewController: UIViewController, HIChartViewDelegate {

    @IBOutlet weak var chartView: HIChartView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set up initial chart configuration
        let options = HIOptions()

        // Set up your initial series data
        let initialSeries = HISeries(name: "First Level", data: [
            ["Category 1", 10],
            ["Category 2", 20],
            // Add more initial data as needed
        ])
        options.series = [initialSeries]

        // Set up the chart view
        chartView.options = options
        chartView.delegate = self
    }

    // Implement the chart view delegate method to handle drilldown events
    func chartView(_ chartView: HIChartView, drilldownEvent event: HIDrilldownEvent) {
        // Check the drilldown level or category clicked
        if event.category == "Category 1" {
            // Load the next set of data for the drilldown
            let nextLevelData = [
                ["Subcategory 1", 5],
                ["Subcategory 2", 15],
                // Add more data for the next level as needed
            ]

            // Create a new series for the drilldown level
            let nextLevelSeries = HISeries(name: "Subcategory", data: nextLevelData)

            // Update the options with the new series
            var options = chartView.options
            options.series = [nextLevelSeries]
            chartView.options = options

            // Redraw the chart to reflect the changes
            chartView.redraw()
        }
    }
}

字符串
在本例中,chartView(_:drilldownEvent:)方法用于处理钻取事件。它会检查单击的类别,并在此基础上加载下一个钻取数据集。然后,它会为下一个钻取级别创建一个新系列,并相应地更新图表选项。
这是一个基本示例,您可能需要根据特定的图表结构和数据处理要求对其进行调整。请确保根据需要处理每个级别的钻取事件,并动态加载相应的数据。

相关问题