iOS图表 - 单个值未显示Swift

时间:2017-05-18 13:05:23

标签: swift ios-charts

当我在数组中有多个点用于折线图上的一行时,一切都很完美。 但是当只有一个点时,点不显示。我不知道为什么? 代表正在其他地方设置,但这似乎不是问题。

以下示例显示了测试2和测试练习。第一个图像是每个图像都有一个值,第二个图像每个都有2个值。

继承我的代码

    func startChart(){

        chart.dragEnabled = true
        chart.legend.form = .circle
        chart.drawGridBackgroundEnabled = false

        let xaxis = chart.xAxis

        xaxis.valueFormatter = axisFormatDelegate
        xaxis.labelCount = dataSets.count
        xaxis.labelPosition = .bottom

        xaxis.granularityEnabled = true
        xaxis.granularity = 1.0
        xaxis.avoidFirstLastClippingEnabled = true
        xaxis.forceLabelsEnabled = true
        let rightAxis = chart.rightAxis

        rightAxis.enabled = false
        rightAxis.axisMinimum = 0

        let leftAxis = chart.leftAxis
        leftAxis.drawGridLinesEnabled = true
        leftAxis.axisMinimum = 0

        let chartData = LineChartData(dataSets: dataSets)
        chart.data = chartData
 }

如果我添加

chart.setVisibleXRangeMinimum(myMinDate)

该值将正确显示。但它会将值压向左侧并重叠2 x值日期

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

我能解决这个问题的唯一方法是添加一条额外的隐形线。

我创建了一条清晰的行,该行在前一天开始并在我的单个值之后的第二天结束。

只要图表上有一条线从一个点到另一个点,其他单个值就会显示出来。

  var singleValue = false
    for i in 0...(dataSets.count - 1) {
        if dataSets[i].values.count > 1{
            singleValue = true
        }
    }
    var data = dataSets
    if singleValue == false {
        let minNS = Calendar.current.date(byAdding: .day, value: -1, to: minNSDate as! Date)
        let maxNS =  Calendar.current.date(byAdding: .day, value: 1, to: maxNSDate as! Date)

        var dataEntries: [ChartDataEntry] = []

        let dataEntry1 = ChartDataEntry(x:Double(String(format: "%.2f",Double((minNS?.timeIntervalSince1970)!)))!,y:00.00)
        let dataEntry2 = ChartDataEntry(x:Double(String(format: "%.2f",Double((maxNS?.timeIntervalSince1970)!)))!,y:00.00)
        dataEntries.append(dataEntry1)
        dataEntries.append(dataEntry2)
        let set = LineChartDataSet(values: dataEntries, label: "")
        set.setCircleColor(UIColor.clear)
        set.circleHoleColor = UIColor.clear
        set.setColor(UIColor.white, alpha: 0.0)
        set.drawValuesEnabled = false
        data.append(set)

    }
    chart.chartDescription?.text = ""
    let chartData = LineChartData(dataSets: data)
    chart.data = chartData

enter image description here

答案 1 :(得分:0)

我想我找到了更好的解决方案。单点不足以画线(您至少需要两个点),因此UPDATE无法呈现您的数据。您可以将LineChartView替换为LineChartView来解决此问题。 CombinedChartView可以在一个图表上混合使用不同类型的数据。您可以查看您拥有的数据量,并确定哪种类型的CombinedChartView适当。

代码示例:

DataSet

您还可以在一个图表中组合两种或更多种类型 if dataEntry.count == 1 { let scatterDataSet = ScatterChartDataSet(values: dataEntry, label: title) scatterDataSet.setColor(UIColor.pmd_darkBlue) scatterDataSet.setScatterShape(.circle) scatterDataSet.drawValuesEnabled = false combinedChartData.scatterData = ScatterChartData(dataSets: [scatterDataSet]) } else { let lineDataSet = LineChartDataSet(values: dataEntry, label: title) lineDataSet.setColor(UIColor.pmd_darkBlue) lineDataSet.lineWidth = 3.0 lineDataSet.drawCirclesEnabled = false lineDataSet.drawValuesEnabled = false combinedChartData.lineData = LineChartData(dataSets: [lineDataSet]) } combinedChart.data = combinedChartData

重要

不要忘记添加以下行:

DataSets

您必须编写您使用的数据类型,否则数据将无法呈现。