C# Chart的使用

这个ChartHelper来自这里

ChartHelper的添加

using System.Windows.Forms.DataVisualization.Charting;
public class ChartHelper
    {
        /// <summary>
        /// Name:添加序列
        /// </summary>
        /// <param name="chart">图表对象</param>
        /// <param name="seriesName">序列名称</param>
        /// <param name="chartType">图表类型</param>
        /// <param name="color">颜色</param>
        /// <param name="markColor">标记点颜色</param>
        /// <param name="showValue">是否显示数值</param>
        public static void AddSeries(Chart chart, string seriesName, SeriesChartType chartType, Color color, Color markColor, bool showValue = false)
        {
            chart.Series.Add(seriesName);
            chart.Series[seriesName].ChartType = chartType;
            chart.Series[seriesName].Color = color;
            if (showValue)
            {
                chart.Series[seriesName].IsValueShownAsLabel = true;
                chart.Series[seriesName].MarkerStyle = MarkerStyle.Circle;
                chart.Series[seriesName].MarkerColor = markColor;
                chart.Series[seriesName].LabelForeColor = color;
                chart.Series[seriesName].LabelAngle = -90;
            }
        }

        /// <summary>
        /// Name:设置标题
        /// </summary>
        /// <param name="chart">图表对象</param>
        /// <param name="chartName">图表名称</param>
        public static void SetTitle(Chart chart, string chartName, Font font, Docking docking, Color foreColor)
        {
            chart.Titles.Add(chartName);
            chart.Titles[0].Font = font;
            chart.Titles[0].Docking = docking;
            chart.Titles[0].ForeColor = foreColor;
        }

        /// <summary>
        /// Name:设置样式
        /// </summary>
        /// <param name="chart">图表对象</param>
        /// <param name="backColor">背景颜色</param>
        /// <param name="foreColor">字体颜色</param>
        public static void SetStyle(Chart chart, Color backColor, Color foreColor)
        {
            chart.BackColor = backColor;
            chart.ChartAreas[0].BackColor = backColor;
            chart.ForeColor = Color.Red;
        }

        /// <summary>
        /// Name:设置图例
        /// </summary>
        /// <param name="chart">图表对象</param>
        /// <param name="docking">停靠位置</param>
        /// <param name="align">对齐方式</param>
        /// <param name="backColor">背景颜色</param>
        /// <param name="foreColor">字体颜色</param>
        public static void SetLegend(Chart chart, Docking docking, StringAlignment align, Color backColor, Color foreColor)
        {
            chart.Legends[0].Docking = docking;
            chart.Legends[0].Alignment = align;
            chart.Legends[0].BackColor = backColor;
            chart.Legends[0].ForeColor = foreColor;
        }

        /// <summary>
        /// Name:设置XY轴
        /// </summary>
        /// <param name="chart">图表对象</param>
        /// <param name="xTitle">X轴标题</param>
        /// <param name="yTitle">Y轴标题</param>
        /// <param name="align">坐标轴标题对齐方式</param>
        /// <param name="foreColor">坐标轴字体颜色</param>
        /// <param name="lineColor">坐标轴颜色</param>
        /// <param name="arrowStyle">坐标轴箭头样式</param>
        /// <param name="xInterval">X轴的间距</param>
        /// <param name="yInterval">Y轴的间距</param>
        public static void SetXY(Chart chart, string xTitle, string yTitle, StringAlignment align, Color foreColor, Color lineColor, AxisArrowStyle arrowStyle, double xInterval, double yInterval)
        {
            chart.ChartAreas[0].AxisX.Title = xTitle;
            chart.ChartAreas[0].AxisY.Title = yTitle;
            chart.ChartAreas[0].AxisX.TitleAlignment = align;
            chart.ChartAreas[0].AxisY.TitleAlignment = align;
            chart.ChartAreas[0].AxisX.TitleForeColor = foreColor;
            chart.ChartAreas[0].AxisY.TitleForeColor = foreColor;
            chart.ChartAreas[0].AxisX.LabelStyle = new LabelStyle() { ForeColor = foreColor };
            chart.ChartAreas[0].AxisY.LabelStyle = new LabelStyle() { ForeColor = foreColor };
            chart.ChartAreas[0].AxisX.LineColor = lineColor;
            chart.ChartAreas[0].AxisY.LineColor = lineColor;
            chart.ChartAreas[0].AxisX.ArrowStyle = arrowStyle;
            chart.ChartAreas[0].AxisY.ArrowStyle = arrowStyle;
            chart.ChartAreas[0].AxisX.Interval = xInterval;
            chart.ChartAreas[0].AxisY.Interval = yInterval;
            chart.ChartAreas[0].AxisX.LabelStyle.Angle = 90;//x轴标签竖着显示
            chart.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount;
            chart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Days;
            
        }

        /// <summary>
        /// Name:设置网格
        /// </summary>
        /// <param name="chart">图表对象</param>
        /// <param name="lineColor">网格线颜色</param>
        /// <param name="xInterval">X轴网格的间距</param>
        /// <param name="yInterval">Y轴网格的间距</param>
        public static void SetMajorGrid(Chart chart, Color lineColor, double xInterval, double yInterval)
        {
            chart.ChartAreas[0].AxisX.MajorGrid.LineColor = lineColor;
            chart.ChartAreas[0].AxisY.MajorGrid.LineColor = lineColor;
            chart.ChartAreas[0].AxisX.MajorGrid.Interval = xInterval;
            chart.ChartAreas[0].AxisY.MajorGrid.Interval = yInterval;
            chart.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
            chart.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
        }
    }

ChartHelper 的使用

chart.Series.Clear();
ChartHelper.AddSeries(chart, "实际净值", SeriesChartType.Spline, Color.Red, Color.Red);//第一条线
ChartHelper.AddSeries(chart, "基准指数", SeriesChartType.Spline, Color.Green, Color.Green);//第二条线
//ChartHelper.SetTitle(chart, "净值图", new Font("微软雅黑", 12), Docking.Bottom, Color.White);
ChartHelper.SetStyle(chart, Color.Transparent, Color.Black);
ChartHelper.SetLegend(chart, Docking.Bottom, StringAlignment.Center, Color.Transparent, Color.Black);
//chart.Legends[0].Enabled = false;//取消图例
if (dt1 == null) return;

//获取数据中的最大值和最小值,用于设置Y轴的大小
decimal max = Convert.ToDecimal( dt1.Rows[0][1]);
decimal min = max;                           
foreach (DataRow dr in dt1.Rows)             
{                                            
	max = Math.Max(max,Convert.ToDecimal( dr[1]));
	min = Math.Min(min, Convert.ToDecimal(dr[1]));
}                                            
foreach (DataRow dr in dt2.Rows)             
{                                            
	max = Math.Max(max, Convert.ToDecimal(dr[1]));
	min = Math.Min(min, Convert.ToDecimal(dr[1]));
}

decimal d = (max-min) * 0.1m;
max += d;//最大值增加10%
min -= d;
chart.ChartAreas[0].AxisY.Maximum = Convert.ToDouble(Math.Round(max, 2));//设置Y轴最大值,数值四舍五入,保留两位小数
chart.ChartAreas[0].AxisY.Minimum = Convert.ToDouble(Math.Round(min, 2));//设置Y轴最小值


int count = dt1.Rows.Count;
double xInterval = count < 30?1:count / 25;//x轴的间距,数据量过大的处理,以免x轴过于密集
double yInterval = Convert.ToDouble(((chart.ChartAreas[0].AxisY.Maximum - chart.ChartAreas[0].AxisY.Minimum) / 10).ToString("0.00"));//y轴的间距
//设置xy轴
ChartHelper.SetXY(chart, "", "", StringAlignment.Far, Color.Black, Color.Black, AxisArrowStyle.None,xInterval,yInterval);
//设置网格线
ChartHelper.SetMajorGrid(chart, Color.Gray, xInterval,yInterval);

foreach (DataRow dr in dt1.Rows)
{
   //第一条线添加数据
   chart.Series[0].Points.AddXY(dr[0].ToString(), dr[1].ToString());
}
foreach (DataRow dr in dt2.Rows)
{
	//第二条线添加数据
	chart.Series[1].Points.AddXY(dr[0].ToString(), dr[1].ToString());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值