2

我正在使用 iso-charts 尝试在 iOS 应用程序中绘制饼图。

无论我尝试什么,我似乎都无法在图例中绘制完整数量的标题。

我的数据设置为:

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

我将饼图设置为的代码:

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 个标签。它完美地返回了馅饼片。但不是传说中的标签。

在此处输入图像描述

难道我做错了什么?提前感谢您让我知道。

4

1 回答 1

1

解决了。

在阅读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
    ]
}

如果你有同样的问题,那么定义更多的颜色来满足需要的最大标签数量的需要。如果您尝试对图例进行自动换行(我也遇到过),这也将解决问题。

于 2015-09-21T08:05:50.737 回答