Ich habe ein Diagramm Donut mit Shinobi. Aber abhängig von den Daten überschneiden sich die Etiketten !!Shinobi Donut Chart-Etiketten überlappen
Auch einer der Etiketten wird nicht vollständig (Max Payment) zeigte.
Ich habe überall auf dem Stack-Überlauf gesucht und keine Lösung dafür gefunden. Auch nichts über dieses Problem in Shinobi Website oder in ihren Dokumentationen.
dies ist mein Code:
import UIKit
class MyViewController: UIViewController, SChartDatasource {
var donutChartValues:[Double] = []
var donutChartLabels:[String] = []
@IBOutlet weak var chartView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
redrawChart()
}
func redrawChart() {
setDonutChartValues()
let chart = ShinobiChart(frame: chartView.bounds)
chart.autoresizingMask = [.flexibleHeight, .flexibleWidth]
chart.backgroundColor = UIColor.clear
chart.datasource = self
chartView.addSubview(chart)
}
func setDonutChartValues() {
donutChartValues.removeAll()
donutChartLabels.removeAll()
donutChartValues.append(2500.00)
donutChartLabels.append("Max Payment")
donutChartValues.append(300.0)
donutChartLabels.append("Property Tax")
donutChartValues.append(100.0)
donutChartLabels.append("Condo Fees")
donutChartValues.append(150.0)
donutChartLabels.append("Heating Costs")
donutChartValues.append(300.0)
donutChartLabels.append("Debts")
donutChartValues.append(4000.0)
donutChartLabels.append("Other Expenses")
}
/********************************************************************************/
// MARK: - SChartDatasource methods
/********************************************************************************/
func numberOfSeries(in chart: ShinobiChart) -> Int {
return 1
}
func sChart(_ chart: ShinobiChart, seriesAt index: Int) -> SChartSeries {
let donutSeries = SChartDonutSeries()
donutSeries.style().spokeStyle.showSpokes = true;
donutSeries.selectedStyle().spokeStyle.showSpokes = true;
donutSeries.style().labelFontColor = UIColor.black
donutSeries.selectedStyle().labelFontColor = UIColor.black
return donutSeries
}
func sChart(_ chart: ShinobiChart, numberOfDataPointsForSeriesAt seriesIndex: Int) -> Int {
return donutChartValues.count
}
func sChart(_ chart: ShinobiChart, dataPointAt dataIndex: Int, forSeriesAt seriesIndex: Int) -> SChartData {
let dp = SChartDataPoint()
dp.xValue = 0
dp.yValue = (donutChartValues.count > dataIndex) ? donutChartValues[dataIndex] : 0
return dp
}
func sChart(_ chart: ShinobiChart, labelForSliceAt sliceIndex: Int, in series: SChartRadialSeries) -> UILabel? {
let sliceLabel = UILabel()
sliceLabel.text = (donutChartLabels.count > sliceIndex) ? donutChartLabels[sliceIndex] : ""
return sliceLabel
}
}
Jede Hilfe würde geschätzt.
Danke, aber die Daten würden sich im Programm ändern, ich glaube nicht, dass es einen einfachen Weg für mich geben würde zu berechnen, ob sich die Labels auf neuen Daten überlappen würden oder nicht. – Besat