2017-07-24 109 views
0

我试图做出与此类似IOS-图表合并图表:酒吧去图表

jom8o

我要去有4个BarChartDataSets分组东西过去右轴,和2个LineChartDataSets,每个数据集有7个数据点,用户可以添加或随意取出这些数据集

杆似乎分组细,线图表显示了所有7个点

但作为添加更多BarChartDataSets到图表,该酒吧去吧在图表的右侧,折线图保持不变,这里是我以一个LineChartDataSet开始的图像序列,然后逐个添加BarChartDataSets,其中一些小节的值为0,因此很难看清楚该组中,查找0标签底部

enter image description hereenter image description hereenter image description hereenter image description hereenter image description here

如何才能停止从去关闭图表右边的酒吧?

下面是代码:

//get data and values from DataMOs in the activeFeeds 
      var lineChartDataSets = [LineChartDataSet]() 
      var barChartDataSets = [BarChartDataSet]() 
      for (key, dayValuesArray) in valuesByFeed { 
       var barChartDataEntries = [BarChartDataEntry]() 
       var lineChartDataEntries = [ChartDataEntry]() 
       var lineChartDataSet: LineChartDataSet! 
       var barChartDataSet: BarChartDataSet! 
       var dataEntry: ChartDataEntry 

       for (index, value) in (dayValuesArray?.enumerated())! { 
        //create line chart for Demand and Prod feeds 
        //create bar chart for every other feed 
        if key == "Demand" || key == "Prod"{ 
         dataEntry = ChartDataEntry(x: Double(self.activeFeeds.count * index), y: Double(value)!) 
         lineChartDataEntries.append(dataEntry) 
        } else { 
         dataEntry = BarChartDataEntry(x: Double(self.activeFeeds.count * index), y: Double(value)!) 
         barChartDataEntries.append(dataEntry as! BarChartDataEntry) 
        } 
       } 

       //create line chart data set for Demand and Prod feeds 
       //create bar chart data set for every other feed 
       if key == "Demand" || key == "Prod"{ 
        lineChartDataSet = LineChartDataSet(values: lineChartDataEntries, label: key) 
        lineChartDataSet.drawCirclesEnabled = false 
       } else { 
        barChartDataSet = BarChartDataSet(values: barChartDataEntries, label: key) 
       } 

       switch key { 
       case "Solar": 
        barChartDataSet.setColors(UIColor.orange.withAlphaComponent(1.0)) 
        barChartDataSet.valueTextColor = UIColor.white 
        break 
       case "Wind": 
        barChartDataSet.setColors(UIColor.blue.withAlphaComponent(1.0)) 
        barChartDataSet.valueTextColor = UIColor.white 
        break 
       case "Battery": 
        barChartDataSet.setColors(UIColor.green.withAlphaComponent(1.0)) 
        barChartDataSet.valueTextColor = UIColor.white 
        break 
       case "Gen": 
        barChartDataSet.setColors(UIColor.red.withAlphaComponent(1.0)) 
        barChartDataSet.valueTextColor = UIColor.white 
        break 
       case "Demand": 
        lineChartDataSet.setColors(UIColor.purple.withAlphaComponent(1.0)) 
        lineChartDataSet.valueTextColor = UIColor.white 
        lineChartDataSet.drawFilledEnabled = true 
        lineChartDataSet.fillColor = UIColor.purple.withAlphaComponent(0.8) 
        break 
       case "Prod": 
        lineChartDataSet.setColors(UIColor.magenta.withAlphaComponent(1.0)) 
        lineChartDataSet.valueTextColor = UIColor.white 
        lineChartDataSet.drawFilledEnabled = true 
        lineChartDataSet.fillColor = UIColor.magenta.withAlphaComponent(0.8) 
        break 
       default: 
        break 
       } 

       //append to correct data set array 
       if key == "Demand" || key == "Prod"{ 
        lineChartDataSets.append(lineChartDataSet) 
       } else { 
        barChartDataSets.append(barChartDataSet) 
       } 
      } 

      //set chart data 
      let chartData = CombinedChartData() 
      chartData.barData = BarChartData(dataSets: barChartDataSets) 
      chartData.lineData = LineChartData(dataSets: lineChartDataSets) 
      let activeFeedsCount = self.activeFeeds.count 
      if activeFeedsCount > 0 { 
       self.combinedChartView.data = chartData 
       if chartData.barData.dataSetCount > 1 { 
        self.combinedChartView.barData?.groupBars(fromX: 0, groupSpace: 1.0, barSpace: 0.5) 
        self.combinedChartView.notifyDataSetChanged() 
       } 
      } else { 
       self.combinedChartView.data = CombinedChartData() 
       self.combinedChartView.noDataText = "No Feeds To Show" 
      } 
+0

使用setVisibleXRange可以解决这个问题,看我的这个答案:https://stackoverflow.com/a/44852890/5881884如果不解决这个问题,可以大家分享一些代码所以我可以重现这个问题? – DevB2F

+0

似乎没有工作,我添加了即时通讯代码,它的基本数据点为过去7天,将有7组4条,2条折线图,每个数据点有7个数据点 –

+0

然后我建议更改粒度:https://stackoverflow.com/a/44856224/5881884 – DevB2F

回答

0

我无法与0标签重现该问题,但它是可以使用combinedChart.xAxis.axisMaximum,以确保你可以看到所有的酒吧正确的。

let activeFeeds = 6 
func dataSet() { 

    combinedChart.isUserInteractionEnabled = true 
    combinedChart.scaleXEnabled = false 
    combinedChart.scaleYEnabled = false 

    combinedChart.dragEnabled = true 
    //combinedChart.xAxis.axisMinimum = 0.0 
    combinedChart.xAxis.axisMaximum = 100.0 

    //get data and values from DataMOs in the activeFeeds 
    var lineChartDataSets = [LineChartDataSet]() 
    var barChartDataSets = [BarChartDataSet]() 
    combinedChart.setVisibleXRange(minXRange: 0.0, maxXRange: 26.0) 

    let arr1 = [17000,16500,16800,16700,17900,17100,18000] 
    let arr2 = [17000,17500,16900,16800,17200,17105,17000] 

    let valuesByFeed = ["Solar":arr1, "Wind": arr2, "Battery": arr1, "Gen":arr1, "Demand":arr1, "Prod":arr1] 

    for (key, dayValuesArray) in valuesByFeed { 
     var barChartDataEntries = [BarChartDataEntry]() 
     var lineChartDataEntries = [ChartDataEntry]() 
     var lineChartDataSet: LineChartDataSet! 
     var barChartDataSet: BarChartDataSet! 
     var dataEntry: ChartDataEntry 

     for (index, value) in (dayValuesArray.enumerated()) { 
      //create line chart for Demand and Prod feeds 
      //create bar chart for every other feed 
      if key == "Demand" || key == "Prod"{ 
       dataEntry = ChartDataEntry(x: Double(self.activeFeeds * index), y: Double(value)) 
       lineChartDataEntries.append(dataEntry) 
      } else { 
       dataEntry = BarChartDataEntry(x: Double(self.activeFeeds * index), y: Double(value)) 
       barChartDataEntries.append(dataEntry as! BarChartDataEntry) 
      } 
     } 


     //create line chart data set for Demand and Prod feeds 
     //create bar chart data set for every other feed 
     if key == "Demand" || key == "Prod"{ 
      lineChartDataSet = LineChartDataSet(values: lineChartDataEntries, label: key) 
      lineChartDataSet.drawCirclesEnabled = false 
     } else { 
      barChartDataSet = BarChartDataSet(values: barChartDataEntries, label: key) 
     } 

     switch key { 
     case "Solar": 
      print("case solar") 
      barChartDataSet.setColors(UIColor.orange.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 
     case "Wind": 
      print("case wind") 
      barChartDataSet.setColors(UIColor.blue.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 
     case "Battery": 
      print("case battery") 
      barChartDataSet.setColors(UIColor.green.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 
     case "Gen": 
      print("case gen") 

      barChartDataSet.setColors(UIColor.red.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 
     case "Gen2": 
      print("case gen") 

      barChartDataSet.setColors(UIColor.red.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 
     case "Gen3": 
      print("case gen") 

      barChartDataSet.setColors(UIColor.red.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 
     case "Gen4": 
      print("case gen") 

      barChartDataSet.setColors(UIColor.red.withAlphaComponent(1.0)) 
      barChartDataSet.valueTextColor = UIColor.white 
      break 


     case "Demand": 
      print("case demand") 

      lineChartDataSet.setColors(UIColor.purple.withAlphaComponent(1.0)) 
      lineChartDataSet.valueTextColor = UIColor.white 
      lineChartDataSet.drawFilledEnabled = true 
      lineChartDataSet.fillColor = UIColor.purple.withAlphaComponent(0.8) 
      break 
     case "Prod": 
      print("case prod") 

      lineChartDataSet.setColors(UIColor.magenta.withAlphaComponent(1.0)) 
      lineChartDataSet.valueTextColor = UIColor.white 
      lineChartDataSet.drawFilledEnabled = true 
      lineChartDataSet.fillColor = UIColor.magenta.withAlphaComponent(0.8) 
      break 
     default: 
      break 
     } 

     //append to correct data set array 
     if key == "Demand" || key == "Prod"{ 
      lineChartDataSets.append(lineChartDataSet) 
     } else { 
      barChartDataSets.append(barChartDataSet) 
     } 
    } 

    //set chart data 
    let chartData = CombinedChartData() 
    print("bar count: \(barChartDataSets.count)") 
    print("line count: \(lineChartDataSets.count)") 
    chartData.barData = BarChartData(dataSets: barChartDataSets) 
    chartData.lineData = LineChartData(dataSets: lineChartDataSets) 
    let activeFeedsCount = self.activeFeeds 
    if activeFeedsCount > 0 { 
     self.combinedChart.data = chartData 
     if chartData.barData.dataSetCount > 1 { 
      self.combinedChart.barData?.groupBars(fromX: 0, groupSpace: 1.0, barSpace: 0.5) 
      self.combinedChart.notifyDataSetChanged() 
     } 
    } else { 
     self.combinedChart.data = CombinedChartData() 
     self.combinedChart.noDataText = "No Feeds To Show" 
    } 


} 

enter image description here

+0

我用fitToScreen()组合使用这个谢谢 –