Coreplot CPTXYGraph图未正确显示

时间:2017-11-04 01:29:51

标签: swift macos core-plot scatter-plot

我在Swift程序中使用最新版本的Core Plot。该图表没有问题,并显示以下enter image description here

如果您查看绘图,绘图的渐变填充的下半部分与xAxis不匹配,这是我期望的行为。相反,它开始在yAxis的一部分。

之前我没有遇到过这种行为,也不确定在我的代码中找到错误的位置。我还没有能够在stackOverflow或网络上的其他地方找到相关条目。

我已经测试了plotspace变量并且它们是钱,Y轴的最小值/最大值是预期的,并且通过下面显示的委托函数的X / Y坐标[number()和numberOfRecords()]是预期的。我不确定核心情节中的是什么会驱使这种行为。

如果有人能够建议其他区域来检查错误,那将非常感激。

不是最初发布所有代码,如果有人可以建议探索某个区域,我会在代码中添加该代码元素以帮助诊断。我最初只包含应用程序部分的代码,该部分定义了下面委托函数下面的散点线图[configureLineGraph()]。

    // Delegate functions for Core Plot
func numberOfRecords(for plot: CPTPlot) -> UInt {
    numberOfRecordsToBeDisplayedOnGraph = UInt(arrayOfCommanderProgress.count)
    return  numberOfRecordsToBeDisplayedOnGraph // this needs to represent the number of records to be displayed on the graph
}

func number(for plot: CPTPlot, field fieldEnum: UInt, record idx: UInt) -> Any? {
    let index = Int(numberOfRecordsToBeDisplayedOnGraph - idx) - 1
    switch CPTScatterPlotField(rawValue: Int(fieldEnum))! {
    case .X:
        let xCoord = (arrayOfCommanderProgress[index].timeStamp.convertDateStringToDateObject()).timeIntervalSinceReferenceDate
        return xCoord
    case .Y:
        var yCoord = Double()
        if fieldEnum == 1 {
            switch graphToDisplay {
            case graphCombat:
                yCoord = (Double(self.arrayOfCommanderProgress[index].combat)) + (100.0 * (Double(arrayOfRankProgress[index].combat)))
            case graphTrade:
                yCoord = (Double(self.arrayOfCommanderProgress[index].trade)) + (100.0 * (Double(arrayOfRankProgress[index].trade)))
            case graphExploration:
                yCoord = (Double(self.arrayOfCommanderProgress[index].explore)) + (100.0 * (Double(arrayOfRankProgress[index].explore)))
            case graphFederation:
                yCoord = (Double(self.arrayOfCommanderProgress[index].federation)) + (100.0 * (Double(arrayOfRankProgress[index].federation)))
            case graphEmpire:
                yCoord = (Double(self.arrayOfCommanderProgress[index].empire)) + (100.0 * (Double(arrayOfRankProgress[index].empire)))
            case graphCQC:
                yCoord = (Double(self.arrayOfCommanderProgress[index].cQC)) + (100.0 * (Double(arrayOfRankProgress[index].cQC)))
            default:
                break
            }
        }
        return yCoord
    }
}


 // Funtions to set up the graphView and plots
func configureLineGraph() {

    // Plotline variables for scatterplot
    let plotLineTotal = CPTScatterPlot()
    let areaGradient:CPTGradient = CPTGradient(beginning: CPTColor.clear(), ending: CPTColor(componentRed: 150/255.0, green: 180/255.0, blue: 200/255.0, alpha: 0.9))
    areaGradient.angle = 90.0
    let areaGradientFill:CPTFill = CPTFill(gradient: areaGradient)

    // Set up plot lines for each type of total to be graphed
    plotLineTotal.areaFill = areaGradientFill

    // set up plotline characteristics
    let plotLineType = CPTMutableLineStyle()
    plotLineType.lineColor = CPTColor.darkGray()

    // establish a reference to the graph custom view
    guard let graph = graphView.hostedGraph else { return }

    // Add additional plotlines to the plots Array if needed
    let plots = [plotLineTotal]
    for plot in plots {
        plot.dataSource = self
        plot.delegate = self
        plot.areaBaseValue = CPTDecimalFromInteger(0) as NSNumber
        plot.dataLineStyle = plotLineType
        graph.add(plot, to: graph.defaultPlotSpace)
    }
    graph.reloadData()
}

0 个答案:

没有答案