c# Chart設置樣式

一、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的刻度中設置。

?

1

List<Series> listSer = new List<Series>();

引發動態生成圖表的按鈕事件完整如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

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();//圖表初始化

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章