C# Chart控件教程


一、什么是Micosoft.Chart.Controls

 Micosoft.Chart.Controls是微軟自帶的一個圖形可視化的組件,可以在Web程序和窗體程序中(Windowsform)中使用。在.NET4.0之后(即VS2010之后)不需要再手動安裝,集成在了VS里面,比如我用的VS2017版本,直接在工具箱中點開“ 數據 ”控件,里面就有一個Chart控件,直接拖動到窗體中即可,默認創建一個chart1的實例對象。

雖然現在流行很多的圖形可視化控件庫,要么缺少中文參考文檔,要么是很古老的版本界面丑陋,要么是需要收費的控件,故而用來很不方便,使用微軟自己的Chart依然可以實現很漂亮、很簡單的圖形可視化操作。

二、Chart控件五大核心“ 圖表屬性 ”——它們均是“ 集合 ”

之所以稱之為“圖表屬性 ”是因為在屬性中,這五大屬性的分類是一樣的,如下圖所示:

 

它們均是集合屬性。其中中間的三個屬性ChartAreas、Series、Legends是最為核心的三個,畫圖的時候主要用到的也是這三個,下面就這5類屬性,做一個簡單的介紹。

1、ChartAreas屬性

      ChartAreas可以理解為是一個圖表的繪圖區,例如,你想在一幅圖上呈現兩個不同屬性的內容,一個是用戶流量,另一個則是系統資源占用情況,那么你要在一個圖形上繪制這兩種情況,明顯是不合理的,對於這種情況,可以建立兩個ChartArea,一個用於呈現用戶流量,另一個則用於呈現系統資源的占用情況。
      當然了,圖表控件並不限制你添加多少個繪圖區域,你可以根據你的需要進行添加。對於每一個繪圖區域,你可以設置各自的屬性,如:X,Y軸屬性、背景等。需要注意的是,繪圖區域只是一個可以作圖的區域范圍,它本身並不包含要作圖形的各種屬性數據。   

       ChartAreas屬性的定義如下:

       public ChartAreaCollection ChartAreas { get; }   由此可見,他是一個返回ChartAreaCollection的只讀屬性。

(1)繪圖區域的添加——三種方法

               在拖動一個Chart控件到窗體中去的時候,會默認有一個Name=“ChartArea1"的對象,它是ChartArea類的一個實例。

          a、直接通過操作屬性:直接點擊添加,會依次按照ChartArea2這樣添加下去,也可以修改名字。

          b、chart1.ChartAreas.Add("ChartArea2");當然可以起一個其它的名字

          c、ChartArea area2=new ChartArea(“ChartArea2”);

               chart1.ChartAreas.Add(area2);

     第三種方法展現了創建繪圖區域的本質,即添加一個ChartArea類型的對象到ChartAreas屬性里面去。

 (2)繪圖區對象的獲取方法

每一個繪圖區本質上都是ChartArea的一個實例對象,然后將該對象Add到了chart1對象的ChartAreas集合屬性,故而有兩種獲取方法。

         a、通過繪圖區名字獲取:chart1.ChartAreas["ChartArea1"].屬性或方法。

         b、通過下標索引獲取:   chart1.ChartAreas[0].屬性或方法。

  之所以有這兩種方法,是因為ChartAreas屬性的本質是集合。

 (3)繪圖區域常見的一些屬性

        下面的這些屬性均是定義在 ChartArea 類型中的,故而是繪圖區的屬性     

        AlignmentOrientation:圖表區對齊方向,定義兩個繪圖區域間的對齊方式,默認為Vertical。

        AlignmentStyle:圖表區對齊類型,定義圖表間用以對其的元素。

        AlignWithChartArea:參照對齊的繪圖區名稱。

        InnerPlotPosition:圖表在繪圖區內的位置屬性。

        Position:繪圖區位置屬性,選項如同InnerPlotPosition。

        Name:繪圖區名稱。

   Axes:坐標軸集合-非常重要的部分,可分別設置X軸(X axis),Y軸(Y axis),第二X軸(SecnondaryX axis)和第二Y軸(Secnondary Y axis),常用的屬性包括:

               a.ArrowStyle設置坐標軸是否有箭頭

               b.Interval:軸刻度間隔大小

               c.IntervalOffset:軸刻度偏移量大小

               d.LableStyle 設置坐標軸的文字大小等

               e.MajorGrid:主要輔助線

               f.MajorTickMark:主要刻度線

               g.MinorTickMark:次要刻度線

               h.MinorGrid:次要輔助線

               i.Title:坐標軸標題

               j.TitleAlignment:坐標軸標題對齊方式

注意:Axes屬性又是一個“ 集合屬性”,這也是為什么是Asex,而不是Axis,因為Asex是Axis的復數形式。Asex集合中放置的元素是Axis類型的實例,我們可以通過屬性設計器去完成;默認情況下,每一個繪圖區會有兩組坐標系,即X、Y、第二X、第二Y。要訪問某一個

chart1.ChartAreas[1].Axes[3].屬性或者是方法

這些屬性或者是方法可以設置坐標軸的顯示樣式,網格的顯示方式等等,可以認為定制的。

2、Series屬性

          Series:最重要的屬性,圖表集合,就是最終看到的餅圖、柱狀圖、線圖、點圖等構成的合     

      Series,應該是整個繪圖中最關鍵的內容了,通俗點說,即是實際的繪圖數據區域,實際呈現的圖形形狀,簡單點說,以折線圖為例,每個Series就是一條線,每一條線都有自己的繪制形狀、樣式、獨立的數據等。需要注意的是,每一個Series,你可以指定它的繪制區域(即把哪個Series畫在哪個ChartArea),人情況下,如果不自己再添加繪圖區域ChartArea,則所有的Series會畫在同一個ChartArea。
       (1)Series的添加

        因為Series本身是一個集合屬性,故而有兩種方法添加

        第一、通過屬性設置面板添加,默認情況下里面已經有了一個Series1存在了,它是 Series 類型的實例

        第二、通過代碼添加。chart1.Series.Add("Series2");
        第三、直接創建一個Series對象,

                  Series series2 = new Series("Series2");
                  chart1.Series.Add(series2);

       (2)Series對象的屬性和方法獲取

     每一個Series本質上都是Series的一個實例對象,然后將該對象Add到了chart1對象的Series集合屬性,故而有兩種獲取方法。

             a、通過繪圖區名字獲取:chart1.Series["Series1"].屬性或方法。

             b、通過下標索引獲取:   chart1.Series[0].屬性或方法。

      之所以有這兩種方法,是因為Series屬性的本質是集合。

(3)圖表Series一些常見的一些屬性

         1.ChartArea:圖表所屬的繪圖區域名稱

         2.ChartType:圖表類型(柱形、餅形、線形、點形、折線圖等,有多達幾十種之多)

         3.IsValueShownAsLabel:是否顯示數據點標簽,如果為true,在圖表中顯示每一個數據值

         4.Label:數據點標簽文本

         5.LabelFormat:數據點標簽文本格式

         6.LabelAngle:標簽字體角度

         7.Legend:當前數據系列(圖表)使用的圖例名稱

         8.Name:數據系列的名稱

         9.Palette:數據系列(圖表)外觀定義

        10.Points:數據點集合,構成數據系列的點

        11.XValueMember:橫坐標綁定的數據源

        12.XValueType:橫坐標數字的類型,默認為auto,即根據傳入的數據自動規定類型

        13.YValueMembers:縱坐標綁定的數據源

        14.YValueType:縱坐標數字的類型默認為auto,即根據傳入的數據自動規定類型

        15.XAxisType:只是所要使用的坐標軸是主坐標還是副坐標,它有兩個取值,Primary和Sencondary

        16.YAxisType:

        17. 映射區(TooTip):鼠標放在數據點上出現的小提示,建議用代碼控制;

  (4)Series屬性的“ 數據綁定 ”方式。——上面的Points是“ 核心 ”

             (1)Points集合

         因為points是集合,故而具有集合的相關性質,Points是一個DataPointCollection類型的集合屬性。可以查看           DataPointCollection的定義來查看相關的方法。

               要給每一個Series綁定數據,主要用到以下三個方法:

               public void DataBind(IEnumerable dataSource, string xField, string yFields, string otherFields);
 
               public void DataBindXY(IEnumerable xValue, params IEnumerable[] yValues);
 
               public void DataBindXY(IEnumerable xValue, string xField, IEnumerable yValue, string yFields);
 
               public void DataBindY(IEnumerable yValue, string yFields);
如下所示:
                       chart1.Series["Series1"].Points.DataBindXY(x, y);   即綁定了一組 X,Y到一個Series上面去了。

  3、Legends屬性

MSChart的圖例默認不顯示,但可進行如下設置:

      1.Alignment:對齊方式

      2.AutoFitMinFontSize:當IsTextAutoFit為true時,顯示的最小字體

      3.BackColor:背景顏色,當本身的繪圖區域有背景時,將其設置為transparent效果更佳。

      4.enabled:是否顯示圖例

      5.IsTextAutoFit:文字大小根據圖例區域的大小自動調整

      6.Position:圖例出現的位置

4、另外兩個集合屬性

     Annotations注解集合
     Annotations是一個對圖形的一些注解對象的集合,所謂注解對象,類似於對某個點的詳細或者批注的說明,

     Titles標題合集
    根據字面含義即可以理解,是圖表的標題配置,同樣可以添加多個標題,以及設置標題的樣式及文字、位置等屬性。多看一下     它的屬性即能明白各自的含義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM