MSチャートの非常に詳細な例は、ドラッグ拡大を実現します。
11902 ワード
:http://www.cnblogs.com/zdh8675/p/3343019.html
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;
using Hyet.Dal;
using Hxj.Model;
using Hxj.Data;
using System.Collections;
using Hyet.BLL;
namespace DigitalFactory.ReportForms
{
public partial class ChartInfo : Form
{
public ChartInfo()
{
InitializeComponent();
InitializeChart();
this.myChart.GetToolTipText += new EventHandler<ToolTipEventArgs>(myChart_GetToolTipText);
}
private void InitializeChart()
{
myChart.ChartAreas.Clear();
myChart.Series.Clear();
#region
//
myChart.BackColor = Color.FromArgb(211, 223, 240);
//
myChart.BackGradientStyle = GradientStyle.TopBottom;
// 、
myChart.BorderlineColor = Color.FromArgb(26, 59, 105);
//
myChart.BorderlineDashStyle = ChartDashStyle.Solid;
//
myChart.BorderlineWidth = 2;
//
myChart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
#endregion
#region
Title title = new Title();
//
title.Text = " ";
//
title.Font = new System.Drawing.Font("Microsoft Sans Serif", 12, FontStyle.Bold);
//
title.ForeColor = Color.FromArgb(26, 59, 105);
//
title.ShadowColor = Color.FromArgb(32, 0, 0, 0);
//
title.ShadowOffset = 3;
myChart.Titles.Add(title);
#endregion
#region
// ,
this.myChart.Legends.Clear();
Legend legend = new Legend("Default");
legend.Alignment = StringAlignment.Center;
legend.Docking = Docking.Bottom;
legend.LegendStyle = LegendStyle.Column;
this.myChart.Legends.Add(legend);
// Add header separator of type line
legend.HeaderSeparator = LegendSeparatorStyle.Line;
legend.HeaderSeparatorColor = Color.Gray;
LegendCellColumn firstColumn = new LegendCellColumn();
firstColumn.ColumnType = LegendCellColumnType.SeriesSymbol;
firstColumn.HeaderText = "Color";
firstColumn.HeaderBackColor = Color.WhiteSmoke;
myChart.Legends["Default"].CellColumns.Add(firstColumn);
// Add Legend Text column
LegendCellColumn secondColumn = new LegendCellColumn();
secondColumn.ColumnType = LegendCellColumnType.Text;
secondColumn.HeaderText = "Name";
secondColumn.Text = "#LEGENDTEXT";
secondColumn.HeaderBackColor = Color.WhiteSmoke;
myChart.Legends["Default"].CellColumns.Add(secondColumn);
// Add AVG cell column
LegendCellColumn avgColumn = new LegendCellColumn();
avgColumn.Text = "#AVG{N2}";
avgColumn.HeaderText = "Avg";
avgColumn.Name = "AvgColumn";
avgColumn.HeaderBackColor = Color.WhiteSmoke;
myChart.Legends["Default"].CellColumns.Add(avgColumn);
// Add Total cell column
LegendCellColumn totalColumn = new LegendCellColumn();
totalColumn.Text = "#TOTAL{N1}";
totalColumn.HeaderText = "Total";
totalColumn.Name = "TotalColumn";
totalColumn.HeaderBackColor = Color.WhiteSmoke;
myChart.Legends["Default"].CellColumns.Add(totalColumn);
// Set Min cell column attributes
LegendCellColumn minColumn = new LegendCellColumn();
minColumn.Text = "#MIN{N1}";
minColumn.HeaderText = "Min";
minColumn.Name = "MinColumn";
minColumn.HeaderBackColor = Color.WhiteSmoke;
myChart.Legends["Default"].CellColumns.Add(minColumn);
// Set Max cell column attributes
LegendCellColumn maxColumn = new LegendCellColumn();
maxColumn.Text = "#MAX{N1}";
maxColumn.HeaderText = "Max";
maxColumn.Name = "MaxColumn";
maxColumn.HeaderBackColor = Color.WhiteSmoke;
myChart.Legends["Default"].CellColumns.Add(maxColumn);
#endregion
#region
ChartArea chartArea = new ChartArea("Default");
// Y
chartArea.AxisY.Interval = 5;
// Y
//chartArea.AxisY.LabelStyle.Format = "C";
//
chartArea.BackColor = Color.FromArgb(64, 165, 191, 228);
//
chartArea.BackGradientStyle = GradientStyle.TopBottom;
//
chartArea.BackSecondaryColor = Color.White;
//
chartArea.BorderColor = Color.FromArgb(64, 64, 64, 64);
//
chartArea.ShadowColor = Color.Transparent;
// X Y
chartArea.AxisX.LineColor = Color.FromArgb(64, 64, 64, 64);
chartArea.AxisY.LineColor = Color.FromArgb(64, 64, 64, 64);
// X Y
chartArea.AxisX.LineWidth = 1;
chartArea.AxisY.LineWidth = 1;
// X Y
chartArea.AxisX.Title = " ";
chartArea.AxisY.Title = " ";
//
chartArea.AxisX.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);
chartArea.AxisY.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);
//
chartArea.AxisX.MajorGrid.LineWidth = 1;
chartArea.AxisY.MajorGrid.LineWidth = 1;
//
chartArea.AxisX.MajorTickMark.Enabled = false;
chartArea.AxisY.MajorTickMark.Enabled = false;
//
//chartArea.AxisX.MajorGrid.Enabled = false;
//chartArea.AxisY.MajorGrid.Enabled = false;
// X
chartArea.AxisX.Interval = 0; // 0
chartArea.AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;
chartArea.AxisX.IntervalType = DateTimeIntervalType.Minutes;
chartArea.AxisX.LabelStyle.IsStaggered = true;
//chartArea.AxisX.MajorGrid.IntervalType = DateTimeIntervalType.Minutes;
//chartArea.AxisX.LabelStyle.IntervalType = DateTimeIntervalType.Minutes;
chartArea.AxisX.LabelStyle.Format = "yyyy-MM-dd HH:mm:ss";
//
//chartArea.AxisX.LabelStyle.Angle = 45;
//
chartArea.AxisX.IsLabelAutoFit = true;
// X
chartArea.CursorX.IsUserEnabled = true;
chartArea.CursorX.IsUserSelectionEnabled = true;
chartArea.CursorX.Interval = 0;
chartArea.CursorX.IntervalOffset = 0;
chartArea.CursorX.IntervalType = DateTimeIntervalType.Minutes;
chartArea.AxisX.ScaleView.Zoomable = true;
chartArea.AxisX.ScrollBar.IsPositionedInside = false;
// ( )
//chartArea.AxisY.ScaleBreakStyle.Enabled = true;
//chartArea.AxisY.ScaleBreakStyle.CollapsibleSpaceThreshold = 47;
//chartArea.AxisY.ScaleBreakStyle.BreakLineStyle = BreakLineStyle.Wave;
//chartArea.AxisY.ScaleBreakStyle.Spacing = 2;
//chartArea.AxisY.ScaleBreakStyle.LineColor = Color.Red;
//chartArea.AxisY.ScaleBreakStyle.LineWidth = 10;
myChart.ChartAreas.Add(chartArea);
#endregion
// 2:
Series series = new Series("Default");
//
series.ChartType = SeriesChartType.Line;
//
series.BorderWidth = 1;
//
series.ShadowOffset = 0;
// Legends
series.IsVisibleInLegend = true;
//
series.IsValueShownAsLabel = true;
//
series.Color = Color.MediumPurple;
// X
series.XValueType = ChartValueType.DateTime;
//
series.MarkerStyle = MarkerStyle.Circle;
//
series.MarkerSize = 5;
myChart.Series.Add(series);
//
DataTable dataTable = new DataTable();
dataTable.Columns.Add("TheTime",typeof(DateTime)); // typeof
dataTable.Columns.Add("TheValue", typeof(double)); // typeof
Random random = new Random(); //
DateTime dateTime = System.DateTime.Now;
for (int n = 0; n < 3; n++)
{
dateTime = dateTime.AddSeconds(10);
DataRow dr = dataTable.NewRow();
dr["TheTime"] = dateTime;
dr["TheValue"] = random.Next(0, 101);
dataTable.Rows.Add(dr);
}
for (int n = 3; n < 1000; n++)
{
dateTime = dateTime.AddSeconds(30);
DataRow dr = dataTable.NewRow();
dr["TheTime"] = dateTime;
dr["TheValue"] = random.Next(0, 101);
dataTable.Rows.Add(dr);
}
// 1:
Series seriesMin = new Series("Min");
seriesMin.ChartType = SeriesChartType.Line;
seriesMin.BorderWidth = 1;
seriesMin.ShadowOffset = 0;
seriesMin.IsVisibleInLegend = true;
seriesMin.IsValueShownAsLabel = false;
seriesMin.Color = Color.Red;
seriesMin.XValueType = ChartValueType.DateTime;
seriesMin.MarkerStyle = MarkerStyle.None;
myChart.Series.Add(seriesMin);
// 3:
Series seriesMax = new Series("Max");
seriesMax.ChartType = SeriesChartType.Line;
seriesMax.BorderWidth = 1;
seriesMax.ShadowOffset = 0;
seriesMax.IsVisibleInLegend = true;
seriesMax.IsValueShownAsLabel = false;
seriesMax.Color = Color.Red;
seriesMax.XValueType = ChartValueType.DateTime;
seriesMax.MarkerStyle = MarkerStyle.None;
myChart.Series.Add(seriesMax);
// X X
chartArea.AxisX.Minimum = Convert.ToDateTime(dataTable.Rows[0]["TheTime"]).ToOADate();
//
foreach (DataRow dr in dataTable.Rows)
{
series.Points.AddXY(dr["TheTime"], dr["TheValue"]);
seriesMin.Points.AddXY(dr["TheTime"], 15); // 15
seriesMax.Points.AddXY(dr["TheTime"], 30); // 30
}
}
private void myChart_GetToolTipText(object sender, ToolTipEventArgs e)
{
if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
int i = e.HitTestResult.PointIndex;
DataPoint dp = e.HitTestResult.Series.Points[i];
e.Text = string.Format(" :{0}, :{1:F1} ", DateTime.FromOADate(dp.XValue), dp.YValues[0]);
}
}
}
}