์ฌ๋ฌ/๊ทธ๋ฃนํ๋ ๋ง๋ ์ฐจํธ๋ฅผ ๋์ ์ผ๋ก ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฏ๋ก ๋ง๋ ์๊ฐ ๊ณ ์ ๋์ด ์์ง ์์ต๋๋ค. ๊ทธ๋ฃน ๊ณต๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด ์ด ํจ์๋ฅผ ๋ง๋ค์์ต๋๋ค.
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์ถ ๋ฐ ๊ทธ๋ฃน ๊ณต๊ฐ์ ๋ํ ์ฝ๋๊ฐ ์์ต๋๋ค.
` let chartFormatter = BarChartFormatter(๋ ์ด๋ธ: 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)`
๋ฌธ์ ๋ ๋ด x์ถ ๋ ์ด๋ธ์ด ์๋ชป๋ ์์๋ก ํ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฃผ์ด์ง๋๋กํด์ผํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ด ์ธ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ๋์์ฃผ์ธ์.
๊ทธ๋ฃน ๊ณต๊ฐ ์นด์ดํธ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ์ฌ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์ด์ ์ ๋๋ ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ๊ณ ์์๋ค.
(groupSpace * barSpace) * n + groupSpace = 1
ํ์ง๋ง ์ด๊ฒ์ ์๋ชป๋์์ต๋๋ค.
(๋ง๋ ๋๋น * barSpace) * n + groupSpace = 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)
์ด ์คํฌ๋ฆฐ์ท์ ํ์ธํ์ญ์์ค:
@sagarsucode ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๊น?
์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์๋๋ฐ ๋ฐฐ์ด์์ ์์ ๋ณต์ ํ์ฌ ์์ ํ์ผ๋ฏ๋ก ๊ทํ์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์
๋๋ค.
xAxisLabels = ["2์", "2์", "3์", "3์", "4์", "4์"...]
IndexAxisValueFormatter(values: your_array_here)์์ xAxisLabels ๋ฐฐ์ด์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ labelCount ์์ฑ์ ๊ฒฝ์ฐ ๊ทธ๋ฃน ์๋ฅผ ์ธ๊ธํด์ผ ํ๋ฏ๋ก ์์ ๊ทธ๋ฆผ์์ 5๋ฅผ ์
๋ ฅํฉ๋๋ค. xAxisLabels ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค.
๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
@atalayasa & @mazenhalawi : ์๋ ํ์ธ์, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. https://github.com/sagarsucode/Charts ๋งํฌ๋ฅผ ํ์ธ
@sagarsucode ๋ง์ sagarsucode ํ์ธ ๊ฐ์ฌํฉ๋๋ค. ์ด๊ฒ์ xaxis ๋ ์ด๋ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ ๋ง ๋์์ด ๋ฉ๋๋ค.
์ ๋ง ๊ณ ๋ง์ต๋๋ค.
@sagarsucode ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฌ ํด์!!!!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@atalayasa & @mazenhalawi : ์๋ ํ์ธ์, ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. https://github.com/sagarsucode/Charts ๋งํฌ๋ฅผ ํ์ธ