2016-12-04 9 views
1

Как установить определенные цвета для отдельного пузырька в диаграмме пузырьков iOS Charts в зависимости от его значения y? Так же, как это показано на одном скриншоте на сайте iOS Charts GitHub here. Таким образом, все верхние пузырьки уровня должны быть того же цвета, все средние из них еще, и т.д ...iOS Charts Bubble Chart Colors

Я уже пытался изменить цвет так:

chartDataSet.colors = [UIColor.red, UIColor.orange, UIColor.green] 

Но это только изменяет цвет для каждой x значение.

Полный код

Это мой полный код для установки пузырьковой диаграммы:

func getDetailedAnalytics() { 

    let currentTeacherDetailedAnalyticsUrl = TEACHER_DETAILED_ANALYTICS_URL + currentTeacherCourseId 

    Alamofire.request(currentTeacherDetailedAnalyticsUrl).responseJSON { response in 
     let result = response.result 

     if let dict = result.value as? Dictionary<String, AnyObject> { 

      let firstDateValue = dict["0"] as? Dictionary<String, AnyObject> 
      let secondDateValue = dict["1"] as? Dictionary<String, AnyObject> 
      let thirdDateValue = dict["2"] as? Dictionary<String, AnyObject> 
      let fourthDateValue = dict["3"] as? Dictionary<String, AnyObject> 
      let fifthDateValue = dict["4"] as? Dictionary<String, AnyObject> 

      let firstDateLow = firstDateValue?["numberValuesUnder50"] as! Int 
      let firstDateMiddle = firstDateValue?["numberValuesInMiddle"] as! Int 
      let firstDateHigh = firstDateValue?["numberValuesOver75"] as! Int 

      let secondDateLow = secondDateValue?["numberValuesUnder50"] as! Int 
      let secondDateMiddle = secondDateValue?["numberValuesInMiddle"] as! Int 
      let secondDateHigh = secondDateValue?["numberValuesOver75"] as! Int 

      let thirdDateLow = thirdDateValue?["numberValuesUnder50"] as! Int 
      let thirdDateMiddle = thirdDateValue?["numberValuesInMiddle"] as! Int 
      let thirdDateHigh = thirdDateValue?["numberValuesOver75"] as! Int 

      let fourthDateLow = fourthDateValue?["numberValuesUnder50"] as! Int 
      let fourthDateMiddle = fourthDateValue?["numberValuesInMiddle"] as! Int 
      let fourthDateHigh = fourthDateValue?["numberValuesOver75"] as! Int 

      let fifthDateLow = fifthDateValue?["numberValuesUnder50"] as! Int 
      let fifthDateMiddle = fifthDateValue?["numberValuesInMiddle"] as! Int 
      let fifthDateHigh = fifthDateValue?["numberValuesOver75"] as! Int 

      self.analyticsData = [25, 62, 88, 25, 62, 88, 25, 62, 88, 25, 62, 88, 25, 62, 88] 
    self.analyticsAmountsData = [firstDateLow, firstDateMiddle, firstDateHigh, secondDateLow, secondDateMiddle, secondDateHigh, thirdDateLow, thirdDateMiddle, thirdDateHigh, fourthDateLow, fourthDateMiddle, fourthDateHigh, fifthDateLow, fifthDateMiddle, fifthDateHigh] 
    self.setBubbleChart(dataPoints: self.dateBubble, values: self.analyticsData, amounts: self.analyticsAmountsData) 
     } 
    } 
} 

func setBubbleChart(dataPoints: [Int], values: [Int], amounts: [Int]) { 

    var dataEntries: [BubbleChartDataEntry] = [] 

    for i in 0..<dataPoints.count { 
     let dataEntry = BubbleChartDataEntry(x: Double(dataPoints[i]), y: Double(values[i]), size: (CGFloat(amounts[i]))) 
     dataEntries.append(dataEntry) 
    } 

    let format = NumberFormatter() 
    format.generatesDecimalNumbers = false 
    format.zeroSymbol = "" 
    let formatter = DefaultValueFormatter(formatter: format) 

    let chartDataSet = BubbleChartDataSet(values: dataEntries, label: "") 
    let chartData = BubbleChartData(dataSet: chartDataSet) 

    bubbleView.doubleTapToZoomEnabled = false 
    bubbleView.scaleXEnabled = false 
    bubbleView.scaleYEnabled = false 
    bubbleView.highlightPerTapEnabled = false 
    bubbleView.highlightPerDragEnabled = false 

    let firstLegend = LegendEntry.init(label: "Below 50", form: .default, formSize: CGFloat.nan, formLineWidth: CGFloat.nan, formLineDashPhase: CGFloat.nan, formLineDashLengths: nil, formColor: UIColor.black) 
    let secondLegend = LegendEntry.init(label: "Between 50 and 75", form: .default, formSize: CGFloat.nan, formLineWidth: CGFloat.nan, formLineDashPhase: CGFloat.nan, formLineDashLengths: nil, formColor: UIColor.black) 
    let thirdLegend = LegendEntry.init(label: "Over 75", form: .default, formSize: CGFloat.nan, formLineWidth: CGFloat.nan, formLineDashPhase: CGFloat.nan, formLineDashLengths: nil, formColor: UIColor.black) 

    bubbleView.chartDescription = nil 
    bubbleView.legend.entries = [firstLegend, secondLegend, thirdLegend] 
    bubbleView.data = chartData 

    bubbleView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0) 

    let xAxis: XAxis = bubbleView.xAxis 
    xAxis.drawAxisLineEnabled = false 
    xAxis.drawGridLinesEnabled = false 
    xAxis.drawLabelsEnabled = false 
    xAxis.axisMinimum = 0 
    xAxis.axisMaximum = 10 

    let leftAxis: YAxis = bubbleView.leftAxis 
    leftAxis.drawAxisLineEnabled = false 
    leftAxis.drawGridLinesEnabled = false 
    leftAxis.setLabelCount(2, force: true) 
    leftAxis.axisMinimum = 0 
    leftAxis.axisMaximum = 100 

    let rightAxis: YAxis = bubbleView.rightAxis 
    rightAxis.drawAxisLineEnabled = false 
    rightAxis.drawGridLinesEnabled = false 
    rightAxis.drawLabelsEnabled = false 
} 

Все пузырьки со значением 25 должны быть того же цвета (например, красный), все пузырьки с значение 62 должно быть одного цвета (например, оранжевого), а все пузырьки со значением 88 должны быть одного цвета (например, зеленого).

+0

Ваш понадобится, чтобы показать, что вы уже сделали и некоторый код – RyanM

+0

@RyanM пожалуйста, посмотрите на редактирование – OSX55

ответ

1

Взгляните на мой ответ здесь: Different colors for bars in BarChart depend on value

Но по существу вам нужно написать пользовательскую функцию, которая возвращает UIColor в зависимости от значения.

func setColor(value: Double) -> UIColor{ 

if(value < 30){ 
    return UIColor.red 
} 
else if(value <= 70 && value >= 30){ 
    return UIColor.orange 
} 
else if(value > 70){ 
    return UIColor.green 
} 

else { //In case anything goes wrong 
return UIColor.black 
} 
} 

И затем установить цвета, как этого

chartDataSet.colors.append(setColor(dataValue)) 

Надеется, что это помогает!

+0

Это просто меняет цвет в столбце, а не в строке – OSX55

+0

Можете ли вы показать мне полный код для того, как вы настраиваете ваши пузырьковая диаграмма? –

+0

Пожалуйста, взгляните на редактирование – OSX55