MS图表烛台如何设置尾巴颜色 [英] MS chart candlestick How to set tail colors

查看:167
本文介绍了MS图表烛台如何设置尾巴颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用Visual C#中的mschart开发烛台图. 我现在已经创建了两个图表,并按如下所示创建了图表

I am currently developing a candlestick chart with mschart in visual C#. I have now created two charts and created the charts as follows

问题1.查看顶部的烛台图.我想将每个标尺的尾巴颜色应用为红色或蓝色.

Question 1. View the Candlestick Chart at the top. I would like to apply the tail color of each rod as red or blue.

问题2.查看底部的条形图.我想将红色或蓝色应用于此图表.我想将相同的颜色应用于烛台图表的顶部.我该怎么办?

Question 2. View the bar chart at the bottom. I would like to apply Red or Blue color to this chart. I want to apply the same color to the top of the Candlestick chart. How can I do it ?

[源代码]

DataTable table_ChartData = new DataTable();
table_ChartData.Columns.Add("Id");
table_ChartData.Columns.Add("Open");
table_ChartData.Columns.Add("Close");
table_ChartData.Columns.Add("High");
table_ChartData.Columns.Add("Low");
table_ChartData.Columns.Add("Day");
dataGridView1.DataSource = table_ChartData;  

chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineWidth = 1;
chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineWidth = 1;
chart1.ChartAreas["ChartArea1"].AxisY.Maximum = max;
chart1.ChartAreas["ChartArea1"].AxisY.Minimum = min;

chart1.ChartAreas["ChartArea1"].AxisX.LabelAutoFitStyle = LabelAutoFitStyles.WordWrap;
chart1.ChartAreas["ChartArea1"].AxisX.IsLabelAutoFit = true;
chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Enabled = true;


chart1.Series["Candle"].XValueMember = "Day";            
chart1.Series["Candle"].YValueMembers = "High,Low,Open,Close,Volume";
chart1.Series["Candle"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Date;
chart1.Series["Candle"].CustomProperties = "PriceDownColor=Blue,PriceUpColor=Red";
chart1.Series["Candle"]["OpenCloseStyle"] = "Triangle";
chart1.Series["Candle"]["ShowOpenClose"] = "Both";
chart1.DataSource = table_ChartData;
chart1.DataBind();

////////////////////////////////////////////////////////////

chart2.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineWidth = 1;
chart2.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineWidth = 1;
chart2.ChartAreas["ChartArea1"].AxisY.Maximum = v_max + (v_max / 10);
chart2.ChartAreas["ChartArea1"].AxisY.Minimum = v_min / 2;

chart2.ChartAreas["ChartArea1"].AxisX.LabelAutoFitStyle = LabelAutoFitStyles.WordWrap;
chart2.ChartAreas["ChartArea1"].AxisX.IsLabelAutoFit = true;
chart2.ChartAreas["ChartArea1"].AxisX.LabelStyle.Enabled = true;


chart2.Series["Bar"].XValueMember = "Day";
chart2.Series["Bar"].YValueMembers = "Volume";
chart2.Series["Bar"].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Date;
chart2.Series["Bar"].YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32;
chart2.DataSource = table_ChartData;
chart2.DataBind();

推荐答案

烛台图中有CustomProperties,可以根据趋势自动设置框的颜色:

In a Candlestick Chart there are CustomProperties to automatiaclly set the colors of the boxes, depending on the trend:

someSeries.SetCustomProperty("PriceUpColor", "Green");   
someSeries.SetCustomProperty("PriceDownColor", "Red");

不幸的是,无法设置连接高值和低值的线条的颜色.

Unfortunately there is no way to set the colors of the lines that connect the high- and low-values.

但是,除非您弄乱了其他自定义"属性,并且如果x值有意义,则可以轻松绘制这些线条,并且通过分别绘制顶部和底部,还可以使用不同的颜色.

But, unless you have messed with other Custom attributes and if the x-values are meaningful, you can easily draw those lines, and by drawing the top and the bottom part separately you can also use different colors.

这里是一个例子:

private void chart6_PostPaint(object sender, ChartPaintEventArgs e)
{
    ChartArea ca = chart6.ChartAreas[0];
    Series s = chart6.Series[0];
    Pen hiPen = Pens.Green;
    Pen loPen = Pens.Red;

    if (e.ChartElement == s)
    foreach (DataPoint dp in s.Points)
    {
        float x       = (float)ca.AxisX.ValueToPixelPosition(dp.XValue);
        float y_hi    = (float)ca.AxisY.ValueToPixelPosition(dp.YValues[0]);
        float y_low   = (float)ca.AxisY.ValueToPixelPosition(dp.YValues[1]);
        float y_open  = (float)ca.AxisY.ValueToPixelPosition(dp.YValues[2]);
        float y_close = (float)ca.AxisY.ValueToPixelPosition(dp.YValues[3]);

        e.ChartGraphics.Graphics.DrawLine(hiPen, x, y_low, x, Math.Min(y_close, y_open));
        e.ChartGraphics.Graphics.DrawLine(loPen, x, y_hi,  x, Math.Max(y_close, y_open));
    }
}

要为第二张图表的点设置颜色,您需要遍历这些点,因为那里的颜色

To set Colors for the 2nd Chart's points you need to loop over the points as there Colors cannot be set in binding.

代码很简单:

void SetColors(Series candles, Series columns)
{
    for (int i = 0; i < candles.Points.Count; i++)
    {
        DataPoint dp = candles.Points[i];
        columns.Points[i].Color =
            dp.YValues[2] > dp.YValues[3] ? Color.Red :  Color.Green;
    }
}

绑定后调用它!

结果:

请注意,为避免看到原始线条闪耀,我们将BorderWidth设置为0:

Note that to avoid seeing the original lines shine through we set the BorderWidth to 0:

someSeries.BorderWidth = 0;

这篇关于MS图表烛台如何设置尾巴颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆