2014-11-04 3 views
0

У меня есть диаграмма на C#, где я привязываю значения к ней. У меня есть два разных массива со значениями и сопоставление их с одной диаграммой. Теперь я хотел отобразить одну часть диаграммы (со значениями из первого массива) в другом цвете. Как это сделать? рисунок двух диаграмм вызывает ошибки, поэтому я хотел сделать это таким образом. Ниже приведена часть кода:C# изменение цвета в диаграмме

String[] x_axis = _temp_date1.Concat(_date).ToArray(); 
Double[] y_axis = _temp_data.Concat(_value).ToArray(); 

chart1.Series["Chart"].Points.DataBindXY(x_axis, y_axis); 
chart1.Series["Chart"].ChartType = SeriesChartType.Spline; 

chart1.Series["Chart"].Points[0].Color = System.Drawing.Color.Red; 
chart1.Series["Chart"].Points[1].Color = System.Drawing.Color.Green; 

Часть с цветом не работает.

Так что скажем, у меня есть два массива для значений x (date1 и date2) и два массива для значений y (data1 и data2). Теперь я объединять массивы date1 и date2 и объединять массивы data1 и data2. Я привязываю их к своему графику. Теперь я хотел бы отобразить часть графика в другом цвете, откуда берутся мои значения из массива date1/data1. Длина массива может измениться, поскольку данные считываются из файла csv.

+0

Это WinForms ?? – TaW

+0

Да - отредактировано, что – uzi42tmp

+0

ОК. Теперь давайте посмотрим: перед тем, как попасть в цвета: у вас, похоже, проблемы с объединением двух наборов данных? Чтобы сделать это правильно, у вас есть два варианта: у вас может быть два ChartAreas на одном и том же графике, или вы можете иметь две серии точек данных. Что вам нужно? Области будут раздельными или наложенными? [Вот пример диаграммы] (http://i.msdn.microsoft.com/dynimg/IC523407.png) с двумя ChartAreas и несколькими рядами в каждом. – TaW

ответ

0

в свойствах управления «s charts:

Series ->Member[n] ->Color ->Red, и так далее

ИЛИ

chart1.Series["Chart"].Color = Color.Red 

Редактировать (Согласно обсуждению в комментариях, вы можете попробовать что-то вроде:

Скажем, у нас есть массив doubles, и мы хотим, чтобы построить его каждую часть в другом цвете:

Double[] data; // my data 
int i=0; 

chart1.Series["Chart"].Points[0].Clear(); // initialize the chart 
chart1.Series[""Chart"].Color = Color.Red; // initial color 

for(i=0; i < data.Length; i++) 
{ 
    if(i >= data.Length/2) 
    chart1.Series[""Chart"].Color = Color.Green; // use other color after certain data # 

    chart1.Series["Chart"].Points.AddXY(i, data[i]); 
} 
+0

Оба не работают. Второй не находит серию [0], и когда я меняю ее на Point, я получаю «OutOfRangeException». Как я могу изменить его в зависимости от длины массива? – uzi42tmp

+0

@ uzi42tmp: вы не очень много описываете работу 'do not work'! могу ли я посмотреть, как вы определяете свой график? – chouaib

+0

Я просто не могу найти недвижимость. Но проблема в том, что я не хочу менять его вручную, потому что оси x и y могут меняться, и я хотел бы покрасить его часть в зависимости от длины массива. Значения взяты из двух массивов, объединенных вместе, и они показывают когерентный граф – uzi42tmp

2

Вот пример, который показывает, как: в одной и той же Chart и два Series два отдельных ChartAreas в том же ChartArea. Выберите который вы хотите:

// cleanup before we start 
chart1.ChartAreas.Clear(); 
chart1.Series.Clear(); 
// two areas one on top the other below 
chart1.ChartAreas.Add("area1"); 
chart1.ChartAreas.Add("area2"); 
// three series 
chart1.Series.Add("series1"); 
chart1.Series.Add("series2"); 
chart1.Series.Add("series3"); 
// we assign two series to the bottom area 
chart1.Series["series1"].ChartArea = "area1"; 
chart1.Series["series2"].ChartArea = "area2"; 
chart1.Series["series3"].ChartArea = "area2"; 
// all series are of type spline 
chart1.Series["series1"].ChartType = SeriesChartType.Spline; 
chart1.Series["series2"].ChartType = SeriesChartType.Spline; 
chart1.Series["series3"].ChartType = SeriesChartType.Spline; 
// each has a spearate color 
chart1.Series["series1"].Color = Color.Red; 
chart1.Series["series2"].Color = Color.Blue; 
chart1.Series["series3"].Color = Color.Green; 
// now we add a few points 
chart1.Series["series1"].Points.AddXY(1, 100); 
chart1.Series["series1"].Points.AddXY(2, 400); 
chart1.Series["series1"].Points.AddXY(3, 200); 
chart1.Series["series1"].Points.AddXY(4, 300); 

chart1.Series["series2"].Points.AddXY(1, 120); 
chart1.Series["series2"].Points.AddXY(2, 420); 
chart1.Series["series2"].Points.AddXY(3, 290); 
chart1.Series["series2"].Points.AddXY(4, 390); 

chart1.Series["series3"].Points.AddXY(1, 220); 
chart1.Series["series3"].Points.AddXY(2, 320); 
chart1.Series["series3"].Points.AddXY(3, 690); 
chart1.Series["series3"].Points.AddXY(4, 190); 

// we can even paint a part of the spline curve in a different color 
// to be precise: the part up to the point: 
chart1.Series["series3"].Points[1].Color = Color.HotPink; 
chart1.Series["series3"].Points[2].Color = Color.Orange; 

Вот результат:

enter image description here

Теперь, если вы просто хотите, чтобы изменить цвет точек после определенного количества очков, которые вы могли бы сделать это так :

int start = x_axis.Length; 
for (int i = start ; i < chart1.Series[0].Points.Count; i++) 
    chart1.Series[0].Points[i].Color = Color.Green; 

Обратите внимание, что вам нужно установить цвет каждый точка, которая должна иметь другой цвет п введите цвет диаграммы по умолчанию!

+0

Хорошо, теперь у меня есть две отдельные области с графиком в каждом. Могу я собрать их вместе, чтобы они не появлялись друг на друга, а бок о бок? что мне нужно – uzi42tmp

+0

Нет. Если это то, что вы хотите, не добавляйте 2-ю зону, просто добавьте вторую «Серию», как в нижней области! – TaW

+0

Графы накладываются тогда. Значения оси y только что приняты из первого массива и оба графика перекрываются.Я предпочел бы размещать области бок о бок.Это возможно? - Первый массив имеет даты на оси х до 20 апреля, а второй массив начинается с 21 апреля. ust берет даты от Array1 и помещает второй график на нем – uzi42tmp

Смежные вопросы