Попробуйте этот код

ользуюрамки графиков для рисования диаграмм. Мне нужно добавить несколько строк слева от каждого бара. В моем коде всегда есть два бара, один длядоход и один длярасходы, Я хочу показать эти строки в стороне от каждого бара.

Ниже вы можете увидеть мои коды:

            let ys1 = [model.totalIncome, abs(model.totalExpense)]

            var yse1 = ys1.enumerated().map { x, y -> BarChartDataEntry in
            return BarChartDataEntry(x: Double(x), y: y)
            }

            let count = 2
            let data = BarChartData()
            let ds1 = BarChartDataSet(values: yse1, label: "")
            ds1.colors = [UIColor.red, UIColor.blue]

            // Number formatting of Values
            ds1.valueFormatter = YAxisValueFormatter()
            ds1.valueFont = UIFont(fontType: .H6)!
            ds1.valueTextColor = UIColor.dark_text

            // Data set
            data.addDataSet(ds1)
            horizontalBarChartView.data = data

            // General setting
            horizontalBarChartView.xAxis.drawLabelsEnabled = false
            horizontalBarChartView.setScaleEnabled(false)

            // Grid
            horizontalBarChartView.xAxis.drawGridLinesEnabled = false
            horizontalBarChartView.leftAxis.gridLineDashLengths = [15.0, 15.0]
            horizontalBarChartView.leftAxis.gridColor = UIColor.palette_28
            horizontalBarChartView.rightAxis.drawGridLinesEnabled = false


            // Disable number formatting of leftAxis and rightAxis
            horizontalBarChartView.leftAxis.enabled = false
            horizontalBarChartView.rightAxis.enabled = false

            horizontalBarChartView.xAxis.valueFormatter = 
            IndexAxisValueFormatter(values: ["Income","Expense"])
            horizontalBarChartView.xAxis.granularityEnabled = true
            horizontalBarChartView.xAxis.granularity = 1


            // setViewPortOffsets
            let digitCount = Int(data.yMax).digitCount
            let leftOffcet: CGFloat = digitCount > 2 ? CGFloat((digitCount - 1) * 10) : 10.0
            horizontalBarChartView.setViewPortOffsets(left: leftOffcet, top: 0, right: 0, bottom: 50)

            horizontalBarChartView.leftAxis.axisMinimum = 0

И мой взгляд:

   lazy var horizontalBarChartView: HorizontalBarChartView = {
        let chartView = HorizontalBarChartView()
        chartView.contentMode = .scaleAspectFit
        chartView.drawBordersEnabled = false
        chartView.drawGridBackgroundEnabled = false
        chartView.gridBackgroundColor = UIColor.clear
        chartView.legend.enabled = false
        chartView.chartDescription = nil
        chartView.highlighter = nil
        chartView.clipsToBounds = true
        chartView.translatesAutoresizingMaskIntoConstraints = false
        return chartView
    }()

Я думаю, что код должен добавить эти метки ниже, однако, это не работает

    horizontalBarChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: ["Income","Expense"])
    horizontalBarChartView.xAxis.granularityEnabled = true
    horizontalBarChartView.xAxis.granularity = 1

Обновить

Вижу оранжевый прямоугольник. Мне нужны эти ярлыки.

Ответы на вопрос(4)

 self.ChartObj.xAxis.valueFormatter = DefaultAxisValueFormatter(block: {(index, _) in
            print(index)
            return YourArray.object(at: Int(index)) as! String
        })
 self.ChartObj.xAxis.setLabelCount(YourArray.count, force: true)

Я использую расширение для этого

extension BarChartView {

    private class BarChartFormatter: NSObject, IAxisValueFormatter {

        var labels: [String] = []

        func stringForValue(_ value: Double, axis: AxisBase?) -> String {
            return labels[Int(value)]
        }

        init(labels: [String]) {
            super.init()
            self.labels = labels
        }
    }

    func setBarChartData(xValues: [String], yValues: [Double], label: String) {

        var dataEntries: [BarChartDataEntry] = []

        for i in 0..<yValues.count {
            let dataEntry = BarChartDataEntry(x: Double(i), y: yValues[i])
            dataEntries.append(dataEntry)
        }

        let chartDataSet = BarChartDataSet(values: dataEntries, label: label)
        let chartData = BarChartData(dataSet: chartDataSet)

        let chartFormatter = BarChartFormatter(labels: xValues)
        let xAxis = XAxis()
        xAxis.valueFormatter = chartFormatter
        self.xAxis.valueFormatter = xAxis.valueFormatter

        self.data = chartData
    }
}

Вы можете использовать это в коде, как это

chartView.setBarChartData(xValues: xEntries, yValues: yEntries, label: "Income")

где,

//You need to add values dynamically
var yEntries: [Double] = [1000, 200, 500]
var xEntries: [String] = ["Income1", "Income2", "Income3"]

Надеюсь, это работает.

 jose92040524 апр. 2018 г., 00:13
наконец-то ответ, который работает, спасибо
 jose92040530 мая 2018 г., 23:27
как центрировать xValues, связанные с баром, я пытаюсь сself.xAxis.centerAxisLabelsEnabled = true но не работает

Когда вы создаете свойBarChartDataSet Вы можете передать этикетку.

let data = BarChartData()
let ds1 = BarChartDataSet(values: yse1, label: "Income")
ds1.colors = [UIColor.red, UIColor.blue]

Надеюсь это поможет.

 Amir Shabani07 окт. 2017 г., 12:08
Нет, пожалуйста, смотрите мое обновление. Мне нужны эти ярлыки.
Решение Вопроса

ны изучить это отлично. Я использовал старый код в нашем проекте (копировать / вставить), поэтому это вызвало некоторые проблемы при рисовании меток xAxis на моем графике.

Просто прокомментируйте ниже строки:

    horizontalBarChartView.xAxis.drawLabelsEnabled = false

Ваш ответ на вопрос