2015-09-20 2 views
2

Я использую изо-диаграммы, чтобы попытаться нарисовать круговую диаграмму в приложении iOS.Превосходит ли легенда количество названий?

Независимо от того, что я пытаюсь, я не могу получить полное количество названий, чтобы нарисовать легенду.

Я мои данные настройки как:

ages = ["18-", "25-", "35-", "45-", "55-", "65-", "75+"] 
agePercentages = [10.0, 20.0, 30.0, 5.0, 10.0, 45.0, 120.0] 

Мой код для установки на PieChart как:

func setPieDefaults(myPieChart: PieChartView) -> PieChartView { 

    myPieChart.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.width*0.5) 
    myPieChart.usePercentValuesEnabled = true 
    myPieChart.holeTransparent = true 
    myPieChart.holeColor = UIColor.darkPurpleColor() 
    myPieChart.backgroundColor = UIColor.darkPurpleColor() 
    myPieChart.rotationAngle = 0.0 
    myPieChart.rotationEnabled = true 
    myPieChart.centerTextFont = UIFont(name: "HelveticaNeue-Bold", size:20)! 
    myPieChart.descriptionText = "" 
    myPieChart.centerText = "%" 
    myPieChart.centerTextColor = UIColor.whiteColor() 
    myPieChart.drawHoleEnabled = true 
    myPieChart.noDataText = "Loading Data ..." 
    let legend = myPieChart.legend 
    legend.font = UIFont(name: "Arial", size: 11)! 
    legend.textColor = UIColor.whiteColor() 
    legend.position = .RightOfChart 
    legend.form = .Circle 

    return myPieChart 
} 

И ..

func setChart(dataPoints: [String], values: [Double], myPieView: PieChartView) { 

    var dataEntries: [ChartDataEntry] = [] 

    for i in 0..<dataPoints.count { 
     let dataEntry = ChartDataEntry(value: values[i], xIndex: i) 
     dataEntries.append(dataEntry) 
    } 

    var colors = [UIColor]() 
    switch myPieView { 
    case genderPieChartView: 
     colors = [UIColor.blueColor(), UIColor.pinkColor()] 
    default: 
     colors = ChartColorTemplates.colorful() 
    } 

    let pieChartDataSet = PieChartDataSet(yVals: dataEntries, label: nil) 
    pieChartDataSet.sliceSpace = 3.0 
    pieChartDataSet.colors = colors 

    let pieChartData = PieChartData(xVals: dataPoints, dataSet: pieChartDataSet) 
    myPieView.animate(xAxisDuration: 2, yAxisDuration: 2) 

    let pFormatter = NSNumberFormatter() 
    pFormatter.numberStyle = .PercentStyle 
    pFormatter.maximumFractionDigits = 0 
    pFormatter.percentSymbol = "" 
    pFormatter.multiplier = 1 
    pieChartData.setValueFormatter(pFormatter) 
    pieChartData.setValueFont(UIFont(name: "HelveticaNeue-Bold", size: 11)!) 
    pieChartData.setValueTextColor(UIColor.whiteColor()) 

    myPieView.data = pieChartData 
    myPieView.drawSliceTextEnabled = false 

} 

Но это не будет печатать более 5 ярлыков. Он отлично возвращает кусочки пирога. Но не метки в легенде.

enter image description here

я делаю что-то не так? Заранее спасибо за то, что сообщили мне.

ответ

0

Решено.

При чтении framework docs для Android версии немного лучше:

Количество записей автоматически генерируемая легенда содержит зависит от количества разных цветов (по всем объектам DataSet) , а также на метки DataSet. Метки легенды зависят от ярлыков, установленных для используемых объектов DataSet в диаграмме. Если для объектов DataSet не указаны метки , диаграмма будет автоматически сгенерировать их. Если для одного DataSet используется несколько цветов, эти цвета группируются и описываются только одной меткой.

Я понял, что мне нужно увеличить количество цветов в определении ChartColorTemplate.colorful(), чтобы соответствовать количеству меток, которые я пытался использовать. Текущий код примера содержит только 5 цветов.

public class func colorful() -> [UIColor] 
{ 
    return [ 
     UIColor(red: 193/255.0, green: 37/255.0, blue: 82/255.0, alpha: 1.0), 
     UIColor(red: 255/255.0, green: 102/255.0, blue: 0/255.0, alpha: 1.0), 
     UIColor(red: 245/255.0, green: 199/255.0, blue: 0/255.0, alpha: 1.0), 
     UIColor(red: 106/255.0, green: 150/255.0, blue: 31/255.0, alpha: 1.0), 
     UIColor(red: 179/255.0, green: 100/255.0, blue: 53/255.0, alpha: 1.0), 
     UIColor(red: 200/255.0, green: 100/255.0, blue: 53/255.0, alpha: 1.0), // added colour 
     UIColor(red: 150/255.0, green: 150/255.0, blue: 70/255.0, alpha: 1.0), // added colour 
     UIColor(red: 84/255.0, green: 78/255.0, blue: 53/255.0, alpha: 1.0), // added colour 
    ] 
} 

Если у вас есть та же проблема, то определить гораздо больше цветов, чтобы удовлетворить потребности максимального количества этикеток необходимо. Это также решит проблему, если вы попытаетесь сложить текст легенды (с которой я тоже столкнулся).

Смежные вопросы