Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何使图表始终显示网格线?_Swift_Ios Charts - Fatal编程技术网

Swift 如何使图表始终显示网格线?

Swift 如何使图表始终显示网格线?,swift,ios-charts,Swift,Ios Charts,我正在使用图表3.1.1,但我不知道如何使图表始终显示x轴网格线: 在本例中,我希望图表显示4月25日之后的xAxis网格线和标签,即4月26日、4月27日、4月28日、4月29日、4月30日和5月1日 我创建这个类是为了生成足够的日期,以便在以后的每一天都没有我想要显示的数据点时填补空白: class AxisValuesGenerator: NSObject { var days: [String]? = [] func generatexAxisDates(liftEv

我正在使用图表3.1.1,但我不知道如何使图表始终显示x轴网格线:

在本例中,我希望图表显示4月25日之后的xAxis网格线和标签,即4月26日、4月27日、4月28日、4月29日、4月30日和5月1日

我创建这个类是为了生成足够的日期,以便在以后的每一天都没有我想要显示的数据点时填补空白:

class AxisValuesGenerator: NSObject {
    var days: [String]? = []

    func generatexAxisDates(liftEvents: [LiftEvent]) -> [String]? {
        var dates: [Date] = []
        let intervalBetweenDates: TimeInterval = 3600 * 24 // 3600 = 1 hour
        let firstDate = (liftEvents.first?.date)! // - intervalBetweenDates
        var lastDate = liftEvents.last?.date

        if Double(liftEvents.count) < 7 {
            let daysToAdd = intervalBetweenDates * Double(7 - liftEvents.count)
            lastDate = lastDate?.addingTimeInterval(daysToAdd)
            for _ in 0...6 {
                dates = self.intervalDates(from: firstDate, to: lastDate!, with: intervalBetweenDates)
            }
        } else {
            dates = self.intervalDates(from: firstDate, to: lastDate!, with: intervalBetweenDates)
        }

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MMM d"

        days = dates.map {dateFormatter.string(from: $0)}

        return days

    }

func intervalDates(from startDate: Date, to endDate:Date, with interval:TimeInterval) -> [Date] {
    guard interval > 0 else { return [] }

    var dates:[Date] = [startDate]
    var currentDate = startDate

    while currentDate <= endDate {
        currentDate = currentDate.addingTimeInterval(interval)
        dates.append(currentDate)
    }

    return dates
}
如果我有6个或更多的值要绘制,图表就会正确呈现。但您可以看到,仅使用2个值,我就可以强制线条,但xAxis标签是错误的:


数据设置和图表视图设置是两件不同的事情。图表为您提供了许多控件,可以自定义数据的显示方式

在图表视图中尝试以下操作:

chartView.xAxis.forceLabelsEnabled = true
chartView.xAxis.labelCount = 7
为了显示没有y值的x标签,我使用了“空”y值(在我的例子中是0,但在你的例子中可能是其他的)。为确保可以看到正确的Y范围,请使用左/右轴参数

chartView.leftAxis.axisMinimum = 5
以下是它对我来说的样子:

没错,它们是不同的东西,但据我所知,它们之间通过x轴和y轴存在依赖关系。我的数据包含用于创建xAxis标签的日期。这种依赖性是我的问题所在。如果我没有足够的数据点来填充视图端口(假设是7个值),我如何告诉图表仍然绘制6个没有数据的标签和网格线,因此没有日期?添加假数据如何?您可以设置minY/maxY值,这样,如果数据点超出该范围,它将不可见,但将强制显示xValue。这不是最优雅的解决方案,但我会尝试类似的方法。我意识到这正是我在一张图表中所做的。我已经更新了回复,希望现在能更有用谢谢,Halyna。这看起来和我想要达到的目标很相似。我将尝试你的建议,并让你知道会发生什么。@halynarabashko-我正在根据数据设置minY/maxY值,因为我希望所有值都被绘制出来,并且启用缩放和收缩/缩放功能,我认为伪造数据是行不通的。如果我误解了你的建议,请告诉我。谢谢
chartView.xAxis.forceLabelsEnabled = true
chartView.xAxis.labelCount = 7
chartView.leftAxis.axisMinimum = 5