C# XValueIndexed= True Hatası

  • Konbuyu başlatan elektronik67
  • Başlangıç tarihi
Katılım
20 Eyl 2006
Mesajlar
427
Puanları
1
Yaş
37
Merhaba 3 serili bir tane real time chart yapmaya çalışıyorum. Ancak bana durmadan aşağıdaki hattayı veriyor. bu konuyu nasıl çözerim yardımlarınızı rica ederim.
Cannot display indexed series (XValueIndexed = true) on the same axis if they are not aligned.Series 'PET2' and Series 'CAN' must be aligned to perform the operation. The series currently have a different number of data points.

public Form1() {
lineChart.ChartAreas[0].AxisY.Title = "Bottle/Hour";
lineChart.ChartAreas[0].AxisY.TitleFont = new Font("Arial", 12.0f, FontStyle.Bold);
lineChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss" + ((char)160) + "\n";
lineChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes; // X ekseninde gösterilecek zamanı dakika cinsinden göster
lineChart.ChartAreas[0].AxisX.Interval = 1; // ÖNEMLİ - 1 dk da bir X ekseninde zamanı göster
lineChart.ChartAreas[0].AxisX.ScaleView.Size = 25;
lineChart.ChartAreas[0].AxisX.ScaleView.Position = lineChart.Series[0].Points.Count - 25;
lineChart.ChartAreas[0].AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
lineChart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
lineChart.ChartAreas[0].CursorX.AutoScroll = true;
lineChart.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 15;
lineChart.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
lineChart.Series[0].IsXValueIndexed = true;
lineChart.Series[0].XValueType = ChartValueType.Time;
lineChart.Series[1].IsXValueIndexed = true;
lineChart.Series[1].XValueType = ChartValueType.Time;
lineChart.Series[2].IsXValueIndexed = true;
lineChart.Series[2].XValueType = ChartValueType.Time;
}
private void lineChartValues()
{
while (true)
{
if (lineChart.IsHandleCreated)
{
Invoke((MethodInvoker)delegate { UpdatelineChartValue(); });
}
Thread.Sleep(1000); // da bir değer al grafiktte gösterilen değer bu 1000 = 1 sn'dir. dolayısıyla 1 dk için 10000 yapmak gerekiyor.
}
}
private void UpdatelineChartValue()
{
try
{
lineChart.Series["PET1"].Points.AddXY(DateTime.Now.ToOADate(), _Pet1Values.LineSpeed);
lineChart.Series["PET2"].Points.AddXY(DateTime.Now.ToOADate(), _Pet2Values.LineSpeed);
lineChart.Series["CAN"].Points.AddXY(DateTime.Now.ToOADate(), _CanValues.LineSpeed);
//lineChart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, "PET1, PET2, CAN");
maksimum++;
lineChart.ChartAreas[0].AxisX.ScaleView.Zoom(maksimum - 25, maksimum); // ÖNEMLİ
Update();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}
 
Katılım
15 Ara 2009
Mesajlar
287
Puanları
1
Yaş
38
sanırım sen sadece 1 tane chart için tanımlama yapmışsın diğerlerini o yüzden kabul etmiyor pet2 ve can serilerini ;

lineChart.ChartAreas[0].AxisY.Title = "Bottle/Hour";
lineChart.ChartAreas[0].AxisY.TitleFont = new Font("Arial", 12.0f, FontStyle.Bold);
lineChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss" + ((char)160) + "\n";
lineChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes; // X ekseninde gösterilecek zamanı dakika cinsinden göster
lineChart.ChartAreas[0].AxisX.Interval = 1; // ÖNEMLİ - 1 dk da bir X ekseninde zamanı göster
lineChart.ChartAreas[0].AxisX.ScaleView.Size = 25;
lineChart.ChartAreas[0].AxisX.ScaleView.Position = lineChart.Series[0].Points.Count - 25;
lineChart.ChartAreas[0].AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
lineChart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
lineChart.ChartAreas[0].CursorX.AutoScroll = true;
lineChart.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 15;
lineChart.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

lineChart.ChartAreas[0] gibi lineChart.ChartAreas[1] ve lineChart.ChartAreas[2] kullanman gerekiyor sanırım
 
Konu Sah
Katılım
20 Eyl 2006
Mesajlar
427
Puanları
1
Yaş
37
Merhaba cevabınız için teşekkür ederim. Tek bir tane grafikte (SP Line Chart) 3 adet makinanın hızını göstermek istiyorum. tek grafikte de 3 tane seri için 3 tane chartarea mı kullanmak gerekiyor?
 
Katılım
15 Ara 2009
Mesajlar
287
Puanları
1
Yaş
38
evet sanırım tanımlamadığınız için pet2 ve can serilerininden ötürü hata veriyor tanımlayıp gerekli atamaları yapmanız gerekecek

lineChart.ChartAreas[0].AxisY.Title = "Bottle/Hour";
lineChart.ChartAreas[0].AxisY.TitleFont = new Font("Arial", 12.0f, FontStyle.Bold);
lineChart.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss" + ((char)160) + "\n";
lineChart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes; // X ekseninde gösterilecek zamanı dakika cinsinden göster
ChartineChart.ChartAreas[0].AxisX.Interval = 1; // ÖNEMLİ - 1 dk da bir X ekseninde zamanı göster
lineChart.ChartAreas[0].AxisX.ScaleView.Size = 25;
lineChart.ChartAreas[0].AxisX.ScaleView.Position = lineChart.Series[0].Points.Count - 25;
lineChart.ChartAreas[0].AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
lineChart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
lineChart.ChartAreas[0].CursorX.AutoScroll = true;
lineChart.ChartAreas[0].AxisX.ScaleView.SmallScrollSize = 15;
lineChart.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

bunları lineChart[1] ve lineChart[2] içinde yapmanız gerekiyor , chart değerlerinin doğru değer aralığında olmaması yani başlangıç ayarlamalarını yapmamanızdan kaynaklanıyor,yukarıda verdiğim tanımlamaları diğer iki lineChart içinde yaparsanız sorun çözülecektir.
 
Konu Sah
Katılım
20 Eyl 2006
Mesajlar
427
Puanları
1
Yaş
37
Desteğiniz için çok teşekkürr ederim. Söylediğiniz yöntemide denedim. Ancak sorun çözülmedi. Bende aşağıdaki gibi bir çözüm buldum. sizlerinde bilginiz olması amacıyla paylaşmak istemedim.

// Aşağı taraf bütün serileri hizalandırmak amacıyla yapılmıştır.
var allValues = lineChart.Series.SelectMany(s => s.Points)
.Select(x => x.XValue).Distinct().ToList();
foreach (Series series in lineChart.Series)
{
int px = 0; //insertion index
foreach (double d in allValues)
{
var p = series.Points.FirstOrDefault(x => x.XValue == d);
if (p == null) // this value is missing
{
DataPoint dp = new DataPoint(d, double.NaN);
dp.IsEmpty = true;
series.Points.Insert(px, dp);
}
px++;
}
}
Tam kod aşağıdaki gibidir.

private void UpdatelineChartValue()
{
try
{
lineChart.Series["PET1"].Points.AddXY(DateTime.Now.ToOADate(), _Pet1Values.LineSpeed);
lineChart.Series["PET2"].Points.AddXY(DateTime.Now.ToOADate(), _Pet2Values.LineSpeed);
lineChart.Series["CAN"].Points.AddXY(DateTime.Now.ToOADate(), _CanValues.LineSpeed);
//lineChart.DataManipulator.InsertEmptyPoints(1, IntervalType.Number, "PET1, PET2, CAN");
//=============================================================================================
// Aşağı taraf bütün serileri hizalandırmak amacıyla yapılmıştır.
var allValues = lineChart.Series.SelectMany(s => s.Points)
.Select(x => x.XValue).Distinct().ToList();
foreach (Series series in lineChart.Series)
{
int px = 0; //insertion index
foreach (double d in allValues)
{
var p = series.Points.FirstOrDefault(x => x.XValue == d);
if (p == null) // this value is missing
{
DataPoint dp = new DataPoint(d, double.NaN);
dp.IsEmpty = true;
series.Points.Insert(px, dp);
}
px++;
}
}
//=============================================================================================
maksimum++;
for (int i = 0; i < lineChart.ChartAreas.Count; i++)
{
lineChart.ChartAreas.AxisX.ScaleView.Zoom(maksimum - 25, maksimum); // ÖNEMLİ
}
Update();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}
 
Katılım
15 Ara 2009
Mesajlar
287
Puanları
1
Yaş
38
çok daha profesyonel bir çözüm olmuş ,bizleri de bilgilendirdiğiniz için teşekkürler
 

Forum istatistikleri

Konular
117,749
Mesajlar
829,855
Kullanıcılar
428,558
Son üye
Harunn06

Yeni konular

Üst