2015-11-10 1 views
2

Salut j'ai besoin d'un graphique en pièce jointe pour ios. J'utilise la bibliothèque ios-Chart (alternative rapide de MPAndroidChart) pour swift. J'ai réussi à obtenir ces points sur le graphique en utilisant le diagramme de dispersion. Mais je ne pouvais pas comprendre comment vais-je connecter les deux points verticaux. Toute aide ou réponse rapide sera appréciable.nuage de points + graphique linéaire dans ios-Charts

mon code actuel est:

func drawChart(dataPoints:[String] , value1 :[Double] , value2:[Double]) 
    { 
     var dataEntries1:[ChartDataEntry] = [] 

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

     var dataEntries2:[ChartDataEntry] = [] 

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

     let dataSet1 = ScatterChartDataSet(yVals: dataEntries1, label: "Value1") 
     dataSet1 .setColor(UIColor.blueColor()) 
     let dataSet2 = ScatterChartDataSet(yVals: dataEntries2 ,label: "Value2") 
     dataSet2.setColor(UIColor.greenColor()) 

     var bloodPressureDataSets = [ScatterChartDataSet]() 
     bloodPressureDataSets.append(dataSet1) 
     bloodPressureDataSets.append(dataSet2) 

     let barChartData = ScatterChartData(xVals: dataPoints, dataSets: bloodPressureDataSets) 

     bpChart.xAxis.labelPosition = .Bottom 
     bpChart.rightAxis.enabled=false 
     //barChart.legend.enabled=false 
     bpChart.descriptionText="" 
     bpChart.data = barChartData 

    } 

Actuellement je peux voir ce type de graphique à l'aide du code ci-dessus. Current Graph

Je veux rejoindre ces deux points verticaux comme le graphique ci-dessous,

enter image description here

+0

Je suis confus quel est votre problème. Vous avez déjà connecté les points verticaux sur le même point x de votre image. – Wingzero

+0

Salut Wingzero, J'ai modifié ma question originale. Je veux avoir un graphique connecté mais en utilisant le code ci-dessus, je peux seulement voir le point sur le graphique mais pas les lignes connectées. Est-il possible que je peux connecter ces deux points sur l'axe vertical? – neena

Répondre

0

un coup d'oeil au tableau de dispersion renderer, drawDataSet fonct. Vous pouvez relier les points là-bas

Mise à jour vers vos commentaires:

d'abord, aller à ScatterChartRenderer et localiser à

internal func drawDataSet(context context: CGContext, dataSet: ScatterChartDataSet)

C'est là on calcule la position et dessiner la forme ici

Il y a une boucle principale:

for (var j = 0, count = Int(min(ceil(CGFloat(entries.count) * _animator.phaseX), CGFloat(entries.count))); j < count; j++) 
{ 
      let e = entries[j] 
      point.x = CGFloat(e.xIndex) 
      point.y = CGFloat(e.value) * phaseY 
      point = CGPointApplyAffineTransform(point, valueToPixelMatrix); 
      ... 
} 

Voici l'itération des entrées de données que vous fournissez dans le dataSet, nous obtenons simplement la valeur xIndex et y ici et la convertissons en coordonnées sur l'écran. Donc, ce que vous pouvez faire est de sous-classer ce moteur de rendu, remplacez cette fonction pour obtenir ce que vous voulez.

par exemple. Vous voulez connecter les entrées de données (le point) pour le même xIndex, vous devez d'abord itérer chaque ensemble de données pour collecter toutes les entrées sur le même xIndex, utiliser CGPointApplyAffineTransform(point, valueToPixelMatrix) pour convertir et utiliser les API CoreGraphics pour dessiner la ligne. Vous n'avez pas besoin de vous soucier des mathématiques, la bibliothèque vous donne déjà l'API pour convertir entre la valeur des données et la valeur de la coordonnée de l'écran. Vous vous concentrez simplement sur la façon de dessiner le graphique.

+0

Salut pouvez-vous me fournir un échantillon de code ou un lien ??? Je n'arrivais pas à utiliser ma tête pour utiliser cette fonction. – neena

+0

réponse mise à jour. Si vous ne comprenez toujours pas ce que je dis, vous devriez d'abord regarder CoreGraphics, puis parcourir le rendu des graphiques linéaires pour comprendre comment tracer les lignes – Wingzero