Dev之ChartControl控件(二)— 绘制多重坐标图形

有时针对一个ChartControl控件可能要设置多个Y轴,进行显示:

以下举个例子:如在一个Chart中显示多个指标项如图:

首先,读取数据,并对左边的Y轴最大和最小值进行设定

IndexSeriesControler indexControl = new IndexSeriesControler();
            IEnumerable<IndexModel> ieModel= indexControl.GetDate(dateB,dateE,indexName);//读取的数据集
            decimal max=  ieModel.Max(x => x.IndexValue);
            decimal min = ieModel.Min(x => x.IndexValue);

其次,生成Series,并添加到charControl控件;

 Series series = new Series(indexName, ViewType.Spline);
            if (num != 0)
            {
                lstSeries.Add(series);
            }

             foreach (IndexModel model in ieModel)
             {
                 series.Points.Add(new SeriesPoint(model.PublishDate, new double[] { (double)model.IndexValue }));
             }

             series.View = splineSeriesView1;

            this.chartControl.Series.Add(series);

            this.chartControl.Legend.Visible = false;

再次,创建图标的第二坐标;

效果如图:

 public void GetAxisY()
        {
            for (int i = 0; i < lstSeries.Count; i++)
            {
                lstSeries[i].View.Color = lstColor[i];
                CreateAxisY(lstSeries[i]);
            }
        }

        /// <summary>
        /// 创建图表的第二坐标系
        /// </summary>
        /// <param name="series">Series对象</param>
        /// <returns></returns>
        private SecondaryAxisY CreateAxisY(Series series)
        {
            SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
            ((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);
            ((LineSeriesView)series.View).AxisY = myAxis;
            myAxis.Title.Text = series.Name;
            myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
            myAxis.Title.Visible = true; //显示标题
            myAxis.Title.Font = new Font("宋体", 9.0f);

            Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致

            myAxis.Title.TextColor = color;
            myAxis.Label.TextColor = color;
            myAxis.Color = color;

            return myAxis;
        }

完整代码如下:

 public partial class ChartControlExtension : UserControl
    {
        public ChartControlExtension()
        {
            InitializeComponent();
            ChartTitle chartTitle=new ChartTitle();
            chartTitle.Text="新干线";
            chartTitle.TextColor=System.Drawing.Color.Black;
            this.chartControl.Titles.Add(chartTitle);
            lstColor.Add(Color.Red);
            lstColor.Add(Color.Black);
            lstColor.Add(Color.Blue);
            lstColor.Add(Color.Brown);
        }
        public bool IsRange { set; get; }
        public List<Series> lstSeries = new List<Series>();
        public List<Color> lstColor = new List<Color>();
        int num = 0;
        public void GetDate(DateTime dateB, DateTime dateE, string indexName)
        {
            IndexSeriesControler indexControl = new IndexSeriesControler();
            IEnumerable<IndexModel> ieModel= indexControl.GetDate(dateB,dateE,indexName);
            decimal max=  ieModel.Max(x => x.IndexValue);
            decimal min = ieModel.Min(x => x.IndexValue);
           // this.chartControl.Series.Clear();

            Series series = new Series(indexName, ViewType.Spline);
            if (num != 0)
            {
                lstSeries.Add(series);
            }

             foreach (IndexModel model in ieModel)
             {
                 series.Points.Add(new SeriesPoint(model.PublishDate, new double[] { (double)model.IndexValue }));
             }           this.chartControl.Series.Add(series);
            this.chartControl.Legend.Visible = false;
            //this.chartControl.cut
            if (num == 0)
            {
                XYDiagram diag = (XYDiagram)this.chartControl.Diagram;
                diag.AxisY.VisualRange.MaxValue = max;
                diag.AxisY.VisualRange.MinValue = min-10;
            }

            //this.IsRange = true;
            num++;

        }

        public void GetAxisY()
        {
            for (int i = 0; i < lstSeries.Count; i++)
            {
                lstSeries[i].View.Color = lstColor[i];
                CreateAxisY(lstSeries[i]);
            }
        }

        /// <summary>
        /// 创建图表的第二坐标系
        /// </summary>
        /// <param name="series">Series对象</param>
        /// <returns></returns>
        private SecondaryAxisY CreateAxisY(Series series)
        {
            SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
            ((XYDiagram)chartControl.Diagram).SecondaryAxesY.Add(myAxis);
            ((LineSeriesView)series.View).AxisY = myAxis;
            myAxis.Title.Text = series.Name;
            myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
            myAxis.Title.Visible = true; //显示标题
            myAxis.Title.Font = new Font("宋体", 9.0f);

            Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致

            myAxis.Title.TextColor = color;
            myAxis.Label.TextColor = color;
            myAxis.Color = color;

            return myAxis;
        }
}

调用方法:

 private void tolBtnSearch_Click(object sender, EventArgs e)
        {
            chartControlExtension1.GetDate(datPBegin.Value,datPEnd.Value,"铁矿石指数");
            chartControlExtension1.GetDate(datPBegin.Value, datPEnd.Value, "钢材指数");
            chartControlExtension1.GetDate(datPBegin.Value, datPEnd.Value, "铁矿指数");
            chartControlExtension1.GetDate(datPBegin.Value, datPEnd.Value, "焦炭指数");
            chartControlExtension1.GetAxisY();

        }

其打印方法可用:

  this.chartControl.ShowPrintPreview(DevExpress.XtraCharts.Printing.PrintSizeMode.Zoom);
时间: 2024-10-10 22:12:52

Dev之ChartControl控件(二)— 绘制多重坐标图形的相关文章

DevExpress控件使用之多重坐标图形的绘制 z

有时候,基于对一些年份.月份的统计,需要集成多个数值指标进行分析,因此就需要把多种数据放到一个图形里面展现,也成为多重坐标轴,多重坐标轴可以是多个X轴,也可以是Y轴,它们的处理方式类似.本文通过一个例子对这个方面进行介绍,希望给大家有一个很好的参考. 首先我们先来看一个图形例子,我们可以从里面图形的右边看到有多个Y轴,一个Y轴代表一个指标分析,X轴为月份. 上图是采用了DevExpress的ChartControl图表控件来实现的,这个控件提供了SecondaryAxisY对象来处理多重坐标的问

Dev之ChartControl控件

ChartControl控件主要包括Chart Title,Legend,Annotations,Diagram,Series五部分:如图: 1.  用RangeControl控件控制ChartControl的显示范围,当用RangeControl时,把RangeControl.Clent属性设为用例,如”chartControl1”, RangeControl会自动绑定到ChartControl 2.  RangeControlOptions控制RangeControl中的Series显示类型

VC控件自绘制三步曲

http://blog.csdn.net/lijie45655/article/details/6362441 实现自定义绘制的三步曲 既然您已经了解了绘制控件可用的各种选项(包括使用自定义绘制的好处),那么,让我们来看看实现一个自定义绘制控件需要的三个主要步骤. 执行一个 NM_CUSTOMDRAW 消息处理程序. 指定处理所需的绘制阶段. 筛选特定的绘制阶段(在这些阶段中,您需要加入自己的特定于控件的绘制代码). 执行一个NM_CUSTOMDRAW 消息处理程序 当需要绘制一个公共控件时,M

如果写一个android桌面滑动切换屏幕的控件(二)

在viewgroup执行: public void snapToScreen(int whichScreen) { whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1)); boolean changingScreens = whichScreen != mCurrentScreen; mNextScreen = whichScreen; int mScrollX = this.getScrollX(); fin

IOS的一个带动画的多项选择的控件(二)

然后我们来写:TypeSelectView 这个比较简单,我们只要只要每个TypeView的位置,然后作为自己的subview就好了 @interface TypeSelectView : UIView @property(nonatomic) BOOL bShown; @property(nonatomic, strong) TypeView* curSelectedView; -(id)initWithFrame:(CGRect)frame searchType:(int)type; @en

在Image控件中绘制文字

//Canvas 在Image控件中绘制文字 procedure TForm1.Button1Click(Sender: TObject);begin  image1.Canvas.Font.Size:= 72; //设置文字大小  image1.Canvas.TextOut(1,1,'Delphi'); //输出文字end; 来自为知笔记(Wiz) 在Image控件中绘制文字

DEV 之 有些控件不允许拖动。

DEV 之 有些控件不允许拖动.  设置一个参数即可解决问题 原文地址:https://www.cnblogs.com/struggle-cs/p/9935939.html

如何在双向绑定的Image控件上绘制自定义标记(wpf)

原文:如何在双向绑定的Image控件上绘制自定义标记(wpf) 我们的需求是什么? 答:需要在图片上增加一些自定义标记,例如:2个图片对比时,对相同区域进行高亮. 先上效果图: 设计思路 1.概述 1.通过TargeUpdated事件,重新绘制图片进行替换. 2.详细实现 1.我们先绑定ImageTargetUpdated事件. ? 1 <Image x:Name="DestImageControl" Source="{Binding Path=Source.Url,

iOS--Quartz2D使用(自定义UIImageView控件、绘制基本图形)

自定义UIImageView控件 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义View. 使用Quartz2D自定义View,可以从模仿系统的ImageView的使用开始. 需求驱动开发:模仿系统的imageview的使用过程 1.创建 2.设置图片 3.设置frame 4.把创建的自定义的view添加到界面上(在自定义的View中,需要一个image属性接收image图片参数->5). 5.添加一个image属