iOS Charts如何突出显示X轴上特定的标签以及仅在中间显示虚线网格线

3
我正在尝试根据当前月份为X轴标签设置不同的颜色,但似乎无法单独配置。我还尝试在左轴上设置一个具有虚线中线的网格线,而天花板线则没有虚线。但我似乎也无法单独设置它。
目前的情况:

enter image description here

我想要实现的目标:

enter image description here

到目前为止我的代码:

func setBarChart(dataPoints: [String], values: [String]){
    barChartView.noDataTextColor = UIColor.white
    barChartView.noDataText = "No data for the chart"
    barChartView.backgroundColor = UIColor.white

    for i in 0..<dataPoints.count {
        let dataPoint = BarChartDataEntry(x: Double(i), y: Double(values[i])!)
        dataEntry.append(dataPoint)
    }

    let chartDataSet = BarChartDataSet(values: dataEntry, label: "BPM")
    let chartData =  BarChartData()
    chartData.addDataSet(chartDataSet)
    chartData.setDrawValues(false)
    chartData.barWidth = Double(0.5)
    chartDataSet.colors = [UIColor(red: 0, green: 158/255, blue: 237/255, alpha: 1)]


    let formatter: ChartFormatter = ChartFormatter ()
    formatter.setValues(values: dataPoints)
    let floatValue: [CGFloat] = [4,4]
    barChartView.xAxis.valueFormatter = formatter
    barChartView.xAxis.labelTextColor = UIColor(red: 141/255, green: 141/255, blue: 141/255, alpha: 1)
    barChartView.getAxis(.right).labelTextColor = UIColor(red: 141/255, green: 141/255, blue: 141/255, alpha: 1)
    barChartView.xAxis.axisLineColor = UIColor.clear
    barChartView.getAxis(.right).axisLineColor = UIColor.clear
    barChartView.getAxis(.left).axisLineColor = UIColor.clear
    barChartView.xAxis.labelPosition = .bottom
    barChartView.xAxis.drawGridLinesEnabled = false
    barChartView.xAxis.drawLabelsEnabled = true
    barChartView.chartDescription?.enabled = false
    barChartView.legend.enabled = false
    barChartView.rightAxis.enabled = true
    barChartView.rightAxis.labelCount = Int(2)
    barChartView.rightAxis.drawGridLinesEnabled = false
    barChartView.leftAxis.drawGridLinesEnabled = true
    barChartView.leftAxis.gridColor = UIColor(red: 235/255, green: 235/255, blue: 235/255, alpha: 1)
    barChartView.leftAxis.gridLineWidth = CGFloat(1.5)
    barChartView.leftAxis.gridLineDashLengths = floatValue
    barChartView.leftAxis.drawLabelsEnabled = false
    barChartView.data = chartData
}
1个回答

2
这个功能在库中不可用。

但这并不妨碍您自己实现它,甚至将其添加到库中。

作为起点,请查看XAxisRenderer,其中包含drawLabels(context:pos:anchor:)方法。

在这里,它基本上通过循环遍历xAxis.entries,并通过调用drawLabel(context:formattedLabel:x:y:attributes:constrainedToSize:anchor:angleRadians:)来绘制每个标签,将labelAttrs传递给它,该属性具有有关要应用的颜色的信息。
但目前... labelAttrs在循环之前设置为一个从xAxis.labelTextColor引用的颜色。

关键在于将labelAttrs[NSAttributedString.Key.foregroundColor]设置为与条目相关的颜色,例如,在此行附近:

let label = xAxis.valueFormatter?.stringForValue(xAxis.entries[i], axis: xAxis) ?? ""

如果颜色也由 xAxis.valueFormatter 提供会更好,这需要对 IAxisValueFormatter 进行更改以实现它。希望这可以在某种程度上帮助您。"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接