2010-01-12 6 views
3

Je dois créer un graphique qui a les propriétés suivantes:
L'axe X est pour les noms d'écoles.
L'axe Y est pour les noms de classes. In Point (x, y) Je dois mettre un point dont la couleur représentera le nombre d'élèves (plus sombre signifie plus d'élèves).
J'utilise ZedGraph (en utilisant cet exemple: http://zedgraph.org/wiki/index.php?title=Gradient-By-Value_Demo), mais je ne sais pas comment mettre le point (et déterminer son niveau d'obscurité) dans la bonne position (comparez-le au nom de l'école et au nom de la classe).
Aussi, je ne sais pas comment faire les axes X et Y pour montrer le nom de l'école et le nom de la classe.
Comment puis-je faire cela? (Il ne doit PAS être dans zedGraph).
merci beaucoup!Dessiner un graphique en C# en utilisant zedGraph

Répondre

2

Le problème est que ZedGraph traite une échelle de type Texte d'une manière un peu étrange. Il est donc presque impossible d'afficher correctement les données lorsque vous avez les deux échelles de type Texte.

Mais vous pouvez tromper ZG un peu.

L'astuce consiste à afficher les données en utilisant les coordonnées de l'échelle cachée, tout en affichant la deuxième, fausse échelle.

string[] schools = { "A", "B", "C" }; 
string[] classes = { "cl. 1", "cl. 2", "cl. 3" }; 

var pane = zg1.GraphPane; 
Random x = new Random(); 

// Hide the basic scale, show the second with text labels 
pane.X2Axis.Type = AxisType.Text; 
pane.X2Axis.IsVisible = true; 
pane.Y2Axis.Type = AxisType.Text; 
pane.Y2Axis.IsVisible = true; 
pane.XAxis.Scale.IsVisible = false; 
pane.YAxis.Scale.IsVisible = false; 

pane.X2Axis.Scale.TextLabels = schools; 
pane.Y2Axis.Scale.TextLabels = classes; 

// Main problem - synchronize the scales correctly    
pane.XAxis.Scale.Min = -0.5; 
pane.XAxis.Scale.Max = schools.Count() - 0.5; 
pane.YAxis.Scale.Min = -0.5; 
pane.YAxis.Scale.Max = classes.Count() - 0.5; 

pane.YAxis.MajorGrid.IsZeroLine = false; 

// generate some fake data 
PointPairList list = new PointPairList(); 
    for(int i=0;i<schools.Count();i++) 
     for (int j = 0; j < classes.Count(); j++) 
     { 
      list.Add(new PointPair(i, j, x.Next(30))); 
     } 

    var pointsCurve = pane.AddCurve("", list, Color.Transparent); 
    pointsCurve.Line.IsVisible = false; 
    // Create your own scale of colors. 
    pointsCurve.Symbol.Fill = new Fill(new Color[] { Color.Blue, Color.Green, Color.Red }); 
    pointsCurve.Symbol.Fill.Type = FillType.GradientByZ; 
    pointsCurve.Symbol.Fill.RangeMin = 0; 
    pointsCurve.Symbol.Fill.RangeMax = 30; 
    pointsCurve.Symbol.Type = SymbolType.Circle; 

      pane.AxisChange(); 
      zg1.Refresh(); 
+0

Gacek pouvez-vous me aider à la question http://stackoverflow.com/questions/10222782/zedgraph-smoothly-move-y2axis-with-chart-line Merci. – amaranth

+0

Wow, désolé, je n'ai pas travaillé avec zedgraph depuis plus d'un an maintenant, je ne me souviens pas beaucoup ... Mais je vais essayer et jeter un oeil – Gacek

0

Je ne fais pas tout à fait ceci dans mon projet, mais je change la couleur basée sur quelques critères. Ce devrait être assez facile à modifier. Regardez le dépôt svn dans stochfit.sourceforge.net dans les classes graphiques. Vous pouvez aussi jeter un oeil à la version de zedgraph que j'ai dans mon dépôt, une capture d'image et un bug de mise à l'échelle ont été corrigés.

Questions connexes