C#在winform中製作好看的圖表

平時在做開發的時候經常會遇到製作圖表,很多人會選擇第三方庫來實現,其實在開發winform應用程序的時候我們就發現微軟給我們提供了一個chart控件,這個控件非常強大,今天我就來做一個很簡單的柱形圖來演示一下。我們先看一下程序運行畫面:

C#在winform中製作好看的圖表

具體實現步驟如下:

打開visual studio 新建一個winform應用程序,在設計器中添加一個chart控件,設置chart控件的dock屬性為Fill

C#在winform中製作好看的圖表

注意:手動添加名字空間System.Windows.Forms.DataVisualization.Charting

在load事件中給chart控件添加series titles legends chartArea

  1. 添加series 一個柱形 一個線條

string seriesName = "柱狀圖";

chart1.Series.Add(seriesName);

chart1.Series[seriesName].ChartType = SeriesChartType.Column;//這裡設置圖表類型 餅圖 線圖 柱狀等等

chart1.Series[seriesName].Color = Color.FromArgb(0x00, 0xA2, 0xE8);

chart1.Series[seriesName].IsValueShownAsLabel = true;

chart1.Series[seriesName].MarkerStyle = MarkerStyle.Circle;

chart1.Series[seriesName].MarkerColor = Color.Lime;

chart1.Series[seriesName].LabelForeColor = Color.Red;

chart1.Series[seriesName].LabelAngle = -90;

seriesName = "曲線圖";

chart1.Series.Add(seriesName);

chart1.Series[seriesName].ChartType = SeriesChartType.Spline;//這裡設置圖表類型 線圖

chart1.Series[seriesName].Color = Color.Red;

2.添加titles

//添加標題

chart1.Titles.Add("柱狀圖與曲線圖");

chart1.Titles[0].Font = new Font("微軟雅黑", 12);

chart1.Titles[0].Docking = Docking.Bottom;

chart1.Titles[0].ForeColor = Color.White;

3.添加legends

//設置圖例

chart1.Legends[0].Docking = Docking.Top;

chart1.Legends[0].Alignment = StringAlignment.Center;

chart1.Legends[0].BackColor = Color.Transparent;

chart1.Legends[0].ForeColor = Color.White;

4.添加chartArea

//設置XY軸

chart1.ChartAreas[0].AxisX.Title = "序號";

chart1.ChartAreas[0].AxisY.Title = "數值";

chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Far;

chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Far;

chart1.ChartAreas[0].AxisX.TitleForeColor = Color.White;

chart1.ChartAreas[0].AxisY.TitleForeColor = Color.White;

chart1.ChartAreas[0].AxisX.LabelStyle = new LabelStyle() { ForeColor = Color.White };

chart1.ChartAreas[0].AxisY.LabelStyle = new LabelStyle() { ForeColor = Color.White };

chart1.ChartAreas[0].AxisX.LineColor = Color.White;

chart1.ChartAreas[0].AxisY.LineColor = Color.White;

chart1.ChartAreas[0].AxisX.ArrowStyle = AxisArrowStyle.None;

chart1.ChartAreas[0].AxisY.ArrowStyle = AxisArrowStyle.None;

chart1.ChartAreas[0].AxisX.Interval = 1;

chart1.ChartAreas[0].AxisY.Interval = 2;

//設置網格

chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 20;

chart1.ChartAreas[0].AxisY.MajorGrid.Interval = 2;

5.設置chart控件的風格

//設置圖表的風格

chart1.BackColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ChartAreas[0].BackColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ForeColor = Color.Red;

//將series的顏色設置為好看的漸變顏色

chart1.Series[0].BackGradientStyle = GradientStyle.DiagonalRight;

下面是完整的代碼:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Windows.Forms.DataVisualization.Charting;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

chart1.Series.Clear();

string seriesName = "柱狀圖";

//添加series

chart1.Series.Add(seriesName);

chart1.Series[seriesName].ChartType = SeriesChartType.Column;//這裡設置圖表類型 餅圖 線圖 柱狀等等

chart1.Series[seriesName].Color = Color.FromArgb(0x00, 0xA2, 0xE8);

chart1.Series[seriesName].IsValueShownAsLabel = true;

chart1.Series[seriesName].MarkerStyle = MarkerStyle.Circle;

chart1.Series[seriesName].MarkerColor = Color.Lime;

chart1.Series[seriesName].LabelForeColor = Color.Red;

chart1.Series[seriesName].LabelAngle = -90;

seriesName = "曲線圖";

chart1.Series.Add(seriesName);

chart1.Series[seriesName].ChartType = SeriesChartType.Spline;//這裡設置圖表類型 線圖

chart1.Series[seriesName].Color = Color.Red;

//設置標題

chart1.Titles.Add("柱狀圖與曲線圖");

chart1.Titles[0].Font = new Font("微軟雅黑", 12);

chart1.Titles[0].Docking = Docking.Bottom;

chart1.Titles[0].ForeColor = Color.White;

//設置圖表的風格

chart1.BackColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ChartAreas[0].BackColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ForeColor = Color.Red;

//設置圖例

chart1.Legends[0].Docking = Docking.Top;

chart1.Legends[0].Alignment = StringAlignment.Center;

chart1.Legends[0].BackColor = Color.Transparent;

chart1.Legends[0].ForeColor = Color.White;

//設置XY軸

chart1.ChartAreas[0].AxisX.Title = "序號";

chart1.ChartAreas[0].AxisY.Title = "數值";

chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Far;

chart1.ChartAreas[0].AxisY.TitleAlignment = StringAlignment.Far;

chart1.ChartAreas[0].AxisX.TitleForeColor = Color.White;

chart1.ChartAreas[0].AxisY.TitleForeColor = Color.White;

chart1.ChartAreas[0].AxisX.LabelStyle = new LabelStyle() { ForeColor = Color.White };

chart1.ChartAreas[0].AxisY.LabelStyle = new LabelStyle() { ForeColor = Color.White };

chart1.ChartAreas[0].AxisX.LineColor = Color.White;

chart1.ChartAreas[0].AxisY.LineColor = Color.White;

chart1.ChartAreas[0].AxisX.ArrowStyle = AxisArrowStyle.None;

chart1.ChartAreas[0].AxisY.ArrowStyle = AxisArrowStyle.None;

chart1.ChartAreas[0].AxisX.Interval = 1;

chart1.ChartAreas[0].AxisY.Interval = 2;

//設置網格

chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.FromArgb(0x03, 0x0D, 0xA9);

chart1.ChartAreas[0].AxisX.MajorGrid.Interval = 20;

chart1.ChartAreas[0].AxisY.MajorGrid.Interval = 2;

//將series的顏色設置為好看的漸變顏色

chart1.Series[0].BackGradientStyle = GradientStyle.DiagonalRight;

RefreshData();

}

/// <summary>

/// 隨機產生一些數據

///

public void RefreshData()

{

List x1 = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

List y1 = new List();

Random ra = new Random();

for (int i = 0; i < x1.Count; i++)

{

y1.Add(ra.Next(1, 10));

}

RefreshChart(x1, y1);

}

public delegate void RefDataDelegate(List x, List y);

public void RefreshChart(List x, List y)

{

//在實際開發當中經常會用到定時更新數據 跨線程調用

if (this.chart1.InvokeRequired)

{

RefDataDelegate stcb = new RefDataDelegate(RefreshChart);

this.Invoke(stcb, new object[] { x, y });

}

else

{

chart1.Series[0].Points.DataBindXY(x, y);

chart1.Series[1].Points.DataBindXY(x, y);

}

}

}

}


分享到:


相關文章: