MinMeng Ответов: 3

zedgraph. Как рисовать точечные графики, но с разным цветом для каждой точки


Я хочу, чтобы функция AddLine

LineItem myCurve = myPane1.AddCurve("", x_axis_array, Y_AxixArray, Color.Black, SymbolType.Diamond);

мог бы иметь возможность:

LineItem myCurve = myPane1.AddCurve("", x_axis_array, Y_AxixArray,COLOR_ARRAY[],  SymbolType.Diamond);


Надеюсь, ты получишь то, что я хочу сделать.

Любой ответ будет высоко оценен.!

3 Ответов

Рейтинг:
23

MinMeng

   Color currentColor = myColorArr[0];<br />
               //int startidx = 0;<br />
               for (int i = 0; i < datacount; i++)<br />
               {<br />
                   if (currentColor == myColorArr[i])<br />
                   {<br />
                       list_x.Add(list_x[i]);<br />
                       list_y.Add(list_y[i]); <br />
                   }<br />
                   else<br />
                   {<br />
                       list_x.Add(list_x[i]);<br />
                       list_y.Add(list_y[i]);<br />
<br />
                       LineItem myCurve1 = myPane1.AddCurve("", list_x.ToArray(), list_y.ToArray(), myColorArr[i-1],SymbolType.Diamond);<br />
                       myCurve1.Line.IsVisible = true; // was false for scatter plot<br />
                       myCurve1.Symbol.Fill = new Fill(myColorArr[i - 1]);<br />
                       list_x.Clear();<br />
                       list_y.Clear();<br />
                       currentColor = myColorArr[i];<br />
                       list_x.Add(list_x[i]);<br />
                       list_y.Add(list_y[i]); <br />
                   }<br />
               }



Спасибо за вашу помощь!


[no name]

Хороший Выбор. И мои 5 тоже.

Рейтинг:
2

Maximilien

(Я предполагаю, что вы говорите об открытом источнике zedgraph[^])

Вы можете скачать код и внести изменения самостоятельно; и если это сработает, отправьте изменения в проект zedgraph.

Кроме этого, я не знаю зедграфа.


М.


MinMeng

Спасибо! Да, это zedgraph с открытым исходным кодом. Я ищу способ, который не должен заходить так далеко. Кто-нибудь знает приемы достижения той же цели с помощью существующих API? ( нарисуйте одну кривую с разными цветами - можно указать цвет для каждой отдельной точки данных)

TRK3

Вы хотите, чтобы сама кривая меняла цвет или только символы на точках были разных цветов? Если это просто символы, разве вы не можете нарисовать их отдельно?

MinMeng

Просто символы на точках должны быть разного цвета. Это хорошая идея. Но может работать только для небольшого объема данных. В моем случае он легко может иметь >10000 точек данных. каждая точка данных может быть любого из 7 различных цветов. для хранения всех данных потребуется много массивов данных. (как я знаю,zedgraph нуждается во всех массивах в памяти, то есть мы не могли бы просто использовать один массив данных для обработки этого-поправьте меня, если я ошибаюсь).

MinMeng

Сделал кое-какие тесты. Похоже, все в порядке. Я использовал одну и ту же структуру данных списка для хранения данных одного и того же цвета. см. пример кода ниже:

Большое спасибо за вашу помощь в ответах на мои вопросы!! Я буду тестировать больше на больших объемах данных, чтобы увидеть, если он все еще работает достаточно хорошо - не уверен в скорости выполнения для больших объемов данных.

Color currentColor = myColorArr[0];
for (int i = 0; i < datacount; i++)
{
if (currentColor == myColorArr[i])
{
list_x.Add(myXArr[i]);
list_y.Add(myYArr[i]);
}
еще
{
list_x.Add(myXArr[i]);
list_y.Add(myYArr[i]);

LineItem myCurve1 = myPane1.AddCurve("", list_x.Метод toArray(), list_y.ToArray(), myColorArr[i-1],SymbolType.Diamond);
myCurve1.Line.IsVisible = true; // was false для точечной диаграммы
myCurve1.Символ.Fill = новая заливка(myColorArr[i - 1]);

list_x.Понятно();
list_y.Четкий();
currentColor = myColorArr[i];
list_x.Add(myXArr[i]);
list_y.Add(myYArr[i]);
}
}

Рейтинг:
0

AlvinZeng

Нет необходимости группировать точки с одинаковым цветом,см. пример ниже

GraphPane gp=ZedGraphControl.GraphPane;
PointPairList pointXY=new PointPairList();
pointXY.Add(1,1);
LineItem point=gp.AddCurve("Label",pointXY,YourColor,SymbolType.Circle);


затем будет нанесен символ круга, вы можете заполнить символ круга своим целевым цветом


H.Brydon

Вопрос из 2011 года - почему вы отвечаете на него сейчас?