一、chart屬性熟悉
能夠對C# chart控件屬性熟悉起幫助的code, 現在分享給大家,Chart Operate Demo Code Download,如有幫助,別忘點個贊.
有關MS_Chart的Control范圍、ChartArea范圍、InnerPlotArea范圍,及Lengend、刻度與標簽的位置關系如下圖所示。以便讓大家有個清晰的認識。
Chart
ChartBorder 圖表區域的邊框設置
ChartFill 圖表區域的背景填充
Legend 圖表的注釋標簽顯示設置項目,一組數據對應一種顏色的注釋
IsHStack 當有多個顯示項的時候設置Y軸數據是疊加的還是分開的
Xaxis 圖表區域的X軸相關信息設置
AxisColor 坐標軸顏色
Cross 坐標的原點,可以設置坐標的偏移程度
CrossAuto 原點自動設置:True的話Cross的設置就無效了。
FontSpec X軸標題字體相關信息
Angle X軸標題字體顯示時候的角度,0為水平 90為垂直
Fill X軸標題字體填充信息
ColorOpacity 透明度
IsScaled 設置X軸標題字體顯示大小是否根據圖的比例放大縮小
RangeMax 填充時候的最大傾斜度(有過渡色,沒試過)
RangeMin 填充時候的最小傾斜度(有過渡色,沒試過)
StringAlignment X軸標題字體排列(不清楚,沒試過)
IsOmitMag 是否顯示指數冪(10次方,沒試過,似乎與IsUseTenPower有關系)
IsPreventLabelOverlap 坐標值顯示是否允許重疊,如果False的話,控件會根據坐標值長度自動消除部分坐標值的顯示狀態
IsShowTitle X軸標題是否顯示
IsTicsBetweenLabels 兩個坐標值之間是否自動顯示分隔標志
IsUseTenPower 是否使用10次冪指數
IsVisible 是否顯示X軸
IsZeroLine 當數據為0時候是否顯示(在餅狀圖顯示的時候有用)
MajorGrid 大跨度的X軸表格虛線線顯示信息
DashOff 虛線中孔間距
DashOn 虛線單位長度
MajorTic 大跨度的X軸刻度信息
IsInside 在Chart內部是否顯示
IsOutSide 在Chart外部是否顯示
IsOpposite 在對面的軸上是否顯示
MinorGrid 小跨度的X軸表格虛線顯示信息
MinorTic 小跨度的x軸刻度信息
MinSpace 刻度和軸之間的距離(沒試過)
Scale 刻度值的一些設定
IsReverse X軸的刻度值從高到低還是從低到高
MajorStep 大刻度步長
MajorStepAuto 是否自動設置大刻度步長
MajorUnit 大刻度步長單位
Max 刻度最大值
MaxAuto 根據輸入數據自動設置刻度最大值
Min 刻度最小值
MinAuto 根據輸入數據自動設置刻度最小值
MinGrace 不清楚,沒試過
MinorStep 小刻度步長
MinorStepAuto 是否自動設置小刻度步長
MinorUnit 小刻度單位
Type 數據顯示方式
Liner直接現實(自動)
Date按日期方式顯示
Log 按指數冪方式顯示
Ordinal順序顯示
Y2Axis 第二個Y軸坐標信息顯示(具體設置看X軸)
Yaxis 第一個Y軸坐標信息顯示(具體設置看X軸)
GraphPane
BarBase 在生成柱狀圖的時候設置柱狀是基於X軸還是其他軸
BarType 柱狀的類型疊加或其他。
IsFontsScaled 圖比例變化時候圖表上的文字是否跟着自動縮放
IsIgnoreInitial 是否忽略初始值
IsIgnoreMissing 是否忽略缺省值
IsPenWidthScaled 圖比例變化時候圖表上的畫筆的粗細是否跟着自動縮放
IsShowTitle 圖表標題是否顯示
PaneFill Pane的一些填充信息
MasterPane
BaseDimension 縮放比例基數(可以試試效果)
數據 未測試過。不知道如何和數據庫綁定
外觀
IsImageMap 不清楚干嗎用的
行為
AxisChaneged 是否允許自動繪圖(沒試過,一般都true,動態繪圖)
CacheDuration Cache保存時間0
OutputFormat 輸出格式
RenderedImagePath 輸出路徑
RenderMode 輸出模式,不太清楚一般都是ImageTag,另一個輸出的是亂碼不是圖片
對於圖表而言,一般是三種表現形式:柱狀圖、餅狀圖和點線圖。
ChartBorder
圖表區域的邊框設置
ChartFill
圖表區域的背景填充
Legend
圖表的注釋標簽顯示設置項目,一組數據對應一種顏色的注釋
IsHStack
當有多個顯示項的時候設置 Y 軸數據是疊加的還是分開的
Xaxis
圖表區域的 X 軸相關信息設置
AxisColor
坐標軸顏色
Cross
坐標的原點,可以設置坐標的偏移程度
CrossAuto
原點自動設置:True 的話 Cross 的設置就無效了。
FontSpec
X 軸標題字體相關信息
Angle
X 軸標題字體顯示時候的角度,0為水平 90為垂直
Fill
X 軸標題字體填充信息
ColorOpacity
透明度
IsScaled
設置 X 軸標題字體顯示大小是否根據圖的比例放大縮小
RangeMax
填充時候的最大傾斜度(有過渡色,沒試過)
RangeMin
填充時候的最小傾斜度(有過渡色,沒試過)
StringAlignment
X 軸標題字體排列(不清楚,沒試過)
IsOmitMag
是否顯示指數冪(10次方,沒試過,似乎與 IsUseTenPower 有關系)
IsPreventLabelOverlap
坐標值顯示是否允許重疊,如果False的話,控件會根據坐標值長度自動消除部分坐標值的顯示狀態
IsShowTitle
X 軸標題是否顯示
IsTicsBetweenLabels
兩個坐標值之間是否自動顯示分隔標志
IsUseTenPower
是否使用10次冪指數
IsZeroLine
當數據為0時候是否顯示(在餅狀圖顯示的時候有用)
IsVisible
是否顯示 X 軸
MajorGrid
大跨度的 X 軸表格虛線線顯示信息
DashOff
虛線中孔間距
DashOn
虛線單位長度
MajorTic
大跨度的 X 軸刻度信息
IsInside
在 Chart 內部是否顯示
IsOutSide
在 Chart 外部是否顯示
IsOpposite
在對面的軸上是否顯示
MinorGrid
小跨度的 X 軸表格虛線顯示信息
MinorTic
小跨度的 x 軸刻度信息
MinSpace
刻度和軸之間的距離(沒試過)
Scale
刻度值的一些設定
IsReverse
X 軸的刻度值從高到低還是從低到高
MajorStep
大刻度步長
MajorStepAuto
是否自動設置大刻度步長
MajorUnit
大刻度步長單位
Max
刻度最大值
MaxAuto
根據輸入數據自動設置刻度最大值
Min
刻度最小值
MinAuto
根據輸入數據自動設置刻度最小值
MinGrace
不清楚,沒試過
MinorStep
小刻度步長
MinorStepAuto
是否自動設置小刻度步長
MinorUnit
小刻度單位
Type
數據顯示方式
Liner
直接現實(自動)
Date
按日期方式顯示
Log
按指數冪方式顯示
Ordinal
順序顯示
Y2Axis
第二個 Y 軸坐標信息顯示(具體設置看 X 軸)
Yaxis
第一個 Y 軸坐標信息顯示(具體設置看 X 軸)
BarBase
在生成柱狀圖的時候設置柱狀是基於 X 軸還是其他軸
BarType
柱狀的類型疊加或其他。
IsFontsScaled
圖比例變化時候圖表上的文字是否跟着自動縮放
IsIgnoreInitial
是否忽略初始值
IsIgnoreMissing
是否忽略缺省值
IsPenWidthScaled
圖比例變化時候圖表上的畫筆的粗細是否跟着自動縮放
IsShowTitle
圖表標題是否顯示
PaneFill
Pane 的一些填充信息
BaseDimension
縮放比例基數(可以試試效果)
IsImageMap
不清楚干嗎用的
AxisChaneged
是否允許自動繪圖(沒試過,一般都 true,動態繪圖)
CacheDuration
Cache 保存時間0
OutputFormat
輸出格式
RenderedImagePath
輸出路徑
RenderMode
輸出模式,不太清楚一般都是 ImageTag,另一個輸出的是亂碼不是圖片。對於圖表而言,一般是三種表現形式:柱狀圖、餅狀圖和點線圖。
二、問題
2.1 控制X軸的標簽間隔顯示
下面這部分參考自: 救急!!!Dev的chartControl畫曲線圖,怎么控制X軸的標簽間隔顯示? huangama2011
X軸是時間,Y軸是金額;
現在記錄有100多個,標簽在X軸都顯示出來了,數字密密麻麻;
麻煩問下,怎么控制X軸的標簽間隔顯示?
要設置下 series1.ArgumentScaleType = ScaleType.DateTime;//x軸類型 這個 Series series1 = new Series(this.Text, ViewType.Spline); series1.ArgumentScaleType = ScaleType.DateTime;//x軸類型 series1.ValueScaleType = ScaleType.Numerical;//y軸類型 //X軸的數據字段 series1.ArgumentDataMember = "StatisticsTime"; //Y軸的數據字段 series1.ValueDataMembers[0] = "StatisticsSum"; //定義線條上點的標識形狀是否需要 ((LineSeriesView)series1.View).LineMarkerOptions.Visible = false; //定義線條上點的標識形狀 ((LineSeriesView)series1.View).LineMarkerOptions.Kind = MarkerKind.Circle; //不顯示X、Y軸上面的交點的值 ((PointSeriesLabel)series1.Label).Visible = false; //線條的類型,虛線,實線 ((LineSeriesView)series1.View).LineStyle.DashStyle = DashStyle.Solid;
完整代碼:

public void BindChart(DataTable datatable, ChartControl myChartControl) { myChartControl.Name = "chartResult"; myChartControl.Dock = DockStyle.Fill; myChartControl.Size = new System.Drawing.Size(400, 250); // 顯示標簽. myChartControl.Legend.Visible = true; myChartControl.Series.Clear(); #region 僅供參考(不需要) //控制X、Y軸顯示 //XYDiagram diagram = (XYDiagram)chartControl.Diagram; //diagram.AxisX.Label.Staggered = true; //diagram.AxisY.Label.BeginText = "Axis value = "; //diagram.AxisY.Label.Angle = -30; //diagram.AxisY.Label.Antialiasing = true; //XYDiagram diagram = (XYDiagram)chartControl.Diagram; //diagram.AxisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Second; //diagram.AxisX.DateTimeOptions.Format = DateTimeFormat.Custom; diagram.AxisX.DateTimeOptions.FormatString = "HH:mm:ss"; //((XYDiagram)myChartControl.Diagram).AxisX.Interlaced = true; //((XYDiagram)myChartControl.Diagram).AxisX.GridSpacing = 10; //((XYDiagram)myChartControl.Diagram).AxisX.Label.Angle = -30; //((XYDiagram)myChartControl.Diagram).AxisX.Label.Antialiasing = true; //((XYDiagram)myChartControl.Diagram).AxisX.DateTimeOptions.Format = DateTimeFormat.MonthAndDay; ////XYDiagram xyDiagram1 = new XYDiagram(); ////xyDiagram1.AxisX.Range.Auto = false; //要開啟滾動條必須將其設置為false //////xyDiagram1.AxisX.Range.MaxValueInternal = 30.5D > (cnt + 1) ? (cnt + 1) : 30.5D;//在不拉到滾動條的時候,X軸顯示多個值,既固定的X軸長度。 //////xyDiagram1.AxisX.Range.MinValueInternal = -0.5D; ////xyDiagram1.AxisX.Range.ScrollingRange.Auto = false; ////xyDiagram1.AxisX.MinorCount = 9; //顯示X軸間隔數量 ////xyDiagram1.AxisX.Tickmarks.MinorVisible = true;//是否顯示X軸間隔 //xyDiagram1.AxisY.MinorCount = 1;//顯示Y軸間隔數量 //xyDiagram1.AxisY.Tickmarks.MinorVisible = true;//是否顯示Y軸間隔 //xyDiagram1.AxisX.Range.ScrollingRange.MaxValueSerializable = (cnt + 1).ToString();//整個X軸最多顯示多多少個值 // xyDiagram1.AxisX.Range.ScrollingRange.MinValueSerializable = "0"; //xyDiagram1.AxisX.DateTimeMeasureUnit = DateTimeMeasurementUnit.Second; //xyDiagram1.AxisX.DateTimeOptions.Format = DateTimeFormat.Custom; //xyDiagram1.AxisX.DateTimeOptions.FormatString = "yyyy:MM:HH"; //xyDiagram1.AxisX.Range.ScrollingRange.SideMarginsEnabled = true;//是否從X軸原點開始顯示 //xyDiagram1.AxisX.Range.SideMarginsEnabled = false; ////xyDiagram1.AxisX.VisibleInPanesSerializable = "-1"; ////xyDiagram1.AxisY.NumericOptions.Format = DevExpress.XtraCharts.NumericFormat.Percent;//顯示為百分數 //xyDiagram1.AxisY.Range.Auto = false; ////xyDiagram1.AxisY.Range.MaxValueSerializable = "1.02"; ////xyDiagram1.AxisY.Range.MinValueSerializable = "0.5"; //xyDiagram1.AxisY.Range.ScrollingRange.SideMarginsEnabled = true; //xyDiagram1.AxisY.Range.SideMarginsEnabled = true; ////xyDiagram1.AxisY.VisibleInPanesSerializable = "-1"; //xyDiagram1.EnableScrolling = true;//啟用滾動條 //獲取Diagram必須在ChartControl中已經加入了Series之后 //((XYDiagram)chartControl.Diagram).Rotated = false; #endregion //圖標位置 myChartControl.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Right; myChartControl.Legend.AlignmentVertical = LegendAlignmentVertical.Top; ChartTitle chartTitle = new ChartTitle(); chartTitle.Text = this.Text;//標題內容 chartTitle.TextColor = System.Drawing.Color.Black;//字體顏色 chartTitle.Font = new Font("Tahoma", 8);//字體類型字號 chartTitle.Dock = ChartTitleDockStyle.Bottom;//標題對齊方式 chartTitle.Alignment = StringAlignment.Far; myChartControl.Titles.Clear();//清理標題 myChartControl.Titles.Add(chartTitle);//加載標題 Series series1 = new Series(this.Text, ViewType.Spline); series1.ArgumentScaleType = ScaleType.DateTime;//x軸類型 series1.ValueScaleType = ScaleType.Numerical;//y軸類型 //X軸的數據字段 series1.ArgumentDataMember = "StatisticsTime"; //Y軸的數據字段 series1.ValueDataMembers[0] = "StatisticsSum"; //定義線條上點的標識形狀是否需要 ((LineSeriesView)series1.View).LineMarkerOptions.Visible = false; //定義線條上點的標識形狀 ((LineSeriesView)series1.View).LineMarkerOptions.Kind = MarkerKind.Circle; //不顯示X、Y軸上面的交點的值 ((PointSeriesLabel)series1.Label).Visible = false; //線條的類型,虛線,實線 ((LineSeriesView)series1.View).LineStyle.DashStyle = DashStyle.Solid; //綁定數據源 series1.DataSource = datatable; myChartControl.Series.Add(series1); }
2.2 x軸的間距過大的問題
關於X軸數據間距過大的問題,可以通過設置scale來解決。在Format Chart頁,選中Chart Area->Axes->X-Axis, 設置間隔。
關於點重合的問題,你可以通過改變marker的形狀和大小來解決。在Format Chart頁,選中Series->Value series,找到marker就可以進行設置了。
X軸和Y軸的最大值設置 也是在Chart Area->Axes->X-Axis的刻度中設置。
List<Series> listSer = new List<Series>();
引發動態生成圖表的按鈕事件完整如下:
string sqlString = "select count(*) from dotrelation where dotdesc like '溫度%'"; num = Mycon.countORL(conn, sqlString);//獲得數據庫中滿足條件的記錄數 //MessageBox.Show("滿足條件的數據記錄為" + num); int heightPer = 100 / num;//計算每個繪圖區高度 for (int i = 0; i < num; i++) { string serName = "test" + i.ToString(); listSer.Add(new Series(serName));//對象數組 fillData(date);//初始化數組此方法自己定義的 initialSeries((Series)listSer[i], Color.Red, date); chart1.ChartAreas.Add("ANOTHER" + i); //這里是關鍵!!!!! chart1.ChartAreas[i].Position.Width = 100;//繪圖區域在控件中的寬度 100是百分比 chart1.ChartAreas[i].Position.Height = heightPer; chart1.ChartAreas[i].Position.X = 5;//繪圖區域在控件中的絕對位置 橫坐標 chart1.ChartAreas[i].Position.Y = 3 + heightPer * i;//繪圖區域在控件中的絕對位置縱坐標 chart1.ChartAreas[i].AxisX.LineColor = Color.Blue; chart1.ChartAreas[i].AxisY.LineColor = Color.Blue; chart1.ChartAreas[i].AxisX.LineWidth = 2; chart1.ChartAreas[i].AxisY.LineWidth = 2; chart1.ChartAreas[i].AxisY.Title = "監測值"; //設置網格線 chart1.ChartAreas[i].AxisX.MajorGrid.LineColor = Color.Blue; chart1.ChartAreas[i].AxisX.MajorGrid.Interval = 2;//網格間隔 chart1.ChartAreas[i].AxisX.MinorGrid.Interval = 2; chart1.ChartAreas[i].AxisY.MajorGrid.LineColor = Color.Blue; chart1.ChartAreas[i].AxisY.MajorGrid.Interval = 2; chart1.ChartAreas[i].AxisY.MinorGrid.Interval = 2; chart1.Series[i].IsValueShownAsLabel = false; //是否顯示數據 chart1.Series[i].IsVisibleInLegend = false; //是否顯示數據說明 chart1.Series[i].MarkerStyle = MarkerStyle.Circle; //線條上的數據點標志類型 chart1.Series[i].MarkerSize = 3; //標志大小 chart1.Series[i].ChartType = SeriesChartType.Line; //圖表類型為曲線 string name = "ANOTHER" + i.ToString(); chart1.Series[i].ChartArea = name;//指定繪圖區域 chart1.ChartAreas[i].AxisX.LineColor = Color.Blue;//X軸顏色 chart1.ChartAreas[i].AxisY.LineColor = Color.Blue;//Y軸顏色 chart1.ChartAreas[i].AxisX.LineWidth = 2; //X軸寬度 chart1.ChartAreas[i].AxisY.LineWidth = 2; //Y軸寬度 chart1.ChartAreas[i].AxisY.Title = "人數"; //Y軸標題 } //fillData(date);//初始化數組 //initialSeries(series1, Color.Red, date); initalChart();//圖表初始化 }
參考文章
1. louiskoo , c# Chart設置樣式。
2. IT-CollectionPlatForm, C# 2010 Chart的使用。