Charts: рдПрдХрд╛рдзрд┐рдХ/рд╕рдореВрд╣реАрдХреГрдд рдмрд╛рд░ рдЪрд╛рд░реНрдЯ рдХреЗ рд╕рд╛рде XAxis рд▓реЗрдмрд▓ рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдордИ 2017  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: danielgindi/Charts

рдореИрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХрд╛рдзрд┐рдХ/рд╕рдореВрд╣реАрдХреГрдд рдмрд╛рд░ рдЪрд╛рд░реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╛рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рддрдп рдирд╣реАрдВ рд╣реИред рд╕рдореВрд╣ рд╕реНрдерд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рд╣реИ

func calcGroupSpace(n:Int)->Double{ let y = 0.03 * Double(n) let x : Double = 1 / (y+1) return x }

рдореЗрд░реЗ xValues тАЛтАЛтАЛтАЛрд╣реИрдВ, рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рднреА рд╣реИрдВ, рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдмрдирд╛рдИ рд╣реИред

let xVal = ["Apples", "Oranges", "Pears", "Grapes", "Bananas"]

рдореИрдВрдиреЗ рд╡реИрд▓реНрдпреВ рдлреЙрд░реНрдореЗрдЯрд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдпрд╛ рд╣реИред

`рд╡рд░реНрдЧ BarChartFormatter: NSObject, IAxisValueFormatter {

var labels: [String] = []

func stringForValue(_ value: Double, axis: AxisBase?) -> String {
    let index = Int(value) % labels.count
    if index>=0 && index<labels.count{
        return labels[index]
    }
    return ""
}

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

}
`

рдФрд░ рдореЗрд░реЗ рдЪрд╛рд░реНрдЯ рдХреЗ рдЕрдВрджрд░, рдпрд╣рд╛рдБ x-рдЕрдХреНрд╖ рдФрд░ рд╕рдореВрд╣ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ
'рдЪрд╛рд░реНрдЯрдлреЙрд░реНрдореЗрдЯрд░ = рдмрд╛рд░ рдЪрд╛рд░реНрдЯрдлреЙрд░реНрдореЗрдЯрд░ (рд▓реЗрдмрд▓: xAxis) рджреЗрдВ

    let xaxis = barChart.xAxis
    //xaxis.valueFormatter = axisFormatDelegate
    xaxis.drawGridLinesEnabled = true
    xaxis.labelPosition = .bottom
    xaxis.centerAxisLabelsEnabled = true
    xaxis.valueFormatter = chartFormatter
    xaxis.granularityEnabled = true
    xaxis.granularity = 1
    xaxis.labelCount = xAxis.count

    let groupSpace = chartCommanStyle.calcGroupSpace(n: keys.count)
    let barSpace = 0.03
    let barWidth = groupSpace


    let groupCount = xAxis.count+1
    let startYear = 0


    data.barWidth = barWidth;
    barChart.xAxis.axisMinimum = Double(startYear)
    let gg = data.groupWidth(groupSpace: groupSpace, barSpace: barSpace)

    barChart.xAxis.axisMaximum = Double(startYear) + gg * Double(groupCount)

    data.groupBars(fromX: Double(startYear), groupSpace: groupSpace, barSpace: barSpace)

    barChart.data = data

    barChart.setVisibleXRangeMaximum(15)
    barChart.animate(yAxisDuration: 1.0, easingOption: .easeInOutBounce)`

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдореЗрд░реЗ рдПрдХреНрд╕-рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ

screen shot 2017-05-26 at 5 53 42 pm

рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@atalayasa рдФрд░ @mazenhalawi : рд╣реИрд▓реЛ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: https://github.com/sagarsukode/Charts

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВрдиреЗ рдЧреНрд░реБрдк рд╕реНрдкреЗрд╕ рдХрд╛рдЙрдВрдЯ рдлрдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдореИрдВ рдЗрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рди рд░рд╣рд╛ рдерд╛

(рдЧреНрд░реБрдкрд╕реНрдкреЗрд╕ * рдмрд╛рд░рд╕реНрдкреЗрд╕) * рдПрди + рдЧреНрд░реБрдкрд╕реНрдкреЗрд╕ = 1

рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд▓рдд рдерд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ

(рдмрд╛рд░ рдХреА рдЪреМрдбрд╝рд╛рдИ * рдмрд╛рд░рд╕реНрдкреЗрд╕) * n + рдЧреНрд░реБрдкрд╕реНрдкреЗрд╕ = 1

рддреЛ n рдХреЙрд▓рдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдирдпрд╛ рдХрд╛рд░реНрдп рд╣реИ

func calcGroupSpace(n:Int)->Double{ let groupSpace = 1 - (0.23 * Double(n)) return groupSpace }

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ ..

рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдХреЗрд╡рд▓ рдКрдкрд░ рд╡рд╛рд▓реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
(рдЙрдкрд░реЛрдХреНрдд рдЙрддреНрддрд░ рдореЗрд░реЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдирд╛ рдореБрджреНрджрд╛ рдкреЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред)
рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

let months = ["Jan", "Feb", "Mar", "Apr", "May"]
let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0]
let unitsBought = [10.0, 14.0, 60.0, 13.0, 2.0]

//legend
        let legend = barChartView.legend
        legend.enabled = true
        legend.horizontalAlignment = .right
        legend.verticalAlignment = .top
        legend.orientation = .vertical
        legend.drawInside = true
        legend.yOffset = 10.0;
        legend.xOffset = 10.0;
        legend.yEntrySpace = 0.0;


        let yaxis = barChartView.leftAxis
        yaxis.spaceTop = 0.35
        yaxis.axisMinimum = 0
        yaxis.drawGridLinesEnabled = false

        barChartView.rightAxis.enabled = true


        barChartView.delegate = self
        barChartView.noDataText = "You need to provide data for the chart."
        barChartView.chartDescription?.textColor = UIColor.clear

        let xaxis = barChartView.xAxis
        //xaxis.valueFormatter = axisFormatDelegate
        xaxis.forceLabelsEnabled = true
        xaxis.drawGridLinesEnabled = false
        xaxis.labelPosition = .bottom
        xaxis.centerAxisLabelsEnabled = true
        xaxis.valueFormatter = IndexAxisValueFormatter(values:self.months)
        xaxis.granularityEnabled = true
        xaxis.granularity = 1


var dataEntries: [BarChartDataEntry] = []
        var dataEntries1: [BarChartDataEntry] = []

        for i in 0..<self.months.count {

            let dataEntry = BarChartDataEntry(x: Double(i) , y: Double(self.unitsSold[i]))
            dataEntries.append(dataEntry)

            let dataEntry1 = BarChartDataEntry(x: Double(i) , y: Double(self.unitsBought[i]))
            dataEntries1.append(dataEntry1)

        }

        let chartDataSet = BarChartDataSet(values: dataEntries, label: "unitsSold")
        let chartDataSet1 = BarChartDataSet(values: dataEntries1, label: "unitsBought")

        let dataSets: [BarChartDataSet] = [chartDataSet,chartDataSet1]
        chartDataSet.colors = [UIColor(red: 0/255, green: 255/255, blue: 0/255, alpha: 0.5)]
        chartDataSet1.colors = [UIColor(red: 255/255, green: 0/255, blue: 0/255, alpha: 0.8)]

        //chartDataSet.colors = ChartColorTemplates.colorful()
        //let chartData = BarChartData(dataSet: chartDataSet)

        let chartData = BarChartData(dataSets: dataSets)

        let groupSpace = 0.5
        let barSpace = 0.03
        let barWidth = groupSpace


        let groupCount = self.months.count
        let startYear = 0


        chartData.barWidth = barWidth;
        barChartView.xAxis.axisMinimum = Double(startYear)
        let gg = chartData.groupWidth(groupSpace: groupSpace, barSpace: barSpace)

        barChartView.xAxis.axisMaximum = Double(startYear) + gg * Double(groupCount)

        chartData.groupBars(fromX: Double(startYear), groupSpace: groupSpace, barSpace: barSpace)

        barChartView.data = chartData

        barChartView.setVisibleXRangeMaximum(15)
        barChartView.animate(yAxisDuration: 1.0, easingOption: .easeInOutBounce)

рдЗрд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

screen shot 2018-03-17 at 3 10 09 pm

рдореБрджреНрджреЗ: рд╕рднреА xaxis рд▓реЗрдмрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВ рд╕реНрд╡рд┐рдлреНрдЯ 4 рдФрд░ рдПрдХреНрд╕рдХреЛрдб 9.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдЕрджреНрдпрддрди (08 рдордИ - 2018): рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: https://github.com/sagarsukode/Charts

simulator screen shot - iphone x - 2018-05-08 at 16 32 30

@sagarsukode рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ рдорд╣реАрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛:
рдЪрд▓реЛ xAxisLabels = ["рдлрд░рд╡рд░реА", "рдлрд░рд╡рд░реА", "рдорд╛рд░реНрдЪ", "рдорд╛рд░реНрдЪ", "рдЕрдкреНрд░реИрд▓", "рдЕрдкреНрд░реИрд▓"...]

IndexAxisValueFormatter (рдорд╛рди: your_array_here) рдореЗрдВ xAxisLabels рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЗрдмрд▓рдХрд╛рдЙрдВрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдкрд░реЛрдХреНрдд рдЪрд┐рддреНрд░ рд╕реЗ рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ 5 рдбрд╛рд▓реВрдВрдЧрд╛ред xAxisLabels рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред

рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ!

@atalayasa рдФрд░ @mazenhalawi : рд╣реИрд▓реЛ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: https://github.com/sagarsukode/Charts

@sagarsukode рдзрдиреНрдпрд╡рд╛рдж рдмрд╣реБрдд рд╕рд╛рдЧрд░рд╕реБрдХреЛрдб рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ xaxis рд▓реЗрдмрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

@sagarsukode рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреНрдпрд╡рд╛рдж!!!!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕