MS图表显示错误的X轴值

时间:2017-10-19 10:38:34

标签: c# winforms charts mschart

我有一个带有两个按钮的图表控件。首先调用烛台图表。第二个调用条形图。如果我只调用其中一个,一切都很好。但是如果我单击条形图的按钮,它会从中获取X轴值烛台图。圆柱图X轴应为0-15。

他们看起来如何: https://imgur.com/a/IICYh

首先加载formload烛台图表。一切都还好。 单击条形图的“关闭/打开”按钮时,将显示烛台图表中的X轴值。

点击“关闭/打开”后,单击“烛台”图表的“图表”按钮。 现在缺少Y轴值。

调用图表的方法:

 public void CandleStickChartMain()
    {
        // clear the chart
        if (ChartCandle.Series.Count > 0) this.ChartCandle.Series[0].Points.Clear();
        this.ChartCandle.Series.Clear();
        this.ChartCandle.Titles.Clear();


        //Clear Grid
        ChartCandle.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineWidth = 0;
        ChartCandle.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineWidth = 0;

        //Series
        ChartCandle.Series.Add("Date");
        ChartCandle.Series["Date"].YValuesPerPoint = 4;
        ChartCandle.Series["Date"].XValueMember = "Day";
        ChartCandle.Series["Date"].YValueMembers = "High,Low,Open,Close";
        ChartCandle.Series["Date"].XValueType = ChartValueType.DateTime;
        ChartCandle.Series["Date"].CustomProperties = "PriceDownColor=Red,PriceUpColor=Green";
        ChartCandle.Series["Date"]["OpenCloseStyle"] = "Triangle";
        ChartCandle.Series["Date"]["ShowOpenClose"] = "Both";
        ChartCandle.DataManipulator.IsStartFromFirst = true;
        ChartCandle.Series["Date"].ChartType = SeriesChartType.Candlestick;

        //Axis Y Minimum 
        ChartCandle.ChartAreas["ChartArea1"].AxisY.Minimum = Open.Min() - (Open.Min() / 50);

        //Data Binding
        ChartCandle.DataSource = ChartDataTable;
        ChartCandle.DataBind();

    }


public void BarChart()
    {

        // clear the chart
        if (ChartCandle.Series.Count > 0) this.ChartCandle.Series[0].Points.Clear();
        this.ChartCandle.Series.Clear();
        this.ChartCandle.Titles.Clear();

        // Set palette
        this.ChartCandle.Palette = ChartColorPalette.Excel;

        // Set title
        this.ChartCandle.Titles.Add("Price Data Open/Close");

        //Add series
        //Series Open
        var seriesOpen = ChartCandle.Series.Add("Open");
        for (int i = 0; i < Open.Length; i++)
        {

            seriesOpen.Points.Add(Open[i]);
        }
        //Series Close
        var SeriesClose = ChartCandle.Series.Add("Close");
        for (int i = 0; i < Close.Length; i++)
        {
            SeriesClose.Points.Add(Close[i]);
        }

        var chartAreaOpenClose = ChartCandle.ChartAreas[seriesOpen.ChartArea];

        // Zoom and scroll options
        // set view range to [0,max]
        chartAreaOpenClose.AxisX.Minimum = 0;
        chartAreaOpenClose.AxisX.Maximum = Open.Length + 1;

        // enable autoscroll
        chartAreaOpenClose.CursorX.AutoScroll = true;

        // let's zoom to [0,blockSize] (e.g. [0,100])
        chartAreaOpenClose.AxisX.ScaleView.Zoomable = true;
        chartAreaOpenClose.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
        int position = 0;
        int size = 15;
        chartAreaOpenClose.AxisX.ScaleView.Zoom(position, size);

        // disable zoom-reset button (only scrollbar's arrows are available)
        chartAreaOpenClose.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;

        // set scrollbar small change to blockSize (e.g. 100)
        chartAreaOpenClose.AxisX.ScaleView.SmallScrollSize = 15;

        // additional
        ChartCandle.ChartAreas[0].AxisY.IsStartedFromZero = false;

    }

1 个答案:

答案 0 :(得分:-1)

我没有看到你取消数据绑定。也许你应该设置ChartCandle.DataSource = null

<强>更新

使用两个不同的ChartAreas

可以轻松解决您的问题
chart1.ChartAreas.Clear();
chart1.ChartAreas.Add("CandleChart");

chart1.Series.Clear();
chart1.Titles.Clear();

我将此添加到每个方法的开头,方法中的每个ChartArea引用都引用了正确的名称:

chart1.ChartAreas["CandleChart"].AxisX.MajorGrid.LineWidth = 0;
chart1.ChartAreas["CandleChart"].AxisY.MajorGrid.LineWidth = 0; //etc.

在我这样做之后,一切都按预期工作。按钮在图形之间正确切换。