一、什麼是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標題合集
根據字面含義即可以理解,是圖表的標題配置,同樣可以添加多個標題,以及設置標題的樣式及文字、位置等屬性。多看一下 它的屬性即能明白各自的含義。
5 示意圖
chart 內包括:
Axis Label |
橫縱座標的文字 (比如 0 20 40 ....) |
Axis Title |
橫縱座標的代表什麼(比如 Y Axis Title) |
Chart Area |
圖標所在位置 |
Chart Picture |
底色的背景圖 |
Chart Series |
chart的內的東西(比如 線或者柱形圖等) |
Legend |
chart內seriess代表什麼的標誌符 |
Grid Lines |
網格 |
Tick Marks |
刻度 |
Plot Area |
圖區 |
Title |
chart標題 |
Value Label |
label的value |