如果日期丢失,则根据日期在折线图中绘制值,而不是在折线图中绘制 (danielgindi / Charts)

问题描述

我正在做这样的事情,但它是按系列而不是根据日期绘制的 我正在绘制 3 个数据属性

func setglucoseChart(dataEntryX forX:[String],dataEntryY forY: [Double],result: [Double],secondLine: [Double],thirdLine: [Double]) {
        glucoseLineChartView.noDataText = "You need to provide data for the chart."
        var dataEntries:[ChartDataEntry] = []
        for i in 0..<result.count{
            let dataEntry =  ChartDataEntry(x: Double(i),y: Double(result[i]),data: dateArr as AnyObject?)
            print(dataEntry)
            dataEntries.append(dataEntry)
        }
        let chartDataSet = LineChartDataSet(entries: dataEntries,label: "General")
        chartDataSet.circleRadius = 3
        chartDataSet.circleHoleRadius = 2
        chartDataSet.circleHoleColor = .white
        chartDataSet.setCircleColor(.gray)
        chartDataSet.linewidth = 3
        chartDataSet.colors = [.gray]
        chartDataSet.drawCircleHoleEnabled = true
        chartDataSet.drawValuesEnabled = false
        var dataEntries2:[ChartDataEntry] = []
        for i in 0..<secondLine.count{
//            let ind = 0
//            for j in 0..<7{
//                if startIndex = j
//            }
            let dataEntry =  ChartDataEntry(x: Double(i),y: Double(secondLine[i]),data: dateArr as AnyObject?)
            print(dataEntry)
            dataEntries2.append(dataEntry)
        }
        let chartDataSet2 = LineChartDataSet(entries: dataEntries2,label: "Before Meal")
        chartDataSet2.circleRadius = 3
        chartDataSet2.circleHoleRadius = 2
        chartDataSet2.circleHoleColor = .white
        chartDataSet2.setCircleColor(.blue)
        chartDataSet2.linewidth = 3
        chartDataSet2.colors = [.blue]
        chartDataSet2.drawCircleHoleEnabled = true
        chartDataSet2.drawValuesEnabled = false
        
        var dataEntries3:[ChartDataEntry] = []
        for i in 0..<thirdLine.count{
            let dataEntry =  ChartDataEntry(x: Double(i),y: Double(thirdLine[i]),data: dateArr as AnyObject?)
            print(dataEntry)
            dataEntries3.append(dataEntry)
        }
        let chartDataSet3 = LineChartDataSet(entries: dataEntries3,label: "After Meal")
        chartDataSet3.circleRadius = 3
        chartDataSet3.circleHoleRadius = 2
        chartDataSet3.circleHoleColor = .white
        chartDataSet3.setCircleColor(.green)
        chartDataSet3.linewidth = 3
        chartDataSet3.colors = [.green]
        chartDataSet3.drawCircleHoleEnabled = true
        chartDataSet3.drawValuesEnabled = false
        
        let chartData = LineChartData(dataSets: [chartDataSet2,chartDataSet3,chartDataSet])
        let xAxisValue = glucoseLineChartView.xAxis
        xAxisValue.valueFormatter = axisFormatDelegate
        glucoseLineChartView.leftAxis.axisMaximum = 24
        glucoseLineChartView.leftAxis.axisMinimum = 0
        glucoseLineChartView.xAxis.labelPosition = .bottom
        glucoseLineChartView.rightAxis.enabled = false
        let marker = BalloonMarker(color: UIColor(white: 180/255,alpha: 1),font: .systemFont(ofSize: 12),textColor: .white,insets: UIEdgeInsets(top: 8,left: 8,bottom: 20,right: 8))
        marker.chartView = glucoseLineChartView
        marker.minimumSize = CGSize(width: 80,height: 40)
        glucoseLineChartView.marker = marker
        glucoseLineChartView.data = chartData
        
    }

我正在像这样快速地将值提取到 coredata 中,但是如果缺少日期而不是它在系列中绘制值

my coredatamodel look like this:

任何帮助将不胜感激,谢谢

    func fetchglucose(startDate: String,endDate: String,noOfDays: String){
        print("Fetching Data..")
        self.avgArr.removeAll()
        self.dateArr.removeAll()
        self.beforeAvgArr.removeAll()
        self.afteravgArr.removeAll()
        self.diasAvgArr.removeAll()
        do {
            let ex = NSExpression(format: "average:(value)")
            let ed = NSExpressionDescription()
            ed.name = "avgofglucoval"
            ed.expression = ex
            ed.expressionResultType = .stringAttributeType
            let request = NSFetchRequest<NSFetchRequestResult>(entityName: "HMglucose")
            request.resultType = .dictionaryResultType
            request.propertiesToFetch = ["date",ed]
            request.propertiesToGroupBy = ["date"]
            
            let exDia = NSExpression(format: "average:(value)")
            let edDia = NSExpressionDescription()
            edDia.name = "avgofBefore"
            edDia.expression = exDia
            edDia.expressionResultType = .stringAttributeType
            let request1 = NSFetchRequest<NSFetchRequestResult>(entityName: "HMglucose")
            request1.resultType = .dictionaryResultType
            request1.propertiesToFetch = ["date",edDia]
            request1.propertiesToGroupBy = ["date"]
            
            let exDia1 = NSExpression(format: "average:(value)")
            let edDia1 = NSExpressionDescription()
            edDia1.name = "avgofAfter"
            edDia1.expression = exDia1
            edDia1.expressionResultType = .stringAttributeType
            let request2 = NSFetchRequest<NSFetchRequestResult>(entityName: "HMglucose")
            request2.resultType = .dictionaryResultType
            request2.propertiesToFetch = ["date",edDia1]
            request2.propertiesToGroupBy = ["date"]
            
            let predicate = nspredicate(format: "(date >= %@) AND (date <= %@)",startDate,endDate)
            let predicate1 = nspredicate(format: "(date >= %@) AND (date <= %@) AND (type == %@)",endDate,"Before")
            let predicate2 = nspredicate(format: "(date >= %@) AND (date <= %@) AND (type == %@)","After")
            request.predicate = predicate
            request1.predicate = predicate1
            request2.predicate = predicate2
            let sectionSortDescriptor = NSSortDescriptor(key: "dt",ascending: false)
            let sortDescriptors = [sectionSortDescriptor]
            request.sortDescriptors = sortDescriptors
            let sectionSortDescriptor1 = NSSortDescriptor(key: "dt",ascending: false)
            let sortDescriptors1 = [sectionSortDescriptor1]
            request1.sortDescriptors = sortDescriptors1
            let sectionSortDescriptor2 = NSSortDescriptor(key: "dt",ascending: false)
            let sortDescriptors2 = [sectionSortDescriptor2]
            request2.sortDescriptors = sortDescriptors2
            var error: Error? = nil
            var resultsArray: [Any]? = nil
            var resultsArray1: [Any]? = nil
            var resultsArray2: [Any]? = nil
           do {
                resultsArray = try appDelegate.persistentContainer.viewContext.fetch(request)
                resultsArray1 = try appDelegate.persistentContainer.viewContext.fetch(request1)
                resultsArray2 = try appDelegate.persistentContainer.viewContext.fetch(request2)
                print(resultsArray1)
                let resultsDict1 = resultsArray as! [[String: Any]]
                let resultsDict2 = resultsArray1 as! [[String: Any]]
                let resultsDict3 = resultsArray2 as! [[String: Any]]
                print(resultsArray)
                for i in resultsDict1 {
                    avgArr.append(i["avgofglucoval"] as! String ?? "")
                    let inputFormatter = DateFormatter()
                    inputFormatter.dateFormat = "yyyy-MM-dd"
                    let showDate = inputFormatter.date(from: i["date"] as! String ?? "")
                    inputFormatter.dateFormat = "d MMM"
                    let resultString = inputFormatter.string(from: showDate!)
                    dateArr.append(resultString)
                }
                for i in resultsDict2 {
                    diasAvgArr.append(i["avgofBefore"] as! String ?? "")
                }
            for i in resultsDict3 {
                afteravgArr.append(i["avgofAfter"] as! String ?? "")
                let inputFormatter = DateFormatter()
                inputFormatter.dateFormat = "yyyy-MM-dd"
                let showDate = inputFormatter.date(from: i["date"] as! String ?? "")
                inputFormatter.dateFormat = "d MMM"
                let resultString = inputFormatter.string(from: showDate!)
            }
            } catch let error as NSError {
                print("Could not fetch. \(error),\(error.userInfo)")
            }
            
            
            if noOfDays == "7"{
                if avgArr.count != 7 {
                    for i in 0..<((7 - avgArr.count)){
                        avgArr.append("-5.0")
                        dateArr.append("")
                        diasAvgArr.append("-5.0")
                        afteravgArr.append("-5.0")
                    }
                }
//                if diasAvgArr.count != 7 {
//                    for i in 0..<((7 - diasAvgArr.count)){
//                        diasAvgArr.append("-5.0")
//                        dateArr.append("")
//                    }
//                }
//                if afteravgArr.count != 7 {
//                    for i in 0..<((7 - afteravgArr.count)){
//                        afteravgArr.append("-5.0")
//                        dateArr.append("")
//                    }
//                }
            }else if noOfDays == "14"{
                if avgArr.count != 14 {
                    for i in 0..<((14 - avgArr.count)){
                        avgArr.append("-5.0")
                        dateArr.append("")
                        diasAvgArr.append("-5.0")
                        afteravgArr.append("-5.0")
                    }
                }
            }else if noOfDays == "30"{
                if avgArr.count != 30 {
                    for i in 0..<((30 - avgArr.count)){
                        avgArr.append("-5.0")
                        dateArr.append("")
                        diasAvgArr.append("-5.0")
                        afteravgArr.append("-5.0")
                    }
                }
            }
            print(avgArr)
            print(diasAvgArr)
            print(afteravgArr)
            print(dateArr)
            setglucoseChart(dataEntryX: dateArr,dataEntryY: unitsSold,result: avgArr.convertTodouble,secondLine: diasAvgArr.convertTodouble,thirdLine: afteravgArr.convertTodouble)
            
        }
    }

incorrect output

required output:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...