DevExpress.XtraCharts

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraCharts;
namespace Chart
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void CreateChart(DataTable dt)
{
chartX.Series.Clear();
try
{
#region Series
ChartTitle chartTitle1 = new ChartTitle();
ChartTitle chartTitle2 = new ChartTitle();
//标题内容
chartTitle1.Text = "X管制图";
//标题字体颜色
chartTitle1.TextColor = System.Drawing.Color.Black;
//标题字体类型字号
chartTitle1.Font = new Font("黑体", 12, FontStyle.Regular);
//标题对齐方式
chartTitle1.Dock = ChartTitleDockStyle.Top;
chartTitle1.Alignment = StringAlignment.Center;
//标题字体颜色
chartTitle2.TextColor = System.Drawing.Color.Black;
//标题字体类型字号
chartTitle2.Font = new Font("黑体", 12, FontStyle.Regular);
//标题对齐方式
chartTitle2.Dock = ChartTitleDockStyle.Top;
chartTitle2.Alignment = StringAlignment.Center;
//清理标题
chartX.Titles.Clear();
//加载标题
chartX.Titles.Add(chartTitle1);
#endregion
//创建几个图形的对象
Series series1 = CreateSeries("X数据列", ViewType.Line, dt, 1);
Series series2 = CreateSeries("R数据列", ViewType.Bar, dt, 1);
Series series3 = CreateSeries("Z数据列", ViewType.Bar, dt, 2);
List<Series> list1 = new List<Series>();
List<Series> list2 = new List<Series>();
List<Series> list3 = new List<Series>();
list1.Add(series1);
list2.Add(series2);
list3.Add(series3);
chartX.Series.AddRange(list1.ToArray());
chartX.Series.AddRange(list2.ToArray());
chartX.Series.AddRange(list3.ToArray());
chartX.Legend.Visible = false;
series1.View.Color = Color.Blue;
series2.View.Color = Color.Red;
series2.View.Color = Color.Green;
AxisRange DIAX = (AxisRange)((XYDiagram)chartX.Diagram).AxisY.Range;
CreateAxisY(series1);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 根据数据创建一个图形展现
/// </summary>
/// <param name="caption">图形标题
/// <param name="viewType">图形类型
/// <param name="dt">数据DataTable
/// <param name="rowIndex">图形数据的行序号
/// <returns></returns>
private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int rowIndex)
{
Series series = new Series(caption, viewType);
try
{
if (viewType == ViewType.Line)
{
for (int i = 1; i < dt.Columns.Count; i++)
{
string argument = dt.Rows[rowIndex][i].ToString();//参数名称
if (dt.Rows[rowIndex][i].ToString() == "")
{
decimal value = 0;
series.Points.Add(new SeriesPoint(argument, value));
}
else
{
decimal value = decimal.Parse(dt.Rows[rowIndex][i].ToString());
series.Points.Add(new SeriesPoint(argument, value));
}
}
}
else
{
for (int i = 1; i < dt.Columns.Count; i++)
{
string argument = dt.Rows[rowIndex][i].ToString();//参数名称
if (dt.Rows[rowIndex][i].ToString() == "")
{
decimal value = 0;
series.Points.Add(new SeriesPoint(argument, value));
}
else
{
decimal value = decimal.Parse(dt.Rows[rowIndex][i].ToString());//参数值
series.Points.Add(new SeriesPoint(argument, value));
}
}
}
//必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
//也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
series.ArgumentScaleType = ScaleType.Qualitative;
series.PointOptions.PointView = PointView.Values;
//series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return series;
}
/// <summary>
/// 设置X轴Title
/// </summary>
/// <param name="chart">ChartControl</param>
/// <param name="titleText">Title文字</param>
/// <param name="titleColor">Title文字颜色</param>
public static void SetAxisXTitle(ChartControl chart, string titleText, Color titleColor)
{
XYDiagram _diagram = (XYDiagram)chart.Diagram;
if (_diagram != null)
{
_diagram.AxisX.Title.Visible = true;
_diagram.AxisX.Title.Alignment = StringAlignment.Center;
_diagram.AxisX.Title.Text = titleText;
_diagram.AxisX.Title.TextColor = titleColor;
_diagram.AxisX.Title.Antialiasing = true;
_diagram.AxisX.Title.Font = new Font("Tahoma", 14, FontStyle.Bold);
}
}
/// <summary>
/// 设置Y轴Title
/// </summary>
/// <param name="chart">ChartControl</param>
/// <param name="titleText">Title文字</param>
/// <param name="titleColor">Title文字颜色</param>
public static void SetAxisYTitle(ChartControl chart, string titleText, Color titleColor)
{
XYDiagram _diagram = (XYDiagram)chart.Diagram;
if (_diagram != null)
{
_diagram.AxisY.Title.Visible = true;
_diagram.AxisY.Title.Alignment = StringAlignment.Center;
_diagram.AxisY.Title.Text = titleText;
_diagram.AxisY.Title.TextColor = titleColor;
_diagram.AxisY.Title.Antialiasing = true;
_diagram.AxisY.Title.Font = new Font("Tahoma", 14, FontStyle.Bold);
}
}
/// <summary>
/// 创建图表的第二坐标系
/// </summary>
/// <param name="series">Series对象
/// <returns></returns>
private SecondaryAxisY CreateAxisY(Series series)
{
((XYDiagram)chartX.Diagram).SecondaryAxesY.Clear();
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
try
{
((XYDiagram)chartX.Diagram).SecondaryAxesY.Add(myAxis);
//((LineSeriesView)series.View).BarWidth = 0.4;
((LineSeriesView)series.View).AxisY = myAxis;
myAxis.Title.Text = series.Name;
myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
myAxis.Title.Visible = true; //显示标题
myAxis.Title.Font = new Font("宋体", 9.0f);
Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致
myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return myAxis;
}
/// <summary>
/// 创建数据源
/// </summary>
/// <returns></returns>
public DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("a", typeof(System.String));
dt.Columns.Add("b", typeof(System.String));
dt.Columns.Add("c", typeof(System.String));
dt.Columns.Add("d", typeof(System.String));
for (int i = 0; i < 3; i++)
{
DataRow dr = dt.NewRow();
Random rd = new Random();
dr["a"] = rd.Next(50, 99);
dr["b"] = rd.Next(50, 99);
dr["c"] = rd.Next(50, 99);
dr["d"] = rd.Next(50, 99);
dt.Rows.Add(dr);
}
return dt;
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
CreateChart(GetData());
SetAxisXTitle(chartX, "x轴", Color.Red);
SetAxisYTitle(chartX, "y轴", Color.Red);
}
}
}

浙公网安备 33010602011771号