簡體   English   中英

圖表X軸移位

[英]chart X axis shifting

我在嘗試使用x軸移動創建ac#圖表時遇到了麻煩。

我想要的是添加一個新的Y值,讓x軸向左移動,刪除第一個數據點。

我可以在右手邊添加點數,

 DataPoint dp2 = new DataPoint(x, rnd.Next(100));
 chart1.Series[0].Points.Add(dp2);
 x++;

我可以刪除左側的第一個點

chart1.Series[0].Points.RemoveAt(0);

但如果我嘗試兩者都不起作用,它會在圖表的開頭添加空格並從右側移出而不是留在圖形區域內?

DataPoint dp2 = new DataPoint(x, rnd.Next(100));
chart1.Series[0].Points.RemoveAt(0);
chart1.Series[0].Points.Add(dp2);
x++;

我的問題的完整演示: - (制作圖表,3個按鈕和3個計時器,將我的代碼粘貼到form1.cs的頂部,然后將按鈕(鼠標單擊)和計時器(刻度1000ms)事件連接到我的代碼事件處理程序。)

using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

namespace test_chart2
{
    public partial class Form1 : Form
    {
        double x = 16;
        Random rnd = new Random();
        public Form1()
        {
            InitializeComponent();


            DrawToGraph1();

        }

        private void DrawToGraph1()
        {
            chart1.Series[0].Points.Clear();
            for (int g = 5; g <= 15; g++)
            {
                DataPoint dp = new DataPoint(g, rnd.Next(100));
                chart1.Series[0].Points.Add(dp);
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            DataPoint dp2 = new DataPoint(x, rnd.Next(100));
            chart1.Series[0].Points.Add(dp2);
            x++;
        }
        private void timer2_Tick(object sender, EventArgs e)
        {
            chart1.Series[0].Points.RemoveAt(0);
        }

        private void timer3_Tick(object sender, EventArgs e)
        {
            DataPoint dp2 = new DataPoint(x, rnd.Next(100));
            chart1.Series[0].Points.RemoveAt(0);
            chart1.Series[0].Points.Add(dp2);
            x++;
        }
        private void button2_MouseClick(object sender, MouseEventArgs e)
        {
            timer1.Enabled = false;
            timer2.Enabled = true;
            timer3.Enabled = false;
        }
        private void button3_MouseClick(object sender, MouseEventArgs e)
        {
            timer1.Enabled = false;
            timer2.Enabled = false;
            timer3.Enabled = true;
        }
        private void button1_MouseClick(object sender, MouseEventArgs e)
        {
            timer1.Enabled = true;
            timer2.Enabled = false;
            timer3.Enabled = false;
        }
    }
}

如果我使用它確實有效

series1.IsXValueIndexed = true;

但我不能使用這個,因為我的項目有一個時間X軸,當我使用這個選項它不會產生一個很好的時間線(軸標簽沒有像往常一樣四舍五入到最接近的小時),它也會導致對齊問題我的輔助X軸,顯示圖表頂部的日期。

請試試這個並告訴我發生了什么:

private void timer3_Tick(object sender, EventArgs e)
{
  DataPoint dp2 = new DataPoint(x, rnd.Next(100));
  Series mySeries = chart1.Series[0];
  chart1.Series.Clear();
  mySeries.Points.RemoveAt(0);
  mySeries.Points.Add(dp2);
  chart1.Series.Add(mySeries);
  x++;
}

也就是說,您可以嘗試刪除系列,修改它,然后將其添加回圖表。 我無法自己運行它,因為我無法輕松地在Visual Studio中重建您的項目。 希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM