2017-09-25 3 views
1

J'essaie de déterminer si je peux trouver un graphique existant dans l'application C# winforms.Diagramme avec des valeurs y non scalées

J'ai plusieurs entier entrées a, b, c ... et à la fin du traitement, j'ai obtenu des résultats avec une large gamme de valeurs telles que 12, 342, 445879, etc.

sur le graphique que je veux voir seulement hiérarchie d'une taille supérieure à inférieure sans distance d'échelle équivalente entre les extrémités de ligne supérieure et inférieure. Juste l'escalier par la courbe descendante pour chaque entrée. Donc, deux choses sont nécessaires, si un tel outil graphique existe déjà, est un tri de la séquence de haut en bas avec les noms attachés aux lignes et l'affichage de la valeur non mise à l'échelle dans le rapport entre les uns et les autres.

Par exemple, j'ai entrées:

int a = 12989; 
int b = 324; 
int c = 23; 
int d = 12; 
int e = 3; 

et les résultats du deuxième processus:

int a = 4; 
int b = 25; 
int c = 1; 
int d = 4; 
int e = 14; 

J'ai essayé d'utiliser différents graphiques dans la liste des VS,

private void Size(int a, int b) 
    { 
     this.chart1.Series["Series1"].Points.AddXY("a1", a); 
     this.chart1.Series["Series1"].Points.AddXY("a2", b); 
    } 

mais semble comme j'ai besoin de choses différentes.

résultats souhaités est ici:

unscaled columns

+0

Pourquoi avez-vous revérifié ma description? La bonne image n'est pas le résultat souhaité?!?! – TaW

Répondre

2

Oui, cela est possible.

Pour les valeurs x, il existe en fait une propriété SeriesIsXValueIndexed pour appliquer un affichage non échelonné. Cependant, il n'y a pas une telle chose pour les valeurs y.

(La raison en est sans doute que les valeurs y unscale sont pas vraiment utiles, car ils sans doute induire en erreur l'utilisateur sur les données .. (.. qui peuvent ou peuvent ne pas être vrai de valeurs x; valeurs x contenant, par exemple, codes postaux ou d'autres ID doivent être affichés sans agrandissement!))

pour vous contourner devez définir le x et y des valeurs à une valeur de comptage et set la Labels de chaque DataPointexplicitement aux valeurs réelles que vous avez.

Exemple:

enter image description here

// create an odered list of data: 
List<double> data = new List<double>(); 
for (int i = 0; i < 12; i++) data.Add(rnd.Next(100) * rnd.Next(i * 5)); 
data = data.OrderByDescending(x => x).ToList(); 

// now add with dummy x and y-values: 
Series s = chart1.Series[0]; 
for (int i = 0; i < data.Count; i++) 
{ 
    int p = s.Points.AddXY(i, data.Count - i); // dummy values 
    DataPoint dp = s.Points[p]; 
    dp.Label = data[i] +"";  // real value, formatted 
    dp.Tag= data[i];    // real value 

} 

Pour se débarrasser des axes qui ne peuvent pas montrer ay valeurs meanigful, les désactiver:

chart1.ChartAreas[0].AxisX.Enabled = AxisEnabled.False; 
chart1.ChartAreas[0].AxisY.Enabled = AxisEnabled.False; 

Plus style:

s.SetCustomProperty("PixelPointWidth","15"); 
s.Color = Color.DarkSlateGray; 

Notez que les valeurs y ne sont vraiment que des factices, si vous avez besoin d'y accéder, vous devrez utiliser le Labels et les convertir d'une chaîne à un autre.Notez également que si elles sont double ou floats ces chaînes seront soit terriblement longues ou formatées en une chaîne courte. Pour préserver les valeurs réelles, vous pouvez les stocker en plus dans le champ Tag de chaque DataPoint ..