IOS 图表突出显示 X 轴上的特定标签和仅在中间的虚线网格线

标签 ios swift ios-charts

我正在尝试根据当月的当前日期为 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
}

最佳答案

此功能在库中不可用。


但是,这不应阻止您自己实现它甚至可能将其添加到库中。

作为起点,请查看 XAxisRendererdrawLabels(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 才能提供它.

我希望这能以某种方式帮助你。

关于IOS 图表突出显示 X 轴上的特定标签和仅在中间的虚线网格线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54778065/

相关文章:

ios - 在 LAN 中广播 UDP 消息以检测 IP 摄像机

string - 如何在字符串中找到任何第一个字符的索引而不是 swift 中的空格?

ios - 如何让 UITextView 填满剩余空间

swift - iOS条形图如何设置按工作日划分的数据

swift - 使用最新的 ioscharts 显示条形图时出现问题

ios - 放大或缩小图像 Swift 时修复 UIButton 的位置

javascript - 如何在 react-native 中像 iOS 一样模态显示屏幕

ios - MVC——弥合我的模型和它在屏幕上的表现之间的差距

ios - 应用程序因 UIApplicationEndBackgroundTaskError 而崩溃

ios - 如何在Swift 3中绘制LineChartData?