ios - IOS 图表突出显示 X 轴上的特定标签和仅在中间的虚线网格线
问题描述
我试图根据当前月份的日期为 X 轴上的标签设置不同的颜色,但我似乎无法单独配置它们。我也试图有一个中线有破折号的网格线,而天花板线将没有破折号。这是在左轴上。但我似乎也无法单独设置它。
目前情况如何:
我想要达到的目标:
到目前为止我的代码:
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
}
解决方案
此功能在库中不可用。
但是,这不应阻止您自己实现它,甚至可能将其添加到库中。
作为起点,请查看具有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
才能提供它。
我希望这对您有所帮助。
推荐阅读
- c# - 如何使用 Sitecore Api 更改项目的模板 ID ..?? 注意 - 仅使用 sitecore api
- amazon-web-services - Auto Scaling 启动新实例时自动更新 Route 53
- tfs - 如何构建仅签入代码文件以及如何仅签入该构建的 tfs 中的代码工件?
- android - 找到具有最少字母的实例方法
- python - 使用 lambda 排序函数按每个元组组合值对字符串元组进行排序
- product - 如何在非商店页面上显示产品价格
- python-3.x - 避免使用“for”循环覆盖文件
- reactjs -
元素是屏幕外的位置 - android - 在 AlarmManager 中调用特定于平台的代码
- javascript - JavaScript 仅从数组中获取 cookie 值