mschart 多Y轴,设置图例位置

ExpandedBlockStart.gif View Code
  private  bool DrawChartImage(ChartData chartData,  string chartPath)
        {
             if (chartData ==  null || chartData.isHasData ==  false)
                 return  false;
             int axisXInterval =  1;
             bool multiY =  false;

             #region 图表横轴interval

             if (chartData.categories.Length >  0)
            {
                 string category = chartData.categories[ 0];
                 if (Regex.IsMatch(category,  " ^\\d{4}$ ")) // 年统计图表
                    axisXInterval =  1;
                 else
                     if (chartData.categories.Length.Equals( 12) || chartData.categories.Length.Equals( 15))
                        axisXInterval =  1;
                     else
                         if (chartData.categories.Length >=  28 && chartData.categories.Length <=  31 || chartData.categories.Length.Equals( 34))
                            axisXInterval =  1;
                         else
                            axisXInterval =  24;
            }

             #endregion

             string chartName = chartData.name;
            multiY = chartData.units.Length >  1 && chartName.Contains( " & ");
             string unit =  string.Empty;
            unit = chartData.units[ 0];
            JavaScriptSerializer jserializer =  new JavaScriptSerializer();
             int seriesCount =  0;
            Chart Chart =  new Chart();
            Chart.Width =  1000;
            Chart.Height =  500;
            Title title =  new Title(chartName, Docking.Top,  new System.Drawing.Font( " Trebuchet MS "12, System.Drawing.FontStyle.Regular), System.Drawing.Color.FromArgb( 2659105));
            Chart.Titles.Add(title);
            Chart.ChartAreas.Add( " ChartAreas 1 ");
            Chart.ChartAreas[ 0].AxisX.Interval = axisXInterval;
            Chart.ChartAreas[ 0].AxisY.IntervalAutoMode = IntervalAutoMode.VariableCount;
            Chart.ChartAreas[ 0].AxisY2.IntervalAutoMode = IntervalAutoMode.VariableCount;
             // Chart.ChartAreas[0].AxisX.MajorTickMark.Interval = 2; // 次要辅助线间隔
            Chart.ChartAreas[ 0].AxisX.IntervalOffset =  0;
             // Chart.ChartAreas[0].AxisX.MinorGrid.LineWidth = 0;
            Chart.ChartAreas[ 0].AxisX.MajorGrid.LineWidth =  0;
            Chart.ChartAreas[ 0].AxisY.MajorGrid.LineWidth =  1;
            Chart.ChartAreas[ 0].AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb( 209208206);
            Chart.ChartAreas[ 0].AxisY2.MajorGrid.LineColor = System.Drawing.Color.FromArgb( 209208206);
            Chart.ChartAreas[ 0].AxisY.Title =  string.Format( " [{0}] ", unit);
            Chart.ChartAreas[ 0].AxisX.LabelStyle.Angle = - 90; // 横坐标字符倾斜角度

             #region 图例配置

            Legend legend =  new Legend();
            legend.Alignment = StringAlignment.Center;
            legend.Docking = Docking.Bottom;
            legend.Name =  string.Format( " Legends {0} "0);
            Chart.Legends.Add(legend);

             #endregion

            Chart.SuppressExceptions =  true;
             while (seriesCount++ < chartData.series.Length)
            {

                 #region 设置图表类型

                SeriesChartType seriesChartType = SeriesChartType.Column;

                 string chartType = chartData.series[seriesCount -  1].type;
                 if (chartType.ToLower().Equals( " area "))
                    seriesChartType = SeriesChartType.Area;
                 if (chartType.ToLower().Equals( " line "))
                    seriesChartType = SeriesChartType.Line;
                 if (chartType.ToLower().Equals( " column "))
                    seriesChartType = SeriesChartType.Column;

                 #endregion

                 #region 设置图表颜色

                 string color = chartData.series[seriesCount -  1].color;
                 string r = color.Substring( 12);
                 string g = color.Substring( 32);
                 string b = color.Substring( 52);

                 #endregion


                IList<KeyValuePair< stringfloat?>> outputData =  new List<KeyValuePair< stringfloat?>>();
                 for ( int i =  0; i < chartData.categories.Length; i++)
                    outputData.Add( new KeyValuePair< stringfloat?>(chartData.categories[i], chartData.series[seriesCount -  1].data[i]));
                Chart.Series.Add( string.Format( " Series {0} ", seriesCount -  1));
                Chart.Series[seriesCount -  1].Points.DataBind(outputData,  " key "" value """);
                Chart.Series[seriesCount -  1].Color = System.Drawing.Color.FromArgb(Convert.ToInt32(r,  16), Convert.ToInt32(g,  16), Convert.ToInt32(b,  16));
                Chart.Series[seriesCount -  1].XValueType = ChartValueType.String;
                Chart.Series[seriesCount -  1].ChartType = seriesChartType;
                 #region 图例

                 // 图例文字
                Chart.Series[seriesCount -  1].LegendText = chartData.series[seriesCount -  1].name;


                 #endregion

                 if (multiY)
                {
                    Chart.Series[seriesCount -  1].YAxisType = seriesCount %  2 ==  1 ? AxisType.Primary : AxisType.Secondary;
                }

            }
            Chart.BorderSkin.SkinStyle = BorderSkinStyle.None;
            Chart.SaveImage(chartPath);
             return  true;
        }

转载于:https://www.cnblogs.com/luckychbo/archive/2012/02/09/2343675.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值