Нарисуйте график в C #, используя zedGraph - PullRequest
3 голосов
/ 12 января 2010

Мне нужно создать график, который имеет следующие свойства:
Ось X предназначена для названий школ.
Ось Y предназначена для названий классов.
В точке (x, y) мне нужно поставить точку, чтобы ее цвет обозначал количество учеников (чем темнее, тем больше учеников).
Я использую ZedGraph (используя этот пример: http://zedgraph.org/wiki/index.php?title=Gradient-By-Value_Demo),, но я не знаю, как поставить точку (и определить ее темный уровень) в правильном положении (сравните ее с названием школы и названием класса) .
Кроме того, я не знаю, как сделать оси X и Y, чтобы показать название школы и название класса.
Как я могу это сделать? (Это НЕ обязательно должно быть в zedGraph).
большое спасибо!

Ответы [ 2 ]

3 голосов
/ 14 января 2010

Проблема в том, что ZedGraph обрабатывает текстовую шкалу немного странным образом. Поэтому практически невозможно правильно отобразить данные, если у вас есть обе шкалы типа «Текст».

Но ты можешь немного обмануть З.Г.

Весь трюк состоит в том, чтобы отображать данные, используя координаты скрытого масштаба, при отображении второго, поддельного масштаба.

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();
1 голос
/ 13 января 2010

Я не совсем так делаю в своем проекте, но я меняю цвет, основываясь на некоторых критериях. Это должно быть довольно легко изменить. Посмотрите на хранилище svn в stochfit.sourceforge.net на графические классы. Возможно, вы также захотите взглянуть на версию zedgraph, которую я имею в моем депо, некоторые проблемы с захватом изображения и исправлением были исправлены.

...