C# XValueIndexed= True Hatası

Katılım
20 Eyl 2006
Mesajlar
440
Puanları
1
Yaş
40
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);
}
}
 
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
 
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?
 
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.
 
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);
}
}
 
çok daha profesyonel bir çözüm olmuş ,bizleri de bilgilendirdiğiniz için teşekkürler
 

Forum istatistikleri

Konular
130,167
Mesajlar
933,937
Kullanıcılar
453,294
Son üye
MEGATRO

Yeni konular

Geri
Üst