Диаграммы IOS выделяют определенные метки на оси X и пунктирной линии сетки только в середине - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь использовать разные цвета для надписей на оси 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 Ответ

0 голосов
/ 22 февраля 2019

Эта функция недоступна в библиотеке.


Однако это должноне мешает вам реализовать его самостоятельно и, возможно, даже добавить его в библиотеку.

В качестве отправной точки посмотрите на 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, чтобы обеспечить его.

Надеюсь, это вам как-то поможет.

...