2017-05-09 14 views
1

私はここで同様の質問を見つけましたが、答えは私を助けませんでした。私は私のデータ構造のためだと思います。iOSチャート3 - プロットを使ってXラベル(日付)を整列する

私は、個々の配列で構成された配列を持っています。これは、その行のプロット点に対して複数の構造体で構成されます。

私の問題は、値/行は正しいが、日付と正しく整列していないことです。以下の例では、日付は5月3日と5月8日に始まります。ここ

は私のコード

struct chartPoint { 
let date:String 
var total:Double 
let exercise:String 
} 
var sets:[[chartPoint]] = [] 

func setupLineChart() { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    var dataSets:[LineChartDataSet] = [] 
    var color:[UIColor] = [UIColor.red,UIColor.blue, UIColor.green,UIColor.red,UIColor.red,UIColor.red,UIColor.red] 
    for i in sets { //Array of array of structs 
     let sort = i.sorted { // sort the internal array by date 
      item1, item2 in 
      let date1 = dateFormatter.date(from:item1.date) 
      let date2 = dateFormatter.date(from:item2.date) 
      return date1!.compare(date2!) == ComparisonResult.orderedAscending 
     } 
     var dataEntries: [ChartDataEntry] = [] 
     for stat in 0...(sort.count - 1) { 
      let date = dateFormatter.date(from:sort[stat].date) 
      let timeIntervalForDate: TimeInterval = date!.timeIntervalSince1970 
      let dataEntry = ChartDataEntry(x: Double(timeIntervalForDate), y: sort[stat].total) 
      dataEntries.append(dataEntry) 
      if stat == (sort.count - 1){ 
       let chartDataSet = LineChartDataSet(values: dataEntries, label: "\(sort[stat].exercise)") 
       chartDataSet.setCircleColor(color[stat]) 
       chartDataSet.setColor(color[stat], alpha: 1.0) 

       chartDataSet.drawValuesEnabled = true 
       dataSets.append(chartDataSet) 
       startChart(dataSets: dataSets) 
      } 
     } 
    } 

} 

func startChart(dataSets:[LineChartDataSet]){ 
    testLineChartView.animate(xAxisDuration: 0.7, yAxisDuration: 0.7) 
    testLineChartView.dragEnabled = true 
    testLineChartView.legend.form = .circle 
    testLineChartView.drawGridBackgroundEnabled = false 

    let xaxis = testLineChartView.xAxis 
    xaxis.valueFormatter = axisFormatDelegate 
    xaxis.labelCount = dataSets.count 
    xaxis.granularityEnabled = true 
    xaxis.granularity = 1.0 
    xaxis.centerAxisLabelsEnabled = true 
    xaxis.avoidFirstLastClippingEnabled = true 
    xaxis.drawLimitLinesBehindDataEnabled = true 

    let rightAxis = testLineChartView.rightAxis 
    rightAxis.enabled = false 

    let leftAxis = testLineChartView.leftAxis 
    leftAxis.drawZeroLineEnabled = true 
    leftAxis.drawGridLinesEnabled = true 
    axisFormatDelegate = self 
    testLineChartView.delegate = self 

    let chartData = LineChartData(dataSets: dataSets) 
    testLineChartView.data = chartData 
    testLineChartView.chartDescription?.text = "" 
} 

extension ChartViewController: IAxisValueFormatter { 
func stringForValue(_ value: Double, axis: AxisBase?) -> String { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "dd MMM" 
    let date = Date(timeIntervalSince1970: value) 
    return dateFormatter.string(from: date) 
} 

}

enter image description here

答えて

0

である私は私のプロジェクトの一つでも同様に、x軸上の日付を使用していますが、私は単純に各日付に変更助けてください文字列を返し、文字列値の配列をIndexAxisValueFormatterに渡します。

testLineChartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: xvalues) 

これがあなたが探しているものでない場合は、「セット」に含まれるサンプルを表示できますか?それから私はあなたのコードを実行することができます。

+0

ていると思います

が、これは(聞かせてx軸= testLineChartView.xAxis xaxis.valueFormatter = axisFormatDelegate)と同じではありませんか? – ThundercatChris

+0

私は、セットが何であるかを示すためにコードを更新しました。それは基本的に構造体の配列で構成されたプロット点の配列を持つ配列です。その方法では、ある行は配列内に複数のプロット点を持つことができ、別の行は独自の配列を持つことができます。 – ThundercatChris

+0

私はまた、(私はあなたが提案したものだと思う)日付文字列の配列を使ってみましたが、再びそれらは整列していません。私は文字列が問題ではないと思う。そのオフセット – ThundercatChris

0

私は、表示されていない単一の値の周りの問題で始めた別のスレッドです。これにはこれも修正されたコードが含まれています。私は、主なポイントは

xaxis.forceLabelsEnabled = true 

iOS Charts - single values not showing Swift

関連する問題