C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■102495 / 1階層)  折れ線グラフ
□投稿者/ 魔界の仮面弁士 (3704回)-(2023/11/01(Wed) 21:34:58)
No102494 (たか さん) に返信
> その時X軸の表示も右から左に秒数が移動しているのですが
> X軸の一番左を0で一番右は指定した数値で固定したいのです

現状、Series.Points.AddXY が繰り返されることで、
Series.Points.Count が延々と増加していますね。


cycletime の値は固定的ですか? それとも表示中に変動しますか?

固定的であれば、チャート側は、横軸として表示される件数だけを保有する形として、
データの蓄積と表示を分けた方が良いかもしれません。

X 値は 0〜秒数 の数値のみとし、
Y 値だけを順にシフトしてみる。

//private OpcClient client;
private DateTime startTime;
private Timer timer;
private Random random;
private Chart upperChart;
private Chart lowerChart;

int cycletime = 6;

private List<double> upperList;
private List<double> lowerList;

public Form1()
{
  InitializeComponent();
  labelValue.Text = cycletime.ToString();

  random = new Random();

  IEnumerable<double> doubles = Enumerable.Repeat(double.NaN, cycletime + 1);

  upperChart = CreateChart(upperList = new List<double>(doubles));
  upperChart.Location = new System.Drawing.Point(280, 250);
  this.Controls.Add(upperChart);

  lowerChart = CreateChart(lowerList = new List<double>(doubles));
  lowerChart.Location = new System.Drawing.Point(280, 530);
  this.Controls.Add(lowerChart);
}

private Chart CreateChart(IList<double> doubles)
{
  Chart chart = new Chart();
  chart.Size = new System.Drawing.Size(1200, 250);
  chart.ChartAreas.Add(new ChartArea());
  chart.Series.Add("DataSeries");
  chart.Series["DataSeries"].ChartType = SeriesChartType.Line;
  chart.Series["DataSeries"].BorderWidth = 2;
  chart.ChartAreas[0].AxisX.LabelStyle.Enabled = true;
  for (int i = 0; i < doubles.Count; i++)
  {
    chart.Series["DataSeries"].Points.AddXY(i, doubles[i]);
  }
  chart.ChartAreas[0].AxisX.Minimum = 0;
  chart.ChartAreas[0].AxisX.Maximum = doubles.Count - 1;
  chart.ChartAreas[0].AxisY.Minimum = 0;
  chart.ChartAreas[0].AxisY.Maximum = 100;
  return chart;
}

private void SlideData(Chart chart, List<double> list, double newData)
{
  list.Add(newData);
  list.RemoveAt(0);

  chart.Series["DataSeries"].Points.Clear();
  for (int x = 0; x < list.Count; x++)
  {
    chart.Series["DataSeries"].Points.AddXY(x, list[x]);
  }
}

private void Timer_Tick(object sender, EventArgs e)
{
  int upperData = random.Next(40, 80);
  int lowerData = random.Next(0, 100);

  SlideData(upperChart, upperList, upperData);
  SlideData(lowerChart, lowerList, lowerData);
}
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←折れ線グラフ /たか →Re[2]: 折れ線グラフ /たか
 
上記関連ツリー

折れ線グラフ / たか (23/11/01(Wed) 19:09) #102494
折れ線グラフ / 魔界の仮面弁士 (23/11/01(Wed) 21:34) #102495 ←Now
  └ Re[2]: 折れ線グラフ / たか (23/11/02(Thu) 11:02) #102496 解決済み
    └ Re[3]: 折れ線グラフ / たか (23/11/22(Wed) 19:47) #102590
      └ Re[4]: 折れ線グラフ / 魔界の仮面弁士 (23/11/24(Fri) 11:13) #102602

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信