/// <summary> /// This method is where you generate your graph. /// </summary> /// <param name="masterPane">You are provided with a MasterPane instance that /// contains one GraphPane by default (accessible via masterPane[0]).</param> /// <param name="g">A graphics instance so you can easily make the call to AxisChange()</param> private void OnRenderGraph1(System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { // Get the GraphPane so we can work with it GraphPane myPane = masterPane[0]; // Set the title and axis labels myPane.Title.Text = "Cat Stats"; myPane.YAxis.Title.Text = "Big Cats"; myPane.XAxis.Title.Text = "Population"; // Make up some data points string[] labels = { "Panther", "Lion", "Cheetah", "Cougar", "Tiger", "Leopard" }; double[] x = { 100, 115, 75, 22, 98, 40 }; double[] x2 = { 120, 175, 95, 57, 113, 110 }; double[] x3 = { 204, 192, 119, 80, 134, 156 }; // Generate a red bar with "Curve 1" in the legend BarItem myCurve = myPane.AddBar("Here", x, null, Color.Red); // Fill the bar with a red-white-red color gradient for a 3d look myCurve.Bar.Fill = new Fill(Color.Red, Color.White, Color.Red, 90f); // Generate a blue bar with "Curve 2" in the legend myCurve = myPane.AddBar("There", x2, null, Color.Blue); // Fill the bar with a Blue-white-Blue color gradient for a 3d look myCurve.Bar.Fill = new Fill(Color.Blue, Color.White, Color.Blue, 90f); // Generate a green bar with "Curve 3" in the legend myCurve = myPane.AddBar("Elsewhere", x3, null, Color.Green); // Fill the bar with a Green-white-Green color gradient for a 3d look myCurve.Bar.Fill = new Fill(Color.Green, Color.White, Color.Green, 90f); // Draw the Y tics between the labels instead of at the labels myPane.YAxis.MajorTic.IsBetweenLabels = true; // Set the YAxis labels myPane.YAxis.Scale.TextLabels = labels; // Set the YAxis to Text type myPane.YAxis.Type = AxisType.Text; // Set the bar type to stack, which stacks the bars by automatically accumulating the values myPane.BarSettings.Type = BarType.Stack; // Make the bars horizontal by setting the BarBase to "Y" myPane.BarSettings.Base = BarBase.Y; // Fill the axis background with a color gradient myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(255, 255, 166), 45.0F); masterPane.AxisChange(g); }
/// <summary> /// Here is a completely independent second graph. In InitializeComponent() above, /// ZedGraphWeb1 calls OnRenderGraph1, and ZedGraphWeb2 calls OnRenderGraph2. /// </summary> private void OnRenderGraph2(System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { // Get the GraphPane so we can work with it GraphPane myPane = masterPane[0]; // Set the titles and axis labels myPane.Title.Text = "My Test Date Graph"; myPane.XAxis.Title.Text = "Date"; myPane.YAxis.Title.Text = "My Y Axis"; // Make up some data points from the Sine function PointPairList list = new PointPairList(); PointPairList list2 = new PointPairList(); for (int i = 0; i < 36; i++) { double x = new XDate(1995, i + 1, 1); double y = Math.Sin((double)i * Math.PI / 15.0); double y2 = 2 * y; list.Add(x, y); list2.Add(x, y2); } // Generate a blue curve with circle symbols, and "My Curve 2" in the legend LineItem myCurve2 = myPane.AddCurve("My Curve 2", list, Color.Blue, SymbolType.Circle); // Fill the area under the curve with a white-red gradient at 45 degrees myCurve2.Line.Fill = new Fill(Color.White, Color.Red, 45F); // Make the symbols opaque by filling them with white myCurve2.Symbol.Fill = new Fill(Color.White); // Generate a red curve with diamond symbols, and "My Curve" in the legend LineItem myCurve = myPane.AddCurve("My Curve", list2, Color.MediumVioletRed, SymbolType.Diamond); // Fill the area under the curve with a white-green gradient myCurve.Line.Fill = new Fill(Color.White, Color.Green); // Make the symbols opaque by filling them with white myCurve.Symbol.Fill = new Fill(Color.White); // Set the XAxis to date type myPane.XAxis.Type = AxisType.Date; myPane.XAxis.CrossAuto = true; // Fill the axis background with a color gradient myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45F); masterPane.AxisChange(g); }
/// <summary> /// This method is where you generate your graph. /// </summary> /// <param name="masterPane">You are provided with a MasterPane instance that /// contains one GraphPane by default (accessible via masterPane[0]).</param> /// <param name="g">A graphics instance so you can easily make the call to AxisChange()</param> private void OnRenderGraph(System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { // Get the GraphPane so we can work with it GraphPane myPane = masterPane[0]; myPane.Title.Text = "Sales By Region"; myPane.XAxis.Title.Text = "Region"; myPane.YAxis.Title.Text = "Gross Sales, $Thousands"; PointPairList list = new PointPairList(); PointPairList list2 = new PointPairList(); PointPairList list3 = new PointPairList(); Random rand = new Random(); for (double x = 0; x < 5; x += 1.0) { double y = rand.NextDouble() * 1000; double y2 = rand.NextDouble() * 1000; double y3 = rand.NextDouble() * 1000; list.Add(x, y); list2.Add(x, y2); list3.Add(x, y3); } BarItem myCurve = myPane.AddBar("Blue Team", list, Color.Blue); myCurve.Bar.Fill = new Fill(Color.Blue, Color.White, Color.Blue); BarItem myCurve2 = myPane.AddBar("Red Team", list2, Color.Red); myCurve2.Bar.Fill = new Fill(Color.Red, Color.White, Color.Red); BarItem myCurve3 = myPane.AddBar("Green Team", list3, Color.Green); myCurve3.Bar.Fill = new Fill(Color.Green, Color.White, Color.Green); myPane.XAxis.MajorTic.IsBetweenLabels = true; string[] labels = { "Africa", "Americas", "Asia", "Europe", "Australia" }; myPane.XAxis.Scale.TextLabels = labels; myPane.XAxis.Type = AxisType.Text; myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 45.0f); myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45.0f); masterPane.AxisChange(g); }
public void OnRenderGraph(ZedGraphWeb zgw, System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { GraphPane myPane = masterPane[0]; myPane.Title.Text = "Statistic for studet " + d.user.LastName + " for curriculum " + d.curriculum.Name;; myPane.XAxis.Title.Text = "Stage"; myPane.YAxis.Title.Text = "Count"; PointPairList list = new PointPairList(); PointPairList list2 = new PointPairList(); for (int x = 0; x < d.Get_Name_Stage().Count; x++) { double y = d.Get_Student_Stage_Count()[x]; double y2 = d.Get_Total_Stage_Count()[x]; list.Add(x, y); list2.Add(x, y2); } BarItem myCurve = myPane.AddBar("Student Resoult", list, Color.Green); BarItem myCurve2 = myPane.AddBar("Stage Rank", list2, Color.Red); string[] label11 = new string[d.Get_Student_Stage_Count().Count]; for (int x = 0; x < d.Get_Student_Stage_Count().Count; x++) { label11[x] = d.Get_Name_Stage()[x]; } myPane.XAxis.MajorTic.IsBetweenLabels = true; myPane.XAxis.Scale.TextLabels = label11; myPane.XAxis.Type = AxisType.Text; myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 45.0f); myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45.0f); masterPane.AxisChange(g); }
private void OnRenderUserChart(ZedGraph.Web.ZedGraphWeb z, System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { GraphPane graphPane = masterPane[0]; graphPane.Title.Text = Resource.MemberGraphTitle; graphPane.XAxis.Title.Text = Resource.MemberGraphXAxisLabel; graphPane.YAxis.Title.Text = Resource.MemberGraphYAxisLabel; PointPairList pointList = new PointPairList(); using (IDataReader reader = SiteUser.GetUserCountByYearMonth(siteSettings.SiteId)) { while (reader.Read()) { double x = new XDate(Convert.ToInt32(reader["Y"]), Convert.ToInt32(reader["M"]), 1); double y = Convert.ToDouble(reader["Users"]); pointList.Add(x, y); } } LineItem myCurve2 = graphPane.AddCurve(Resource.MemberGraphYAxisLabel, pointList, Color.Blue, SymbolType.Circle); // Fill the area under the curve with a white-red gradient at 45 degrees myCurve2.Line.Fill = new Fill(Color.White, Color.Green, 45F); // Make the symbols opaque by filling them with white myCurve2.Symbol.Fill = new Fill(Color.White); // Set the XAxis to date type graphPane.XAxis.Type = AxisType.Date; graphPane.XAxis.CrossAuto = true; // Fill the axis background with a color gradient graphPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45F); masterPane.AxisChange(g); }
private void OnRenderGraph(ZedGraphWeb zgw, Graphics g, MasterPane masterPane) { ErrorMsg.Text = ""; CY.GFive.DALProviders.SqlServerProvider.ScoreProvider sp = new CY.GFive.DALProviders.SqlServerProvider.ScoreProvider(); if (string.IsNullOrEmpty(Request.Form.Get("Term")) || string.IsNullOrEmpty(Request.Form.Get("Course"))) { ErrorMsg.Text = "参数错误"; ZedGraphWeb1.Visible = false; return; } int term = Convert.ToInt32(Request.Form.Get("Term")); string course = Request.Form.Get("Course"); string year = ddlYearNum.SelectedItem.ToString(); string teacher = ddlTeacher.SelectedValue; List<string> classlist = sp.GetClassList(year, term, teacher, course); if (classlist.Count < 1) return; GraphPane myPane = masterPane[0]; myPane.Title.Text = "分数段统计"; //设计图表的标题 myPane.XAxis.Title.Text = "分数段"; //X轴标题 myPane.YAxis.Title.Text = "人数"; //Y轴标题 string[] labels = new string[6]; labels[0] = "60以下"; labels[1] = "60-69"; labels[2] = "70-79"; labels[3] = "80-89"; labels[4] = "90-99"; labels[5] = "100"; foreach (string classcode in classlist) { Random rand = new Random(); int n = rand.Next(4); Color temp = Color.FromArgb(n * 10, n * 60, n * 50); DataSet ds = sp.GetScoreUnionByParam(year, term, classcode, course); CY.GFive.Core.Business.ClassInfo citemp = CY.GFive.Core.Business.ClassInfo.GetByCode(classcode); PointPairList list = new PointPairList(); for (int i = 0; i < 6; i++) list.Add(0, Convert.ToInt32(ds.Tables[0].Rows[i]["人数"])); BarItem myCurve = myPane.AddBar(citemp.ClassName, list, temp); myCurve.Bar.Fill = new Fill(temp, Color.White, temp); } myPane.XAxis.MajorTic.IsBetweenLabels = false; //柱状显示位置,true为在两个下标题值的中间,flase为两边 myPane.XAxis.Scale.TextLabels = labels;//下标题的内容 myPane.XAxis.Type = AxisType.Text; myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 90.0f);//图表外层背景填充色,由color1到color2渐变,参数3为方向 myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 270.0f);//图表内层背景填充色,由color1到color2渐变,参数3为方向 ZedGraphWeb1.Visible = true; masterPane.AxisChange(g); }
protected void ZedGraphWebLevelSuiStatistic_RenderGraph(ZedGraph.Web.ZedGraphWeb webObject, Graphics g, MasterPane masterPane) { if (_infoHashtable != null) { //整理数据 int startLevel = int.Parse(TextBoxStartLevel.Text.Trim()); int endLevel = int.Parse(TextBoxEndLevel.Text.Trim()); int groupCount = int.Parse(TextBoxGroup.Text.Trim()); string[] levels = new string[(endLevel - startLevel) / groupCount + 1]; double[] counts; Color[] roleTypeColor = new Color[]{ Color.Blue, Color.Brown, Color.DarkGoldenrod, Color.Beige, Color.Yellow, Color.Coral, Color.Pink, Color.Green, Color.Gray }; for (int index = 0; index != levels.Length; ++index) { levels[index] = string.Concat(startLevel + index * groupCount, '-', startLevel + (index + 1) * groupCount - 1); } GraphPane graphPane = masterPane[0]; //绘制图表 graphPane.Title.Text = string.Format("{0}-{1} {2} {3}", startLevel, endLevel, StringDef.Role + StringDef.Total + StringDef.Colon, _total.ToString()); graphPane.Title.IsVisible = true; graphPane.Title.FontSpec.Size = 14; graphPane.Fill = new Fill(WebConfig.GraphPaneBgColor); graphPane.Legend.FontSpec.Fill.IsVisible = false; graphPane.Legend.FontSpec.Size = 10.5f; graphPane.Legend.Fill.IsVisible = false; graphPane.Legend.Border.IsVisible = false; graphPane.YAxis.Title.Text = StringDef.Count; graphPane.YAxis.Title.FontSpec.IsBold = false; graphPane.YAxis.Title.FontSpec.Size = 10.5f; graphPane.YAxis.Scale.FontSpec.Size = 10.5f; graphPane.YAxis.MajorGrid.IsVisible = true; graphPane.YAxis.MajorGrid.DashOff = 0; graphPane.YAxis.MajorGrid.Color = Color.Gray; graphPane.YAxis.MinorGrid.IsVisible = true; graphPane.YAxis.MinorGrid.Color = Color.LightGray; graphPane.YAxis.MinorGrid.DashOff = 0; graphPane.XAxis.Title.Text = StringDef.Level; graphPane.XAxis.Title.FontSpec.IsBold = false; graphPane.XAxis.Title.FontSpec.Size = 10.5f; graphPane.XAxis.Scale.IsVisible = true; graphPane.XAxis.Type = AxisType.Text; graphPane.XAxis.Scale.TextLabels = levels; graphPane.XAxis.Scale.FontSpec.Size = 10.5f; switch (DropDownListBarType.SelectedItem.Text) { case "Stack": graphPane.BarSettings.Type = BarType.Stack; break; case "PercentStack": graphPane.BarSettings.Type = BarType.PercentStack; break; case "Cluster": graphPane.BarSettings.Type = BarType.Cluster; break; case "ClusterHiLow": graphPane.BarSettings.Type = BarType.ClusterHiLow; break; case "Overlay": graphPane.BarSettings.Type = BarType.Overlay; break; case "SortedOverlay": graphPane.BarSettings.Type = BarType.SortedOverlay; break; } for (int roleType = 0; roleType != 10; ++roleType) { ArrayList infoList = _infoHashtable[(FS2RoleType)roleType] as ArrayList; if (infoList != null) { counts = new double[(endLevel - startLevel) / groupCount + 1]; for (int index = 0; index != levels.Length; ++index) { foreach (LevelInfo info in (LevelInfo[])infoList.ToArray(typeof(LevelInfo))) { if (info.Level >= startLevel + index * groupCount && info.Level < startLevel + (index + 1) * groupCount) counts[index] += info.Num; else if (info.Level >= startLevel + (index + 1) * groupCount) break; } } string classDescription = string.Empty; switch ((FS2RoleType)roleType) { case FS2RoleType.Jiashi: classDescription = StringDef.Jiashi; break; case FS2RoleType.Xuanfeng: classDescription = StringDef.XuanFeng; break; case FS2RoleType.Xingtian: classDescription = StringDef.XingTian; break; case FS2RoleType.Daoshi: classDescription = StringDef.Daoshi; break; case FS2RoleType.Zhenren: classDescription = StringDef.ZhenRen; break; case FS2RoleType.Tianshi: classDescription = StringDef.TianShi; break; case FS2RoleType.Yiren: classDescription = StringDef.Yiren; break; case FS2RoleType.Shoushi: classDescription = StringDef.ShouShi; break; case FS2RoleType.Yishi: classDescription = StringDef.YiShi; break; } BarItem bar = graphPane.AddBar(classDescription, null, counts, roleTypeColor[(int)roleType]); bar.Bar.Fill = new Fill(roleTypeColor[(int)roleType]); } } masterPane.AxisChange(g); BarItem.CreateBarLabels(graphPane, true, string.Empty, TextObj.Default.FontFamily, 10.5f, TextObj.Default.FontColor, false, false, false); } }
//void CreateTableHead() //{ // if(TextBoxRoleName.Text!=null&&TextBoxRoleName.Text.Trim().Length!=0) // { // TableRow rowHead = new TableRow(); // TableHeaderCell cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.RoleName; // rowHead.Cells.Add(cellHead); // cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.Date; // rowHead.Cells.Add(cellHead); // cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.Count; // rowHead.Cells.Add(cellHead); // cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.Percentage; // rowHead.Cells.Add(cellHead); // TableSearchTaiSuiList.Rows.Add(rowHead); // } // else // { // TableRow rowHead = new TableRow(); // TableHeaderCell cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.Date; // rowHead.Cells.Add(cellHead); // cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.Count; // rowHead.Cells.Add(cellHead); // cellHead = new TableHeaderCell(); // cellHead.Text = StringDef.Percentage; // rowHead.Cells.Add(cellHead); // TableSearchTaiSuiList.Rows.Add(rowHead); // } //} //void CreateSearchResultList(TaiSuiUseInfo[] infos, int total) //{ // if (infos != null) // { // if (TextBoxRoleName.Text != null && TextBoxRoleName.Text.Trim().Length != 0) // { // foreach (TaiSuiUseInfo info in infos) // { // TableRow row = new TableRow(); // TableCell cell = new TableCell(); // cell.Text = TextBoxRoleName.Text.Trim(); // row.Cells.Add(cell); // cell = new TableCell(); // cell.Text = info.date.ToShortDateString(); // row.Cells.Add(cell); // cell = new TableCell(); // cell.Text = info.num.ToString(); // row.Cells.Add(cell); // cell = new TableCell(); // cell.Text = total == 0 ? "0" : Decimal.Round((decimal)info.num / total, 2) * 100 + "%"; // row.Cells.Add(cell); // TableSearchTaiSuiList.Rows.Add(row); // } // } // else // { // foreach (TaiSuiUseInfo info in infos) // { // TableRow row = new TableRow(); // TableCell cell = new TableCell(); // cell.Text = info.date.ToShortDateString(); // row.Cells.Add(cell); // cell = new TableCell(); // cell.Text = info.num.ToString(); // row.Cells.Add(cell); // cell = new TableCell(); // cell.Text = total == 0 ? "0" : Decimal.Round((decimal)info.num / total, 2) * 100 + "%"; // row.Cells.Add(cell); // TableSearchTaiSuiList.Rows.Add(row); // } // } // TableRow rowTail = new TableRow(); // TableCell cellTail = new TableCell(); // cellTail.ColumnSpan = TextBoxRoleName.Text != null && TextBoxRoleName.Text.Trim().Length != 0 ? 4 : 3; // cellTail.Font.Bold = true; // cellTail.Text = StringDef.Total + StringDef.Colon + total; // rowTail.Cells.Add(cellTail); // TableSearchTaiSuiList.Rows.Add(rowTail); // } //} protected void ZedGraphWebTaiSuiStatistic_RenderGraph(ZedGraph.Web.ZedGraphWeb webObject,Graphics g, MasterPane masterPane) { if (_statInfo != null) { //整理数据 double[] timeArray = null; double[] counts = null; if (RadioButtonListType.SelectedValue.Equals("Day")) { //按天 TimeSpan span = _end.Subtract(_start); timeArray = new double[span.Days + 1]; counts = new double[span.Days + 1]; for (int index = 0; index != span.Days + 1; ++index) { DateTime tempDate = _start.Date.AddDays(index); timeArray[index] = new XDate(tempDate); foreach (TaiSuiUseInfo info in _statInfo) { //如果相等赋num,如果比date的日期小则结束 if (tempDate.Date.Equals(info.date)) { counts[index] = info.num; break; } else if (tempDate.Date < info.date) { break; } } } } else { //按月 int monthLength = (_end.Year - _start.Year) * 12 + (_end.Month - _start.Month); timeArray = new double[monthLength + 1]; counts = new double[monthLength + 1]; for (int index = 0; index != monthLength + 1; ++index) { DateTime tempDate = _start.Date.AddMonths(index); timeArray[index] = new XDate(tempDate); foreach (TaiSuiUseInfo info in _statInfo) { //如果相等赋num,如果比date的日期小则结束 if (tempDate.ToString("yyyyMM").Equals(info.date.ToString("yyyyMM"))) { counts[index] = info.num; break; } else if (tempDate.Date < info.date) { break; } } } } GraphPane graphPane = masterPane[0]; //绘制图表 graphPane.Title.Text = string.Format("{0} {1} {2} {3}", _start.ToShortDateString(), StringDef.To, _end.ToShortDateString(), StringDef.TaiSui + StringDef.Total + StringDef.Colon + _totalCount.ToString()); graphPane.Title.IsVisible = true; graphPane.Title.FontSpec.Size = 14; graphPane.Fill = new Fill(WebConfig.GraphPaneBgColor); graphPane.Legend.FontSpec.Fill.IsVisible = false; graphPane.Legend.FontSpec.Size = 10.5f; graphPane.Legend.Fill.IsVisible = false; graphPane.Legend.Border.IsVisible = false; graphPane.YAxis.Title.Text = StringDef.UseCount; graphPane.YAxis.Title.FontSpec.IsBold = false; graphPane.YAxis.Title.FontSpec.Size = 10.5f; graphPane.YAxis.Scale.FontSpec.Size = 10.5f; graphPane.YAxis.MajorGrid.IsVisible = true; graphPane.YAxis.MajorGrid.DashOff = 0; graphPane.YAxis.MajorGrid.Color = Color.Gray; graphPane.YAxis.MinorGrid.IsVisible = true; graphPane.YAxis.MinorGrid.Color = Color.LightGray; graphPane.YAxis.MinorGrid.DashOff = 0; graphPane.XAxis.Title.Text = StringDef.Date; graphPane.XAxis.Title.FontSpec.IsBold = false; graphPane.XAxis.Title.FontSpec.Size = 10.5f; graphPane.XAxis.Scale.MajorUnit = DateUnit.Day; graphPane.XAxis.MinorGrid.IsVisible = false; graphPane.XAxis.Type = AxisType.DateAsOrdinal; if (RadioButtonListType.SelectedValue.Equals("Day")) graphPane.XAxis.Scale.Format = "MM-dd"; else graphPane.XAxis.Scale.Format = "yyyy-MM"; graphPane.XAxis.Scale.FontSpec.Size = 10.5f; //graphPane.XAxis.Scale.FontSpec.Angle = 45; graphPane.BarSettings.Type = BarType.Cluster; BarItem barItem = graphPane.AddBar(StringDef.UseCount, timeArray, counts, Color.Blue); masterPane.AxisChange(g); BarItem.CreateBarLabels(graphPane, false, string.Empty, TextObj.Default.FontFamily, 10.5f, TextObj.Default.FontColor, false, false, false); } }
protected void graphStatistics_OnRenderGraph(ZedGraph.Web.ZedGraphWeb z, System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { GraphPane myPane = masterPane[0]; myPane.Border.Color = Color.White; myPane.Title.Text = Lang.Statistics_for_all_members; myPane.XAxis.Title.Text = ""; //Lang.Participants; myPane.XAxis.Scale.IsVisible = false; myPane.YAxis.Title.Text = "%"; // Lang.ErrorPercent; myPane.YAxis.Scale.Max = 11.0f; myPane.YAxis.Scale.Min = -11.0f; myPane.Legend.IsVisible = true; myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(255, Color.White), 45.0F); myPane.YAxis.Scale.MaxGrace = 0.2; myPane.YAxis.MajorGrid.IsVisible = true; myPane.YAxis.MinorGrid.IsVisible = true; if (String.IsNullOrEmpty(ddStatistics.SelectedValue)) { myPane.Title.Text = Lang.Statistics_for_all_members_no_results; myPane.XAxis.Scale.Max = 1; myPane.XAxis.Scale.Min = 0; return; } List <Guid> idList = new List <Guid>(); try { Database.Interface.open(); Database.Account.select_ID(ref idList, Convert.ToInt32(ddStatistics.SelectedValue)); PointPairList list = new PointPairList(); PointPairList local_list = new PointPairList(); PointPairList eList = new PointPairList(); int count = 0; foreach (Guid id in idList) { DataSet dataSet = Database.RingtestReport.select_Error_CalculatedUncertainty_RingtestBoxID_MCAType_ActivityRef_where_AccountID_Year(id, Convert.ToInt32(ddStatistics.SelectedValue)); if (dataSet.Tables[0].Rows.Count <= 0) { continue; } double count_offset = (double)count; for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { double error = Convert.ToDouble(dataSet.Tables[0].Rows[i][0]); double uncertainty = Convert.ToDouble(dataSet.Tables[0].Rows[i][1]); string MCAType = dataSet.Tables[0].Rows[i][3].ToString(); if (MCAType.ToLower() != "serie10") { double activity = Convert.ToDouble(dataSet.Tables[0].Rows[i][4]); uncertainty = (uncertainty / activity) * 100.0; } if (id.ToString() == hiddenAccountID.Value) { local_list.Add(count, error); } else { list.Add(count, error); } eList.Add(count_offset, error + uncertainty, error - uncertainty); } count++; } if (count < 5) { myPane.CurveList.Clear(); Utils.displayStatus(ref labelStatusStatistics, Color.SeaGreen, Lang.Number_of_results_registered_is + " " + count.ToString() + ". " + Lang.Need_5_to_display_data); } else { myPane.XAxis.Scale.Max = count; myPane.XAxis.Scale.Min = -1; LineItem curve = myPane.AddCurve("Andres rapporterte resultater", list, Color.White, SymbolType.Circle); curve.Line.IsVisible = false; curve.Symbol.Size = 6; curve.Symbol.Fill = new Fill(Color.DodgerBlue); LineItem local_curve = myPane.AddCurve("Egne rapporterte resultater", local_list, Color.White, SymbolType.Circle); local_curve.Line.IsVisible = false; local_curve.Symbol.Size = 6; local_curve.Symbol.Fill = new Fill(Color.IndianRed); ErrorBarItem errBar = myPane.AddErrorBar("Beregent usikkerhet", eList, Color.Red); errBar.Bar.PenWidth = 1; } } catch (Exception ex) { Utils.displayStatus(ref labelStatusStatistics, Color.Red, ex.Message); } finally { Database.Interface.close(); } masterPane.AxisChange(g); }
/// <summary> /// /// </summary> /// <param name="OutputStream"></param> /// <param name="Format"></param> /// <param name="bShowTransparency">if true, draw squares instead of leaving the /// background transparent</param> /// <remarks> /// bShowTransparency is set to true in design mode, to false otherwise. /// </remarks> protected MasterPane CreateGraph( System.IO.Stream OutputStream, ImageFormat Format, bool bShowTransparency ) { RectangleF rect = new RectangleF( 0, 0, this.Width, this.Height ); MasterPane mp = new MasterPane( string.Empty, rect ); mp.Margin.All = 0; mp.Fill.IsVisible = false; mp.Border.IsVisible = false; // create all required panes //for ( int i = 0; i < this.PaneCount; i++ ) //{ mp.Add( new GraphPane( rect, Title, string.Empty, string.Empty ) ); //} // create output bitmap container Bitmap image = new Bitmap( this.Width, this.Height ); using ( Graphics g = Graphics.FromImage( image ) ) { // Apply layout plan //mp.SetLayout( this.PaneLayout ); mp.ReSize( g, rect ); // Use callback to gather more settings and data values OnDrawPane( g, mp ); // Allow designer control of axischange if ( this.AxisChanged ) mp.AxisChange( g ); // Render the graph to a bitmap if ( bShowTransparency && mp.Fill.Color.A != 255 ) { //Show the transparency as white/gray filled squares // We need to add the resource namespace to its name //string resourceName = string.Format( "{0}.transparency.png", GetType().Namespace ); string resourceName = "ZedGraph.ZedGraph.transparency.png"; Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream( resourceName ); if ( stream == null ) throw new Exception( "Does the Build Action of the resource " + resourceName + " is set to Embedded Resource ?" ); using ( System.Drawing.Image brushImage = new Bitmap( stream ) ) using ( TextureBrush brush = new TextureBrush( brushImage, WrapMode.Tile ) ) { g.FillRectangle( brush, 0, 0, this.Width, this.Height ); } stream.Close(); } mp.Draw( g ); } // Stream the graph out MemoryStream ms = new MemoryStream(); image.Save( ms, Format ); //TODO: provide caching options ms.WriteTo( OutputStream ); return mp; }
private void Form1_Load(object sender, EventArgs e) { CreateGraph_BasicDate(); Trace.Listeners.Add(new TextWriterTraceListener( @"myTrace.txt" ) ); Trace.AutoFlush = true; memGraphics.CreateDoubleBuffer(this.CreateGraphics(), this.ClientRectangle.Width, this.ClientRectangle.Height); #if false // Multi Y Axis demo myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "Demonstration of Multi Y Graph", "Time, s", "Velocity, m/s" ); // Set the titles and axis labels myPane.Y2Axis.Title.Text = "Acceleration, m/s2"; // Make up some data _points based on the Sine function PointPairList vList = new PointPairList(); PointPairList aList = new PointPairList(); PointPairList dList = new PointPairList(); PointPairList eList = new PointPairList(); for ( int i=0; i<30; i++ ) { double time = (double) i; double acceleration = 2.0; double velocity = acceleration * time; double distance = acceleration * time * time / 2.0; double energy = 100.0 * velocity * velocity / 2.0; aList.Add( time, acceleration ); vList.Add( time, velocity ); eList.Add( time, energy ); dList.Add( time, distance ); } // Generate a red curve with diamond symbols, and "Velocity" in the _legend LineItem myCurve = myPane.AddCurve( "Velocity", vList, Color.Red, SymbolType.Diamond ); // Fill the symbols with white myCurve.Symbol.Fill = new Fill( Color.White ); // Generate a blue curve with circle symbols, and "Acceleration" in the _legend myCurve = myPane.AddCurve( "Acceleration", aList, Color.Blue, SymbolType.Circle ); // Fill the symbols with white myCurve.Symbol.Fill = new Fill( Color.White ); // Associate this curve with the Y2 axis myCurve.IsY2Axis = true; // Generate a green curve with square symbols, and "Distance" in the _legend myCurve = myPane.AddCurve( "Distance", dList, Color.Green, SymbolType.Square ); // Fill the symbols with white myCurve.Symbol.Fill = new Fill( Color.White ); // Associate this curve with the second Y axis myCurve.YAxisIndex = 1; // Generate a Black curve with triangle symbols, and "Energy" in the _legend myCurve = myPane.AddCurve( "Energy", eList, Color.Black, SymbolType.Triangle ); // Fill the symbols with white myCurve.Symbol.Fill = new Fill( Color.White ); // Associate this curve with the Y2 axis myCurve.IsY2Axis = true; // Associate this curve with the second Y2 axis myCurve.YAxisIndex = 1; // Show the x axis grid myPane.XAxis.MajorGrid.IsVisible = true; // Make the Y axis scale red myPane.YAxis.Scale.FontSpec.FontColor = Color.Red; myPane.YAxis.Title.FontSpec.FontColor = Color.Red; // turn off the opposite tics so the Y tics don't show up on the Y2 axis myPane.YAxis.MajorTic.IsOpposite = false; myPane.YAxis.MinorTic.IsOpposite = false; // Don't display the Y zero line myPane.YAxis.MajorGrid.IsZeroLine = false; // Align the Y axis labels so they are flush to the axis myPane.YAxis.Scale.Align = AlignP.Inside; myPane.YAxis.Scale.Max = 100; // Enable the Y2 axis display myPane.Y2Axis.IsVisible = true; // Make the Y2 axis scale blue myPane.Y2Axis.Scale.FontSpec.FontColor = Color.Blue; myPane.Y2Axis.Title.FontSpec.FontColor = Color.Blue; // turn off the opposite tics so the Y2 tics don't show up on the Y axis myPane.Y2Axis.MajorTic.IsOpposite = false; myPane.Y2Axis.MinorTic.IsOpposite = false; // Display the Y2 axis grid lines myPane.Y2Axis.MajorGrid.IsVisible = true; // Align the Y2 axis labels so they are flush to the axis myPane.Y2Axis.Scale.Align = AlignP.Inside; myPane.Y2Axis.Scale.Min = 1.5; myPane.Y2Axis.Scale.Max = 3; myPane.YAxis.IsVisible = true; //myPane.YAxis.IsTic = false; myPane.YAxis.MinorTic.IsOutside = false; myPane.YAxis.MajorTic.IsCrossOutside = false; myPane.YAxis.MinorTic.IsCrossOutside = false; myPane.YAxis.MajorTic.IsInside = false; myPane.YAxis.MinorTic.IsInside = false; myPane.YAxis.MajorTic.IsOpposite = false; myPane.YAxis.MinorTic.IsOpposite = false; // Create a second Y Axis, green YAxis yAxis3b = new YAxis( "Test Axis" ); myPane.YAxisList.Add( yAxis3b ); yAxis3b.Scale.FontSpec.FontColor = Color.Brown; yAxis3b.Title.FontSpec.FontColor = Color.Brown; yAxis3b.Color = Color.Brown; yAxis3b.MajorTic.IsOutside = false; yAxis3b.MinorTic.IsOutside = false; yAxis3b.MajorTic.IsOpposite = false; yAxis3b.MinorTic.IsOpposite = false; //yAxis3b.IsScaleLabelsInside = true; yAxis3b.Title.IsTitleAtCross = false; yAxis3b.MajorTic.IsInside = false; yAxis3b.MinorTic.IsInside = false; yAxis3b.MajorTic.IsOpposite = false; yAxis3b.MinorTic.IsOpposite = false; // Create a second Y Axis, green YAxis yAxis3c = new YAxis( "Test 2 Axis" ); myPane.YAxisList.Add( yAxis3c ); yAxis3c.Scale.FontSpec.FontColor = Color.Brown; yAxis3c.Title.FontSpec.FontColor = Color.Brown; yAxis3c.Color = Color.Brown; yAxis3c.MajorTic.IsOutside = false; yAxis3c.MinorTic.IsOutside = false; yAxis3c.MajorTic.IsOpposite = false; yAxis3c.MinorTic.IsOpposite = false; //yAxis3c.IsScaleLabelsInside = true; yAxis3c.Title.IsTitleAtCross = false; yAxis3c.MajorTic.IsInside = false; yAxis3c.MinorTic.IsInside = false; yAxis3c.MajorTic.IsOpposite = false; yAxis3c.MinorTic.IsOpposite = false; // Create a second Y Axis, green YAxis yAxis3 = new YAxis( "Distance, m" ); myPane.YAxisList.Add( yAxis3 ); yAxis3.Scale.FontSpec.FontColor = Color.Green; yAxis3.Title.FontSpec.FontColor = Color.Green; yAxis3.Color = Color.Green; // turn off the opposite tics so the Y2 tics don't show up on the Y axis yAxis3.MajorTic.IsInside = false; yAxis3.MinorTic.IsInside = false; yAxis3.MajorTic.IsOpposite = false; yAxis3.MinorTic.IsOpposite = false; // Align the Y2 axis labels so they are flush to the axis yAxis3.Scale.Align = AlignP.Inside; //yAxis3.AxisGap = 0; Y2Axis yAxis4 = new Y2Axis( "Energy" ); yAxis4.IsVisible = true; myPane.Y2AxisList.Add( yAxis4 ); // turn off the opposite tics so the Y2 tics don't show up on the Y axis yAxis4.MajorTic.IsInside = false; yAxis4.MinorTic.IsInside = false; yAxis4.MajorTic.IsOpposite = false; yAxis4.MinorTic.IsOpposite = false; // Align the Y2 axis labels so they are flush to the axis yAxis4.Scale.Align = AlignP.Inside; yAxis4.Type = AxisType.Log; yAxis4.Scale.Min = 100; // Fill the axis background with a gradient myPane.Chart.Fill = new Fill( Color.White, Color.LightGoldenrodYellow, 45.0f ); #endif #if false // SampleMultiPointList Demo myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "Demo for SampleMultiPointList", "Time", "Distance Traveled" ); SetSize(); SampleMultiPointList myList = new SampleMultiPointList(); myList.YData = PerfDataType.Distance; // note how it does not matter that we created the second list before actually // adding the data -- this is because the cloned list shares data with the // original SampleMultiPointList myList2 = new SampleMultiPointList( myList ); myList2.YData = PerfDataType.Velocity; for ( int i=0; i<20; i++ ) { double time = (double) i; double acceleration = 1.0; double velocity = acceleration * time; double distance = acceleration * time * time / 2.0; PerformanceData perfData = new PerformanceData( time, distance, velocity, acceleration ); myList.Add( perfData ); } myPane.AddCurve( "Distance", myList, Color.Blue ); myPane.AddCurve( "Velocity", myList2, Color.Red ); #endif #if false // GradientByZ myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "Wacky Widget Company\nProduction Report", "Time, Days\n(Since Plant Construction Startup)", "Widget Production\n(units/hour)" ); SetSize(); string[] ystr = { "one", "two", "three", "four", "five" }; double[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; double[] y = { .1, .2, .3, .4, .5, .4, .3, .2, .1, .2 }; //double[] y = { 20, 10, 50, 25, 35, 75, 90, 40, 33, 50 }; double[] z = { 1, 2, 3, 4, 5, 5, 4, 3, 2, 1 }; PointPairList list = new PointPairList( x, y, z ); Color[] colors = { Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Orange }; Fill fill = new Fill( colors ); fill.Type = FillType.GradientByZ; fill.RangeMin = 1; fill.RangeMax = 5; BarItem myBar = myPane.AddBar( "My Bar", list, Color.Tomato ); myBar.Bar.Fill = fill; myPane.XAxis.Type = AxisType.Ordinal; //myPane.YAxis.Type = AxisType.Text; //myPane.YAxis.TextLabels = ystr; //myPane.ClusterScaleWidth = 1; //myPane.AxisChange( this.CreateGraphics() ); #endif #if false // GradientByZ dual bars myPane = new GraphPane( new RectangleF(0,0,300,400), "Title", "X Label", "Y Label" ); double[] xx = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; double[] yy = { 1, 2, 3, 4, 5, 4, 3, 2, 1, 2 }; double[] yy2 = { 4, 5, 7, 8, 1, 3, 5, 2, 4, 9 }; double[] zz = { 1, 2, 3, 4, 5, 5, 4, 3, 2, 1 }; double[] zz2 = { 5, 1, 4, 2, 3, 4, 2, 1, 5, 5 }; PointPairList list = new PointPairList( xx, yy, zz ); PointPairList list2 = new PointPairList( xx, yy2, zz2 ); Color[] colors = { Color.Red, Color.Green, Color.Blue, Color.Yellow, Color.Orange }; Fill fill = new Fill( colors ); fill.Type = FillType.GradientByZ; fill.RangeMin = 1; fill.RangeMax = 5; BarItem myBar = myPane.AddBar( "My Bar", list, Color.Tomato ); myBar.Bar.Fill = fill; BarItem myBar2 = myPane.AddBar( "My Bar 2", list2, Color.Tomato ); myBar2.Bar.Fill = fill; myPane.XAxis.Type = AxisType.Ordinal; myPane.MinBarGap = 0.1f; //myPane.MinClusterGap = 0; myPane.AxisChange( this.CreateGraphics() ); #endif #if false // stacked bars Random rand = new Random(); myPane = new GraphPane(); // myPane.Title.Text = "My Title"; // myPane.XAxis.Title.Text = "X Axis"; // myPane.YAxis.Title.Text = "Y Axis"; PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); PointPairList list3 = new PointPairList(); PointPairList list4 = new PointPairList(); for ( int i=1; i<5; i++ ) { double y = (double) i; double x1 = 100.0 + rand.NextDouble() * 100.0; double x2 = 100.0 + rand.NextDouble() * 100.0; double x3 = 100.0 + rand.NextDouble() * 100.0; double x4 = 100.0 + rand.NextDouble() * 100.0; list1.Add( x1, y ); list2.Add( x2, y ); list3.Add( x3, y ); list4.Add( x4, y ); } BarItem bar1 = myPane.AddBar( "Bar 1", list1, Color.Red ); BarItem bar2 = myPane.AddBar( "Bar 2", list2, Color.Blue ); BarItem bar3 = myPane.AddBar( "Bar 3", list3, Color.Green ); BarItem bar4 = myPane.AddBar( "Bar 4", list4, Color.Beige ); myPane.BarBase = BarBase.Y; myPane.BarType = BarType.Stack; myPane.AxisChange( this.CreateGraphics() ); this.CreateStackBarLabels( myPane ); #endif #if false // Bars and Dates // Color color = Color.FromArgb( 123, 45, 67, 89 ); // HSBColor hsbColor = new HSBColor( color ); // Color color2 = hsbColor; Random rand = new Random(); myPane = new GraphPane(); myPane.Title.Text = "My Title"; myPane.XAxis.Title.Text = "X Axis"; myPane.YAxis.Title.Text = "Y Axis"; //myPane.XAxis.Type = AxisType.Ordinal; //myPane.XAxis.Type = AxisType.Date; //myPane.ClusterScaleWidth = 0.75 / 1440.0; //myPane.XAxis.MinorStep = 1; //myPane.XAxis.MinorUnit = DateUnit.Minute; PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); for ( int i=1; i<10; i++ ) { //double x = new XDate( 1995, 5, 10, 12, i+1, 0 ); double x = (double) i; double y1 = rand.NextDouble() * 100.0; double y2 = rand.NextDouble() * 100.0; list1.Add( x-0.25, y1, 0 ); list2.Add( x+0.17, y2, 0 ); } //myPane.AddCurve( "junk", list1, Color.Green ); HiLowBarItem bar1 = myPane.AddHiLowBar( "Bar 1", list1, Color.Red ); //bar1.Bar.Border.IsVisible = false; bar1.Bar.Size = 15; //bar1.Bar.Fill = new Fill( Color.Red ); HiLowBarItem bar2 = myPane.AddHiLowBar( "Bar 2", list2, Color.Blue ); //bar2.Bar.Border.IsVisible = false; //bar2.Bar.Fill = new Fill( Color.Blue ); bar2.Bar.Size = 10; MasterPane mPane = new MasterPane(); mPane.Add( myPane ); myPane.AxisChange( this.CreateGraphics() ); //this.CreateBarLabels(mPane); #endif #if false // bar test with no gap myPane = new GraphPane( new Rectangle( 40, 40, 600, 300 ), "Score Report", "", "" ); // Make up some random data points string[] labels = { "" }; double[] y = { 800, 900 }; double[] y2 = { 500 }; // Generate a red bar with "Curve 1" in the legend BarItem myBar = myPane.AddBar( null, y, null, Color.RoyalBlue ); // Generate a blue bar with "Curve 2" in the legend myBar = myPane.AddBar( null, y2, null, Color.Red ); // Draw the X tics between the labels instead of at the labels myPane.YAxis.IsTicsBetweenLabels = true; // Set the XAxis labels myPane.YAxis.TextLabels = labels; // Set the XAxis to Text type myPane.YAxis.Type = AxisType.Text; // Fill the Axis and Pane backgrounds myPane.Chart.Fill = new Fill( Color.White, Color.FromArgb( 255, 255, 166), 90F ); myPane.PaneFill = new Fill( Color.FromArgb( 250, 250, 255) ); myPane.BarBase = BarBase.Y; myPane.MinBarGap = 0; myPane.MinClusterGap = 1; // Tell ZedGraph to refigure the // axes since the data have changed myPane.AxisChange( CreateGraphics() ); #endif #if false // Standard Sample Graph myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "Wacky Widget Company\nProduction Report", "Time, Days\n(Since Plant Construction Startup)", "Widget Production\n(units/hour)" ); SetSize(); // Set the titles and axis labels myPane.Title.Text = "Wacky Widget Company\nProduction Report"; myPane.XAxis.Title.Text = "Time, Days\n(Since Plant Construction Startup)"; myPane.YAxis.Title.Text = "Widget Production\n(units/hour)"; LineItem curve; // Set up curve "Larry" double[] x = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 }; double[] y = { 20, 10, 50, 25, 35, 75, 90, 40, 33, 50 }; // Use green, with circle symbols curve = myPane.AddCurve( "Larry", x, y, Color.Green, SymbolType.Circle ); curve.Line.Width = 1.5F; // Fill the area under the curve with a white-green gradient curve.Line.Fill = new Fill( Color.White, Color.FromArgb( 60, 190, 50), 90F ); // Make it a smooth line curve.Line.IsSmooth = true; curve.Line.SmoothTension = 0.6F; // Fill the symbols with white curve.Symbol.Fill = new Fill( Color.White ); curve.Symbol.Size = 10; // Second curve is "moe" double[] x3 = { 150, 250, 400, 520, 780, 940 }; double[] y3 = { 5.2, 49.0, 33.8, 88.57, 99.9, 36.8 }; // Use a red color with triangle symbols curve = myPane.AddCurve( "Moe", x3, y3, Color.FromArgb( 200, 55, 135), SymbolType.Triangle ); curve.Line.Width = 1.5F; // Fill the area under the curve with semi-transparent pink using the alpha value curve.Line.Fill = new Fill( Color.White, Color.FromArgb( 160, 230, 145, 205), 90F ); // Fill the symbols with white curve.Symbol.Fill = new Fill( Color.White ); curve.Symbol.Size = 10; // Third Curve is a bar, called "Wheezy" double[] x4 = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 }; double[] y4 = { 30, 45, 53, 60, 75, 83, 84, 79, 71, 57 }; BarItem bar = myPane.AddBar( "Wheezy", x4, y4, Color.SteelBlue ); // Fill the bars with a RosyBrown-White-RosyBrown gradient bar.Bar.Fill = new Fill( Color.RosyBrown, Color.White, Color.RosyBrown ); // Fourth curve is a bar double[] x2 = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 }; double[] y2 = { 10, 15, 17, 20, 25, 27, 29, 26, 24, 18 }; bar = myPane.AddBar( "Curly", x2, y2, Color.RoyalBlue ); // Fill the bars with a RoyalBlue-White-RoyalBlue gradient bar.Bar.Fill = new Fill( Color.RoyalBlue, Color.White, Color.RoyalBlue ); // Fill the pane background with a gradient myPane.PaneFill = new Fill( Color.WhiteSmoke, Color.Lavender, 0F ); // Fill the axis background with a gradient myPane.Chart.Fill = new Fill( Color.FromArgb( 255, 255, 245), Color.FromArgb( 255, 255, 190), 90F ); // Make each cluster 100 user scale units wide. This is needed because the X Axis // type is Linear rather than Text or Ordinal myPane.ClusterScaleWidth = 100; // Bars are stacked myPane.BarType = BarType.Stack; // Enable the X and Y axis grids myPane.XAxis.IsShowGrid = true; myPane.YAxis.IsShowGrid = true; // Manually set the scale maximums according to user preference myPane.XAxis.Max = 1200; myPane.YAxis.Max = 120; // Add a text item to decorate the graph TextItem text = new TextItem("First Prod\n21-Oct-93", 175F, 80.0F ); // Align the text such that the Bottom-Center is at (175, 80) in user scale coordinates text.Location.AlignH = AlignH.Center; text.Location.AlignV = AlignV.Bottom; text.FontSpec.Fill = new Fill( Color.White, Color.PowderBlue, 45F ); text.FontSpec.StringAlignment = StringAlignment.Near; myPane.GraphItemList.Add( text ); // Add an arrow pointer for the above text item ArrowItem arrow = new ArrowItem( Color.Black, 12F, 175F, 77F, 100F, 45F ); arrow.Location.CoordinateFrame = CoordType.AxisXYScale; myPane.GraphItemList.Add( arrow ); // Add a another text item to to point out a graph feature text = new TextItem("Upgrade", 700F, 50.0F ); // rotate the text 90 degrees text.FontSpec.Angle = 90; // Align the text such that the Right-Center is at (700, 50) in user scale coordinates text.Location.AlignH = AlignH.Right; text.Location.AlignV = AlignV.Center; // Disable the border and background fill options for the text text.FontSpec.Fill.IsVisible = false; text.FontSpec.Border.IsVisible = false; myPane.GraphItemList.Add( text ); // Add an arrow pointer for the above text item arrow = new ArrowItem( Color.Black, 15, 700, 53, 700, 80 ); arrow.Location.CoordinateFrame = CoordType.AxisXYScale; arrow.PenWidth = 2.0F; myPane.GraphItemList.Add( arrow ); // Add a text "Confidential" stamp to the graph text = new TextItem("Confidential", 0.85F, -0.03F ); // use AxisFraction coordinates so the text is placed relative to the ChartRect text.Location.CoordinateFrame = CoordType.AxisFraction; // rotate the text 15 degrees text.FontSpec.Angle = 15.0F; // Text will be red, bold, and 16 point text.FontSpec.FontColor = Color.Red; text.FontSpec.IsBold = true; text.FontSpec.Size = 16; // Disable the border and background fill options for the text text.FontSpec.Border.IsVisible = false; text.FontSpec.Fill.IsVisible = false; // Align the text such the the Left-Bottom corner is at the specified coordinates text.Location.AlignH = AlignH.Left; text.Location.AlignV = AlignV.Bottom; myPane.GraphItemList.Add( text ); // Add a BoxItem to show a colored band behind the graph data BoxItem box = new BoxItem( new RectangleF( 0, 110, 1200, 10 ), Color.Empty, Color.FromArgb( 225, 245, 225) ); box.Location.CoordinateFrame = CoordType.AxisXYScale; // Align the left-top of the box to (0, 110) box.Location.AlignH = AlignH.Left; box.Location.AlignV = AlignV.Top; // place the box behind the axis items, so the grid is drawn on top of it box.ZOrder = ZOrder.E_BehindAxis; myPane.GraphItemList.Add( box ); // Add some text inside the above box to indicate "Peak Range" TextItem myText = new TextItem( "Peak Range", 1170, 105 ); myText.Location.CoordinateFrame = CoordType.AxisXYScale; myText.Location.AlignH = AlignH.Right; myText.Location.AlignV = AlignV.Center; myText.FontSpec.IsItalic = true; myText.FontSpec.IsBold = false; myText.FontSpec.Fill.IsVisible = false; myText.FontSpec.Border.IsVisible = false; myPane.GraphItemList.Add( myText ); // Calculate the Axis Scale Ranges Graphics g = this.CreateGraphics(); myPane.AxisChange( g ); g.Dispose(); #endif #if false // MasterPane master = new MasterPane( "ZedGraph MasterPane Example", new Rectangle( 10, 10, 10, 10 ) ); master.PaneFill = new Fill( Color.White, Color.MediumSlateBlue, 45.0F ); //master.IsShowTitle = true; //master.MarginAll = 10; //master.InnerPaneGap = 10; //master.Legend.IsVisible = true; //master.Legend.Position = LegendPos.TopCenter; /* TextItem text = new TextItem( "Priority", 0.88F, 0.12F ); text.Location.CoordinateFrame = CoordType.PaneFraction; text.FontSpec.Angle = 15.0F; text.FontSpec.FontColor = Color.Red; text.FontSpec.IsBold = true; text.FontSpec.Size = 16; text.FontSpec.Border.IsVisible = false; text.FontSpec.Border.Color = Color.Red; text.FontSpec.Fill.IsVisible = false; text.Location.AlignH = AlignH.Left; text.Location.AlignV = AlignV.Bottom; master.GraphItemList.Add( text ); text = new TextItem("DRAFT", 0.5F, 0.5F ); text.Location.CoordinateFrame = CoordType.PaneFraction; text.FontSpec.Angle = 30.0F; text.FontSpec.FontColor = Color.FromArgb( 70, 255, 100, 100 ); text.FontSpec.IsBold = true; text.FontSpec.Size = 100; text.FontSpec.Border.IsVisible = false; text.FontSpec.Fill.IsVisible = false; text.Location.AlignH = AlignH.Center; text.Location.AlignV = AlignV.Center; text.ZOrder = ZOrder.A_InFront; master.GraphItemList.Add( text ); */ ColorSymbolRotator rotator = new ColorSymbolRotator(); for ( int j=0; j<6; j++ ) { // Create a new graph with topLeft at (40,40) and size 600x400 GraphPane myPaneT = new GraphPane( new Rectangle( 40, 40, 600, 400 ), "Case #" + (j+1).ToString(), "Time, Days", "Rate, m/s" ); myPaneT.PaneFill = new Fill( Color.White, Color.LightYellow, 45.0F ); myPaneT.BaseDimension = 6.0F; // Make up some data arrays based on the Sine function double x, y; PointPairList list = new PointPairList(); for ( int i=0; i<36; i++ ) { x = (double) i + 5; y = 3.0 * ( 1.5 + Math.Sin( (double) i * 0.2 + (double) j ) ); list.Add( x, y ); } LineItem myCurve = myPaneT.AddCurve( "Type " + j.ToString(), list, rotator.NextColor, rotator.NextSymbol ); myCurve.Symbol.Fill = new Fill( Color.White ); master.Add( myPaneT ); } myPane = master[0]; Graphics g = this.CreateGraphics(); //master.AutoPaneLayout( g, PaneLayout.ExplicitRow32 ); //master.AutoPaneLayout( g, 2, 4 ); master.AutoPaneLayout( g, false, new int[] { 1, 3, 2 }, new float[] { 2, 1, 3 } ); master.AxisChange( g ); g.Dispose(); #endif #if false // MasterPane - Single Pane master = new MasterPane( "ZedGraph MasterPane Single Pane Example", new Rectangle( 10, 10, 10, 10 ) ); master.Fill = new Fill( Color.White, Color.MediumSlateBlue, 45.0F ); // Create a new graph with topLeft at (40,40) and size 600x400 GraphPane myPaneT = new GraphPane( new Rectangle( 40, 40, 600, 400 ), "Case 1", "Time, Days", "Rate, m/s" ); myPaneT.Fill = new Fill( Color.White, Color.LightYellow, 45.0F ); myPaneT.BaseDimension = 6.0F; // Make up some data arrays based on the Sine function double x, y; PointPairList list = new PointPairList(); for ( int i=0; i<36; i++ ) { x = (double) i + 5; y = 3.0 * ( 1.5 + Math.Sin( (double) i * 0.2 ) ); list.Add( x, y ); } LineItem myCurve = myPaneT.AddCurve( "Type 1", list, Color.Blue, SymbolType.Circle ); myCurve.Symbol.Fill = new Fill( Color.White ); master.Add( myPaneT ); Graphics g = this.CreateGraphics(); master.Title.IsVisible = false; master.Margin.All = 0; //master.AutoPaneLayout( g, PaneLayout.ExplicitRow32 ); //master.AutoPaneLayout( g, 2, 4 ); master.AutoPaneLayout( g ); //master.AutoPaneLayout( g, false, new int[] { 1, 3, 2 }, new float[] { 2, 1, 3 } ); master.AxisChange( g ); g.Dispose(); #endif #if false // Pie myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "2004 ZedGraph Sales by Region\n($M)", "", "" ); myPane.FontSpec.IsItalic = true; myPane.FontSpec.Size = 24f; myPane.FontSpec.Family = "Times"; myPane.PaneFill = new Fill( Color.White, Color.Goldenrod, 45.0f ); myPane.Chart.Fill.Type = FillType.None; myPane.Legend.Position = LegendPos.Float ; myPane.Legend.Location = new Location( 0.95f, 0.15f, CoordType.PaneFraction, AlignH.Right, AlignV.Top ); myPane.Legend.FontSpec.Size = 10f; myPane.Legend.IsHStack = false; PieItem segment1 = myPane.AddPieSlice( 20, Color.Navy, Color.White, 45f, 0, "North" ); PieItem segment3 = myPane.AddPieSlice( 30, Color.Purple, Color.White, 45f, .0, "East" ); PieItem segment4 = myPane.AddPieSlice( 10.21, Color.LimeGreen, Color.White, 45f, 0, "West" ); PieItem segment2 = myPane.AddPieSlice( 40, Color.SandyBrown, Color.White, 45f, 0.2, "South" ); PieItem segment6 = myPane.AddPieSlice( 250, Color.Red, Color.White, 45f, 0, "Europe" ); PieItem segment7 = myPane.AddPieSlice( 50, Color.Blue, Color.White, 45f, 0.2, "Pac Rim" ); PieItem segment8 = myPane.AddPieSlice( 400, Color.Green, Color.White, 45f, 0, "South America" ); PieItem segment9 = myPane.AddPieSlice( 50, Color.Yellow, Color.White, 45f, 0.2, "Africa" ); segment2.LabelDetail.FontSpec.FontColor = Color.Red ; CurveList curves = myPane.CurveList ; double total = 0 ; for ( int x = 0 ; x < curves.Count ; x++ ) total += ((PieItem)curves[x]).Value ; TextItem text = new TextItem( "Total 2004 Sales\n" + "$" + total.ToString () + "M", 0.18F, 0.40F, CoordType.PaneFraction ); text.Location.AlignH = AlignH.Center; text.Location.AlignV = AlignV.Bottom; text.FontSpec.Border.IsVisible = false ; text.FontSpec.Fill = new Fill( Color.White, Color.FromArgb( 255, 100, 100 ), 45F ); text.FontSpec.StringAlignment = StringAlignment.Center ; myPane.GraphItemList.Add( text ); TextItem text2 = new TextItem( text ); text2.FontSpec.Fill = new Fill( Color.Black ); text2.Location.X += 0.008f; text2.Location.Y += 0.01f; myPane.GraphItemList.Add( text2 ); myPane.AxisChange( this.CreateGraphics() ); #endif #if false // simple pie myPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "People Signed Up", "", "" ); // Create some pie slices PieItem segment1 = myPane.AddPieSlice(8, Color.Green, .3, "Signed Up"); PieItem segment2 = myPane.AddPieSlice(5,Color.Red, 0.0, "Still Needed"); //segment1.FontSpec = new FontSpec("GenericSansSerif", 35, Color.Black, true, false, false); // Sum up the values CurveList curves = myPane.CurveList; double total = 0; for (int x = 0; x < curves.Count; x++) total += ((PieItem)curves[x]).Value; myPane.PaneBorder.IsVisible = false; myPane.Legend.Border.IsVisible = false; myPane.Legend.Position = LegendPos.TopCenter; // ArrowItem arrow = new ArrowItem( (float) new XDate(2007,1,1), 0, (float) new XDate(2007,1,1), 50 ); #endif #if false // Commerical Sales Graph myPane = new GraphPane( new RectangleF(0,0,10,10), "Sales Growth Compared to\nActual Sales by Store Size - Rank Order Low to High", "", "" ); myPane.MarginAll = 20; myPane.FontSpec.Size = 10; myPane.Legend.Position = LegendPos.BottomCenter; myPane.Legend.FontSpec.Size = 7; Random rand = new Random(); double y1 = 184; PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); PointPairList trendList = new PointPairList(); PointPairList projList = new PointPairList(); string[] labels = new string[26]; for ( int i=0; i<26; i++ ) { double h1 = rand.NextDouble() * 10 - 2; double h2 = rand.NextDouble() * 10 - 2; double h3 = rand.NextDouble() * 8; double y2 = y1 + ( rand.NextDouble() * 2 - 1 ); trendList.Add( i + 1.0 - 0.2, y1 ); trendList.Add( i + 1.0 + 0.2, y2 ); list1.Add( (double) i, y1+h1, y1 ); list2.Add( (double) i, y2+h2, y2 ); projList.Add( (double) i + 1.0 - 0.35, y1 + h3 ); projList.Add( (double) i + 1.0 + 0.35, y1 + h3 ); projList.Add( PointPair.Missing, PointPair.Missing ); labels[i] = "Store " + (i+1).ToString(); y1 += rand.NextDouble() * 4.0; } PointPairList minTargList = new PointPairList(); minTargList.Add( 0.7, 218 ); minTargList.Add( 26.3, 218 ); PointPairList prefTargList = new PointPairList(); prefTargList.Add( 0.7, 228 ); prefTargList.Add( 26.3, 228 ); LineItem minCurve = myPane.AddCurve("Minimum Target", minTargList, Color.Green, SymbolType.None ); minCurve.Line.Width = 3.0f; minCurve.IsOverrideOrdinal = true; LineItem prefCurve = myPane.AddCurve("Preferred Target", prefTargList, Color.Blue, SymbolType.None ); prefCurve.Line.Width = 3.0f; prefCurve.IsOverrideOrdinal = true; LineItem projCurve = myPane.AddCurve( "Projected Sales", projList, Color.Orange, SymbolType.None ); projCurve.IsOverrideOrdinal = true; projCurve.Line.Width = 3.0f; LineItem myCurve = myPane.AddCurve( "Trendline", trendList, Color.FromArgb( 50, 50, 50 ), SymbolType.None ); myCurve.Line.Width = 2.5f; myCurve.Line.IsSmooth = true; myCurve.Line.SmoothTension = 0.3f; myCurve.IsOverrideOrdinal = true; BarItem myBar = myPane.AddBar( "Store Growth", list1, Color.Black ); //myBar.Bar.Fill = new Fill( Color.Black ); BarItem myBar2 = myPane.AddBar( "Average Growth", list2, Color.LightGray ); //myBar2.Bar.Fill = new Fill( Color.LightGray ); myPane.XAxis.Type = AxisType.Text; myPane.XAxis.TextLabels = labels; myPane.XAxis.Scale.FontSpec.Angle = -90; myPane.XAxis.Scale.FontSpec.Size = 8; myPane.XAxis.Scale.FontSpec.IsBold = true; myPane.XAxis.IsTicsBetweenLabels = true; myPane.XAxis.IsInsideTic = false; myPane.XAxis.IsOppositeTic = false; myPane.XAxis.IsMinorInsideTic = false; myPane.XAxis.IsMinorOppositeTic = false; myPane.YAxis.Scale.FontSpec.Size = 8; myPane.YAxis.Scale.FontSpec.IsBold = true; myPane.YAxis.IsShowGrid = true; myPane.YAxis.GridDashOn = 1.0f; myPane.YAxis.GridDashOff = 0.0f; myPane.BarType = BarType.ClusterHiLow; myPane.AxisChange( this.CreateGraphics() ); myPane.YAxis.MinorStep = myPane.YAxis.Step; #endif #if false // Basic curve test - Images as symbols myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<10; i++ ) { double x = (double) i; double y = Math.Sin( x / 8.0 ); list.Add( x, y ); } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); Bitmap bm = new Bitmap( @"c:\windows\winnt256.bmp" ); Image image = Image.FromHbitmap( bm.GetHbitmap() ); myCurve.Line.IsVisible = false; myCurve.Symbol.Type = SymbolType.Square; myCurve.Symbol.Size = 16; myCurve.Symbol.Border.IsVisible = false; myCurve.Symbol.Fill = new Fill( image, WrapMode.Clamp ); myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 359; trackBar1.Value = 0; #endif #if false // Stick Item Test myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<100; i++ ) { double x = (double) i; double y = Math.Sin( i / 8.0 ); double z = Math.Abs(Math.Cos( i / 8.0 )) * y; list.Add( x, y, z ); } StickItem myCurve = myPane.AddStick( "curve", list, Color.Blue ); myCurve.Line.Width = 2.0f; myPane.XAxis.IsShowGrid = true; myPane.XAxis.Max = 100; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 359; trackBar1.Value = 0; #endif #if false // Basic curve test - Dual Y axes myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); myPane.Y2Axis.Title.Text = "My Y2 Axis"; PointPairList list = new PointPairList(); PointPairList list2 = new PointPairList(); for ( int i=0; i<100; i++ ) { double x = (double) i; double y = Math.Sin( i / 8.0 ) * 100000 + 150000; double y2 = Math.Sin( i / 3.0 ) * 300 - 400; list.Add( x, y ); list2.Add( x, y2 ); //double z = Math.Abs( Math.Cos( i / 8.0 ) ) * y; } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); LineItem myCurve2 = myPane.AddCurve( "curve2", list2, Color.Red, SymbolType.Diamond ); myCurve2.IsY2Axis = true; myPane.Y2Axis.IsVisible = true; AlignYZeroLines( myPane, 12 ); myPane.YAxis.IsMinorOppositeTic = false; myPane.Y2Axis.IsMinorOppositeTic = false; trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic curve test - Multi-Y axes myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); myPane.AddYAxis( "Another Y Axis" ); myPane.AddY2Axis( "Another Y2 Axis" ); myPane.Y2Axis.Title.Text = "My Y2 Axis"; myPane.Y2AxisList[0].IsVisible = true; myPane.Y2AxisList[1].IsVisible = true; PointPairList list = new PointPairList(); for ( int i=0; i<100; i++ ) { //double x = (double) i; double x = new XDate( 2001, 1, i*3 ); double y = Math.Sin( i / 8.0 ) * 100000 + 100001; list.Add( x, y ); double z = Math.Abs( Math.Cos( i / 8.0 ) ) * y; } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); myCurve.YAxisIndex = 1; myPane.XAxis.IsSkipLastLabel = false; myPane.XAxis.Type = AxisType.DateAsOrdinal; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic curve test - Date Axis w/ Time Span myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<100; i++ ) { double x = (double) i/123.0; //double x = new XDate( 0, 0, i, i*3, i*2, i ); double y = Math.Sin( i / 8.0 ) * 1 + 1; list.Add( x, y ); double z = Math.Abs( Math.Cos( i / 8.0 ) ) * y; } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); myPane.XAxis.IsSkipLastLabel = false; //myPane.XAxis.IsPreventLabelOverlap = false; myPane.XAxis.ScaleFormat = "[d].[h]:[m]:[s]"; myPane.XAxis.Type = AxisType.Date; myPane.AxisChange( this.CreateGraphics() ); myPane.YAxis.ScaleFormat = "0.0'%'"; trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; myPane.PaneFill = new Fill( Color.FromArgb( 100, Color.Blue ), Color.FromArgb( 100, Color.White ), 45.0f ); #endif #if false // Basic curve test - DateAsOrdinal myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<100; i++ ) { //double x = (double) i; double x = new XDate( 2001, 1, i*3 ); double y = Math.Sin( i / 8.0 ) * 100000 + 100001; list.Add( x, y ); double z = Math.Abs( Math.Cos( i / 8.0 ) ) * y; } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); myPane.XAxis.IsSkipLastLabel = false; myPane.XAxis.IsPreventLabelOverlap = false; myPane.XAxis.ScaleFormat = ZedGraph.Axis.Default.FormatDayDay; myPane.XAxis.Type = AxisType.DateAsOrdinal; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic curve test - Linear Axis myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<20; i++ ) { double x = (double) i; double y = Math.Sin( x / 8.0 ); double z = Math.Abs(Math.Cos( i / 8.0 )) * y; list.Add( x, y, z ); } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); //myPane.XAxis.Min = 1; //myPane.XAxis.Max = 100; //myPane.XAxis.IsReverse = true; //myPane.XAxis.Type = AxisType.Log; //RectangleF rect = new RectangleF( 3, 0.7, 8, 0.2 ); myPane.AxisChange( this.CreateGraphics() ); BoxItem m_selectionBox = new BoxItem(); // rect ); m_selectionBox.Border.Color = Color.Orange; m_selectionBox.Border.IsVisible = true; m_selectionBox.Fill.Color = Color.LightYellow; m_selectionBox.Fill.Type = FillType.Solid; m_selectionBox.Fill.RangeMin = 1.0; m_selectionBox.Fill.RangeMax = 1.0; m_selectionBox.Fill.IsVisible = true; m_selectionBox.Location = new Location( (float)3, (float)myPane.YAxis.Max, (float)(8 - 3), (float)myPane.YAxis.Max - (float)myPane.YAxis.Min, CoordType.AxisXYScale, AlignH.Left, AlignV.Top); m_selectionBox.IsClippedToChartRect = true; m_selectionBox.ZOrder = ZOrder.E_BehindAxis; m_selectionBox.IsVisible = true; myPane.GraphItemList.Add( m_selectionBox ); #endif #if false // Box and Whisker diagram myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); // Throw some data points on the chart for good looks PointPairList list = new PointPairList(); for ( int i=0; i<20; i++ ) { double x = (double) i * 5; double y = Math.Sin( x / 8.0 ); list.Add( x, y ); } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); myCurve.Line.IsVisible = false; // Horizontal box and whisker chart // yval is the vertical position of the box & whisker double yval = 0.3; // pct5 = 5th percentile value double pct5 = 5; // pct25 = 25th percentile value double pct25 = 40; // median = median value double median = 55; // pct75 = 75th percentile value double pct75 = 80; // pct95 = 95th percentile value double pct95 = 95; // Draw the box PointPairList list2 = new PointPairList(); list2.Add( pct25, yval, median ); list2.Add( median, yval, pct75 ); HiLowBarItem myBar = myPane.AddHiLowBar( "box", list2, Color.Black ); // set the size of the box (in points, scaled to graph size) myBar.Bar.Size = 20; myBar.Bar.Fill.IsVisible = false; myPane.BarBase = BarBase.Y; // Draw the whiskers double[] xwhisk = { pct5, pct25, PointPair.Missing, pct75, pct95 }; double[] ywhisk = { yval, yval, yval, yval, yval }; PointPairList list3 = new PointPairList(); list3.Add( xwhisk, ywhisk ); LineItem mywhisk = myPane.AddCurve( "whisker", list3, Color.Black, SymbolType.None ); myPane.AxisChange( this.CreateGraphics() ); #endif #if false // Basic curve test - Linear Axis with Many Points myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<100000; i++ ) { double x = (double) i; double y = Math.Sin( x / 8.0 ); double z = Math.Abs(Math.Cos( i / 8.0 )) * y; list.Add( x, y, z ); } LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.HDash ); myCurve.Symbol.IsVisible = false; //myPane.XAxis.Min = 1; //myPane.XAxis.Max = 100; //myPane.XAxis.IsReverse = true; //myPane.XAxis.Type = AxisType.Log; //RectangleF rect = new RectangleF( 3, 0.7, 8, 0.2 ); Graphics g = this.CreateGraphics(); myPane.AxisChange( g ); SetSize(); int startTick = Environment.TickCount; myPane.Draw( g ); int endTick = Environment.TickCount; MessageBox.Show( "ticks = " + ( endTick - startTick ).ToString() ); #endif #if false // Gantt Chart myPane = new GraphPane(); myPane.Title.Text = "Gantt Chart"; myPane.XAxis.Title.Text = "Date"; myPane.YAxis.Title.Text = "Project"; myPane.XAxis.Type = AxisType.Date; myPane.YAxis.Type = AxisType.Text; myPane.BarBase = BarBase.Y; string[] labels = { "Project 1", "Project 2" }; myPane.YAxis.TextLabels = labels; myPane.YAxis.IsTicsBetweenLabels = true; // First, define all the bars that you want to be red PointPairList ppl = new PointPairList(); XDate start = new XDate( 2005, 10, 31 ); XDate end = new XDate( 2005, 11, 15 ); // x is start of bar, y is project number, z is end of bar // Define this first one using start/end variables for illustration ppl.Add( start, 1.0, end ); // add another red bar, assigned to project 2 // Didn't use start/end variables here, but it's the same concept ppl.Add( new XDate( 2005, 12, 16 ), 2.0, new XDate( 2005, 12, 31 ) ); HiLowBarItem myBar = myPane.AddHiLowBar( "job 1", ppl, Color.Red ); // This tells the bar that we want to manually define the Y position // Y is AxisType.Text, which is ordinal, so a Y value of 1.0 goes with the first label, // 2.0 with the second, etc. myBar.IsOverrideOrdinal = true; myBar.Bar.Fill = new Fill( Color.Red, Color.White, Color.Red, 90.0f ); // This size is the width of the bar myBar.Bar.Size = 20f; // Now, define all the bars that you want to be Green ppl = new PointPairList(); ppl.Add( new XDate( 2005, 11,16 ), 2.0, new XDate( 2005, 11, 26 ) ); myBar = myPane.AddHiLowBar( "job 2", ppl, Color.Green ); myBar.IsOverrideOrdinal = true; myBar.Bar.Fill = new Fill( Color.Green, Color.White, Color.Green, 90.0f ); myBar.Bar.Size = 20f; // Define all the bars that you want to be blue ppl = new PointPairList(); ppl.Add( new XDate( 2005, 11, 27 ), 1.0, new XDate( 2005, 12, 15 ) ); myBar = myPane.AddHiLowBar( "job 3", ppl, Color.Blue ); myBar.IsOverrideOrdinal = true; myBar.Bar.Fill = new Fill( Color.Blue, Color.White, Color.Blue, 90.0f ); myBar.Bar.Size = 20f; #endif #if false // DeSerialize DeSerialize( out myPane, @"c:\temp\myZedGraphFile" ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; myPane.AxisChange( this.CreateGraphics() ); #endif #if false // spline test myPane = new GraphPane(); PointPairList ppl = new PointPairList(); ppl.Add( 0, 713 ); ppl.Add( 7360, 333 ); ppl.Add( 10333.333, 45.333336 ); ppl.Add( 11666.667, 5 ); ppl.Add( 12483.333, 45.333336 ); ppl.Add( 13600, 110 ); ppl.Add( 15800, 184.66667 ); ppl.Add( 18644.998, 186.33368 ); ppl.Add( 18770.002, 186.66664 ); ppl.Add( 18896.666, 187.08336 ); ppl.Add( 18993.334, 187.50002 ); ppl.Add( 19098.332, 188.08334 ); ppl.Add( 19285.002, 189.41634 ); ppl.Add( 19443.332, 190.83334 ); ppl.Add( 19633.334, 193.16634 ); ppl.Add( 19823.336, 196.49983 ); ppl.Add( 19940.002, 199.16669 ); ppl.Add( 20143.303, 204.66566 ); ppl.Add( 20350, 210.91667 ); ppl.Add( 36000, 713 ); LineItem curve = myPane.AddCurve( "test", ppl, Color.Green, SymbolType.Default ); curve.Line.IsSmooth = true; curve.Line.SmoothTension = 0.4F; trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // hilowbar test myPane = new GraphPane(); myPane.Title.Text = "Bar Type Sample"; myPane.XAxis.Title.Text = "Text Axis"; myPane.YAxis.Title.Text = "Some Data Value"; myPane.XAxis.Type = AxisType.Text; myPane.ClusterScaleWidth = 1.0; //myPane.BarType = BarType.Overlay; myPane.FontSpec.Size = 18; myPane.YAxis.TitleFontSpec.Size = 16; myPane.XAxis.TitleFontSpec.Size = 16; string[] labels = { "North", "South", "East", "West", "Up", "Down" }; myPane.XAxis.TextLabels = labels; //Random rand = new Random(); double[] xArray = { 3, 5, 9, 11, 16, 18 }; double[] xArray2 = { 10, 12, 13, 15, 17, 19 }; double[] yArray = { 10, 45, 78, 34, 15, 26 }; double[] yArray2 = { 54, 34, 64, 24, 44, 74 }; PointPairList list1 = new PointPairList( xArray, yArray ); PointPairList list2 = new PointPairList( xArray2, yArray2 ); /* for ( int i = 0; i < 6; i++ ) { double x = xArray[i]; double y1 = rand.NextDouble() * 1.0 + .00001; double y2 = rand.NextDouble() * 1.0 + .00001; list1.Add( x, y1 ); list2.Add( x, y2 ); } */ HiLowBarItem bar1 = myPane.AddHiLowBar( "First", list1, Color.Blue ); HiLowBarItem bar2 = myPane.AddHiLowBar( "Second", list2, Color.Red ); //myPane.YAxis.Type = AxisType.Log; //myPane.BarType = BarType.ClusterHiLow; //myPane.XAxis.Scale.ScaleFormatEvent += new Scale.ScaleFormatHandler( CustomFormatter ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; myPane.AxisChange( this.CreateGraphics() ); #endif #if false // Basic bar test - Linear myPane = new GraphPane(); myPane.Title.Text = "BarItem Sample (BarType.ClusterHiLow)"; myPane.XAxis.Title.Text = "Text Axis"; myPane.YAxis.Title.Text = "Some Data Value"; myPane.XAxis.Type = AxisType.Text; myPane.ClusterScaleWidth = 2.0; myPane.BarType = BarType.ClusterHiLow; myPane.FontSpec.Size = 18; myPane.YAxis.TitleFontSpec.Size = 16; myPane.XAxis.TitleFontSpec.Size = 16; string[] labels = { "North", "South", "East", "West", "Up", "Down" }; myPane.XAxis.TextLabels = labels; //Random rand = new Random(); //double[] xArray = { 3, 5, 9, 11, 16, 18 }; double[] xArray = { 1, 1.8, 3.2, 4, 5, 6 }; double[] xArray2 = { 10, 12, 13, 15, 17, 19 }; double[] yArray = { 10, 75, 25, 16, 15, 26 }; double[] yArray2 = { 54, 62, 44, 24, 44, 74 }; double[] ylArray2 = { 34, 42, 15, 0, 5, 20 }; double[] yArray3 = { 54, 62, 44, 24, 34, 74 }; double[] ylArray3 = { 44, 42, 14, 14, 14, 34 }; PointPairList list1 = new PointPairList( xArray, yArray, ylArray2 ); PointPairList list2 = new PointPairList( xArray, yArray2, ylArray2 ); PointPairList list3 = new PointPairList( xArray, yArray3, ylArray3 ); /* for ( int i = 0; i < 6; i++ ) { double x = xArray[i]; double y1 = rand.NextDouble() * 1.0 + .00001; double y2 = rand.NextDouble() * 1.0 + .00001; list1.Add( x, y1 ); list2.Add( x, y2 ); } */ //ErrorBarItem bar1 = myPane.AddErrorBar( "First", list3, Color.Blue ); //bar1.ErrorBar.Symbol.Size = 12; //bar1.ErrorBar.PenWidth = 2; //HiLowBarItem bar1 = myPane.AddHiLowBar( "First", list3, Color.Blue ); //bar1.Bar.Size = 20; BarItem bar1 = myPane.AddBar( "First", list1, Color.Blue ); BarItem bar2 = myPane.AddBar( "Second", list2, Color.Red ); //myPane.YAxis.Type = AxisType.Log; //myPane.BarType = BarType.ClusterHiLow; //myPane.XAxis.Scale.ScaleFormatEvent += new Scale.ScaleFormatHandler( CustomFormatter ); myPane.YAxis.IsTitleAtCross = false; trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; myPane.AxisChange( this.CreateGraphics() ); #endif #if false // Bars - different colors thru IsOverrideOrdinal myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); /* PointPairList list1 = new PointPairList(); list1.Add(1,13); HiLowBarItem bar1 = myPane.AddHiLowBar( "First", list1, Color.Blue ); PointPairList list2 = new PointPairList(); list2.Add(2,22); HiLowBarItem bar2 = myPane.AddHiLowBar( "Second", list2, Color.Red ); bar1.Bar.Size = 30; bar1.IsOverrideOrdinal = true; bar2.Bar.Size = 30; bar2.IsOverrideOrdinal = true; */ PointPairList list1 = new PointPairList(); list1.Add(1,13); BarItem bar1 = myPane.AddBar( "First", list1, Color.Blue ); PointPairList list2 = new PointPairList(); list2.Add(2,22); BarItem bar2 = myPane.AddBar( "Second", list2, Color.Red ); bar1.IsOverrideOrdinal = true; bar2.IsOverrideOrdinal = true; myPane.Legend.Position = LegendPos.TopFlushLeft; myPane.BarType = BarType.Overlay; myPane.XAxis.Type = AxisType.Text; string[] labels = { "Label1", "Label2" }; myPane.XAxis.TextLabels = labels; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic curve test - two text axes myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); double[] y = { 2, 4, 1, 5, 3 }; LineItem myCurve = myPane.AddCurve( "curve 1", null, y, Color.Blue, SymbolType.Diamond ); myCurve.IsOverrideOrdinal = true; myPane.XAxis.Type = AxisType.Text; myPane.YAxis.Type = AxisType.Text; string[] xLabels = { "one", "two", "three", "four", "five" }; string[] yLabels = { "alpha", "bravo", "charlie", "delta", "echo" }; //myPane.XAxis.TextLabels = xLabels; //myPane.YAxis.TextLabels = yLabels; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic horizontal bar test myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); for ( int i=0; i<5; i++ ) { double y = (double) i; //double x = new XDate( 2001, 1, i*3 ); double x = Math.Sin( i / 8.0 ) * 100000 + 100001; list.Add( x, y ); //double z = Math.Abs( Math.Cos( i / 8.0 ) ) * y; } PointPairList list2 = new PointPairList( list ); PointPairList list3 = new PointPairList( list ); BarItem myCurve = myPane.AddBar( "curve 1", list, Color.Blue ); BarItem myCurve2 = myPane.AddBar( "curve 2", list2, Color.Red ); BarItem myCurve3 = myPane.AddBar( "curve 3", list3, Color.Green ); //myPane.XAxis.IsSkipLastLabel = false; //myPane.XAxis.IsPreventLabelOverlap = false; //myPane.XAxis.ScaleFormat = "dd/MM HH:mm"; //myPane.XAxis.Type = AxisType.Date; myPane.BarType = BarType.PercentStack; myPane.BarBase = BarBase.Y; myPane.AxisChange( this.CreateGraphics() ); ValueHandler valueHandler = new ValueHandler(myPane, true); const float shift = 0; int iOrd = 0; foreach (CurveItem oCurveItem in myPane.CurveList) { BarItem oBarItem = oCurveItem as BarItem; if (oBarItem != null) { PointPairList oPointPairList = oCurveItem.Points as PointPairList; for (int i=0; i<oPointPairList.Count; i++) { double xVal = oPointPairList[i].X; string sLabel = string.Concat(xVal.ToString("F0"), "%"); double yVal = valueHandler.BarCenterValue(oCurveItem, oCurveItem.GetBarWidth(myPane), i, oPointPairList[i].Y, iOrd); double x1, x2, y; valueHandler.GetValues( oCurveItem, i, out y, out x1, out x2 ); xVal = ( x1 + x2 ) / 2.0; TextItem oTextItem = new TextItem(sLabel, (float) xVal + (xVal > 0 ? shift : -shift ), (float) yVal); oTextItem.Location.CoordinateFrame = CoordType.AxisXYScale; oTextItem.Location.AlignH = AlignH.Center; oTextItem.Location.AlignV = AlignV.Center; oTextItem.FontSpec.Border.IsVisible = true; oTextItem.FontSpec.Angle = 0; oTextItem.FontSpec.Fill.IsVisible = false; myPane.GraphItemList.Add(oTextItem); } } iOrd++; } trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // vertical bars with labels myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList list = new PointPairList(); PointPairList list2 = new PointPairList(); PointPairList list3 = new PointPairList(); Random rand = new Random(); for ( int i=0; i<5; i++ ) { double x = (double) i; double y = rand.NextDouble() * 1000; double y2 = rand.NextDouble() * 1000; double y3 = rand.NextDouble() * 1000; list.Add( x, y ); list2.Add( x, y2 ); list3.Add( x, y3 ); } BarItem myCurve = myPane.AddBar( "curve 1", list, Color.Blue ); BarItem myCurve2 = myPane.AddBar( "curve 2", list2, Color.Red ); BarItem myCurve3 = myPane.AddBar( "curve 3", list3, Color.Green ); //myPane.XAxis.IsReverse = true; myPane.AxisChange( this.CreateGraphics() ); myPane.XAxis.IsTicsBetweenLabels = true; string[] labels = { "one", "two", "three", "four", "five" }; myPane.XAxis.TextLabels = labels; myPane.XAxis.Type = AxisType.Text; //myPane.XAxis.Step = 3; myPane.XAxis.IsAllTics = false; ArrowItem tic = new ArrowItem( Color.Black, 1.0f, 2.5f, 0.99f, 2.5f, 1.01f ); tic.IsArrowHead = false; tic.Location.CoordinateFrame = CoordType.XScaleYAxisFraction; myPane.GraphItemList.Add( tic ); CreateBarLabels( myPane ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic curve test - log/exponential axis myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); PointPairList ppl1 = new PointPairList(); PointPairList ppl2 = new PointPairList(); for ( int i=0; i<100; i++ ) { double x = (double) i * 1.52 + 0.001; double x2 = x*10000; double y = Math.Sin( i / 8.0 ) * 100000 + 100001; double y2 = Math.Sin( i / 8.0 ) * 100000 + 100001; double z = Math.Abs( Math.Cos( i / 8.0 ) ) * y; ppl1.Add( x, y, z ); ppl2.Add( x2, y2, z ); } LineItem myCurve = myPane.AddCurve( "curve", ppl1, Color.Blue, SymbolType.Diamond ); LineItem myCurve2 = myPane.AddCurve( "curve2", ppl2, Color.Red, SymbolType.Triangle ); myPane.XAxis.IsUseTenPower = false; myPane.XAxis.Type = AxisType.Log; myPane.XAxis.Exponent = 0.3; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // Basic curve test myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); double[] x = new double[100]; double[] y = new double[100]; for ( int i=0; i<100; i++ ) { x[i] = (double) i; y[i] = Math.Sin( i / 8.0 ) * 100000 + 100001; double z = Math.Abs(Math.Cos( i / 8.0 )) * y[i]; } BasicArrayPointList list = new BasicArrayPointList( x, y ); //LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); LineItem myCurve = myPane.AddCurve( "curve", list, Color.Blue, SymbolType.Diamond ); //myCurve.Symbol.IsVisible = true; //myCurve.IsY2Axis = true; //myPane.Y2Axis.IsVisible = true; //myPane.YAxis.Type = AxisType.Log; //myPane.YAxis.IsScaleVisible = false; //myPane.YAxis.IsShowTitle = false; //myPane.MarginLeft = 50; //TextItem text = new TextItem("5000", -0.01f, 5000f, CoordType.XAxisFractionYScale, AlignH.Right, AlignV.Center ); //text.FontSpec.Border.IsVisible = false; //text.FontSpec.Fill.IsVisible = false; //myPane.GraphItemList.Add( text ); //TextItem text2 = new TextItem( "My Title", 0.01f, 0.5f, CoordType.XPaneFractionYAxisFraction, // AlignH.Center, AlignV.Top ); //text2.FontSpec.Border.IsVisible = false; //text2.FontSpec.Fill.IsVisible = false; //text2.FontSpec.Angle = 90f; //myPane.GraphItemList.Add( text2 ); //myPane.YAxis.IsVisible = false; //myPane.Y2Axis.Title.Text = "Y2 Axis"; //myPane.XAxis.BaseTic = 1; //myPane.XAxis.Step = 5; //myPane.Y2Axis.Cross = 60; //myPane.YAxis.IsScaleLabelsInside = true; //myPane.Y2Axis.IsShowGrid = true; //myPane.XAxis.IsShowGrid = true; //myPane.YAxis.IsSkipFirstLabel = true; myPane.XAxis.IsSkipLastLabel = true; //myPane.XAxis.IsSkipLastLabel = true; //myPane.XAxis.IsReverse = true; //myPane.AxisBorder.IsVisible = false; //myPane.XAxis.Type = AxisType.Log; PointF[] polyPts = new PointF[7]; polyPts[0] = new PointF( 30f, 0.2f ); polyPts[1] = new PointF( 25f, 0.4f ); polyPts[2] = new PointF( 27f, 0.6f ); polyPts[3] = new PointF( 30f, 0.8f ); polyPts[4] = new PointF( 35f, 0.6f ); polyPts[5] = new PointF( 37f, 0.4f ); polyPts[6] = new PointF( 30f, 0.2f ); PolyItem poly = new PolyItem( polyPts, Color.Red, Color.LightSeaGreen, Color.White ); myPane.GraphItemList.Add( poly ); myPane.AxisChange( this.CreateGraphics() ); myPane.FontSpec.IsDropShadow = true; myPane.FontSpec.DropShadowColor = Color.Red; myPane.FontSpec.Border.IsVisible = true; myPane.FontSpec.Fill = new Fill( Color.White, Color.LightGoldenrodYellow ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif #if false // repetitive points myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); double[] Track_DateTime_Xaxis = {1}; double[] Y_processed_axis = {10}; LineItem myCurve = myPane.AddCurve( "Curve Legend", Track_DateTime_Xaxis, Y_processed_axis, Color.DarkRed ); myCurve.Symbol.Fill = new Fill( Color.Red ); myPane.XAxis.Max = 1; myPane.YAxis.IsShowGrid = true; myPane.YAxis.IsShowMinorGrid = true; //myPane.AxisChange( g ); #endif #if false // masterpane test master = new MasterPane( "ZedGraph MasterPane Example", new Rectangle( 10, 10, this.Width-20, this.Height-100 ) ); master.PaneFill = new Fill( Color.White, Color.MediumSlateBlue, 45.0F ); master.Legend.IsVisible = true; master.Legend.Position = LegendPos.TopCenter; TextItem text = new TextItem( "Priority", 0.88F, 0.12F ); text.Location.CoordinateFrame = CoordType.PaneFraction; text.FontSpec.Angle = 15.0F; text.FontSpec.FontColor = Color.Red; text.FontSpec.IsBold = true; text.FontSpec.Size = 16; text.FontSpec.Border.IsVisible = false; text.FontSpec.Border.Color = Color.Red; text.FontSpec.Fill.IsVisible = false; text.Location.AlignH = AlignH.Left; text.Location.AlignV = AlignV.Bottom; master.GraphItemList.Add( text ); text = new TextItem( "DRAFT", 0.5F, 0.5F ); text.Location.CoordinateFrame = CoordType.PaneFraction; text.FontSpec.Angle = 30.0F; text.FontSpec.FontColor = Color.FromArgb( 70, 255, 100, 100 ); text.FontSpec.IsBold = true; text.FontSpec.Size = 100; text.FontSpec.Border.IsVisible = false; text.FontSpec.Fill.IsVisible = false; text.Location.AlignH = AlignH.Center; text.Location.AlignV = AlignV.Center; text.ZOrder = ZOrder.A_InFront; master.GraphItemList.Add( text ); ColorSymbolRotator rotator = new ColorSymbolRotator(); for ( int j=0; j<8; j++ ) { // Create a new graph - rect dimensions do not matter here, since it // will be resized by MasterPane.AutoPaneLayout() GraphPane newPane = new GraphPane( new Rectangle( 10, 10, 10, 10 ), "Case #" + (j+1).ToString(), "Time, Days", "Rate, m/s" ); newPane.PaneFill = new Fill( Color.PowderBlue, Color.LightYellow, 45.0F ); newPane.BaseDimension = 6.0F; // Make up some data arrays based on the Sine function double x, y; PointPairList list = new PointPairList(); for ( int i=0; i<36; i++ ) { x = (double) i + 5; y = 3.0 * ( 1.5 + Math.Sin( (double) i * 0.2 + (double) j ) ); list.Add( x, y ); } LineItem myCurve = newPane.AddCurve( "Type " + j.ToString(), list, rotator.NextColor, rotator.NextSymbol ); myCurve.Symbol.Fill = new Fill( Color.White ); master.Add( newPane ); } Graphics g = this.CreateGraphics(); master.AutoPaneLayout( g, PaneLayout.SquareRowPreferred); master.AxisChange( g ); #endif #if false // Create a new GraphPane myPane = new GraphPane( new RectangleF( 0, 0, 640, 480 ), "Title", "XAxis", "YAxis" ); string[] labels = { "Panther", "Lion", "Cheetah", "Cougar", "Tiger", "Leopard" }; double[] x = { 100, 115, 75, 22, 98, 40 }; double[] x2 = { 120, 175, 95, 57, 113, 110 }; double[] x3 = { 204, 192, 119, 80, 134, 156 }; BarItem myCurve = myPane.AddBar( "Here", x, null, Color.Red ); myCurve.Bar.Fill = new Fill( Color.Red, Color.White, Color.Red, 90f ); myCurve = myPane.AddBar( "There", x2, null, Color.Blue ); myCurve.Bar.Fill = new Fill( Color.Blue, Color.White, Color.Blue, 90f ); myCurve = myPane.AddBar( "Elsewhere", x3, null, Color.Green ); myCurve.Bar.Fill = new Fill( Color.Green, Color.White, Color.Green, 90f ); myPane.YAxis.IsTicsBetweenLabels = true; myPane.YAxis.TextLabels = labels; myPane.YAxis.Type = AxisType.Text; myPane.BarType = BarType.Stack; myPane.BarBase = BarBase.Y; myPane.Chart.Fill = new Fill( Color.White, Color.FromArgb( 255, 255, 166), 45.0F ); #endif #if false // ordinal demo myPane = new GraphPane( new RectangleF( 0, 0, 300, 200 ), "Ordinal Demo", "X Value (ordinal)", "Y Value" ); PointPairList list = new PointPairList(); list.Add( 10, 50 ); list.Add( 11, 24 ); list.Add( 20, 75 ); list.Add( 21, 62 ); LineItem myCurve = myPane.AddCurve( "Curve", list, Color.Blue, SymbolType.Diamond ); myCurve.Symbol.Fill = new Fill( Color.White ); myPane.FontSpec.Size = 24; myPane.XAxis.TitleFontSpec.Size = 18; myPane.XAxis.Scale.FontSpec.Size = 18; myPane.YAxis.TitleFontSpec.Size = 18; myPane.YAxis.Scale.FontSpec.Size = 18; myPane.XAxis.Type = AxisType.Ordinal; myPane.AxisChange( this.CreateGraphics() ); trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; #endif if ( master != null ) _crossAxis = master[0].Y2Axis; else _crossAxis = myPane.YAxisList[1]; trackBar1.Minimum = 0; trackBar1.Maximum = 100; trackBar1.Value = 50; UpdateControls(); SetSize(); //this.WindowState = FormWindowState.Maximized ; if ( this.myPane != null ) this.myPane.AxisChange( this.CreateGraphics() ); }
private void OnRenderGraph(System.Drawing.Graphics g, ZedGraph.MasterPane mPane) { //mPane[0] = new GraphPane(); mPane.AxisChange(g); }
/// <summary> /// This method is where you generate your graph. /// </summary> /// <param name="masterPane">You are provided with a MasterPane instance that /// contains one GraphPane by default (accessible via masterPane[0]).</param> /// <param name="g">A graphics instance so you can easily make the call to AxisChange()</param> /// <param name="z">And a ZedGraphWeb instance because the event handler requires it</param> /// <param name="row">Selected row n gridview.</param> private static void OnRenderGraphVillagePie(ZedGraphWeb z, Graphics g, MasterPane masterPane, TableRow row) { // Get the GraphPane so we can work with it GraphPane myPane = masterPane[0]; // Fill the pane background with a color gradient myPane.Fill = new Fill(Color.White, Color.White, 45.0f); // No fill for the chart background myPane.Chart.Fill.Type = FillType.None; myPane.Legend.IsVisible = false; myPane.Legend.IsShowLegendSymbols = true; myPane.Legend.IsHStack = false; // Add some pie slices const string srcTable = "Goods"; DataBase dataBase = new DataBase(); DataSet dataSet = dataBase.GetGoods(srcTable, Misc.String2Number(row.Cells[0].Text.Trim())); DataRow dataRow = dataSet.Tables[srcTable].Rows[0]; int wood = Misc.String2Number(dataRow.ItemArray[0].ToString()); int clay = Misc.String2Number(dataRow.ItemArray[1].ToString()); int iron = Misc.String2Number(dataRow.ItemArray[2].ToString()); int crop = Misc.String2Number(dataRow.ItemArray[3].ToString()); PieItem segmentWood = myPane.AddPieSlice(wood, Color.Green, Color.Green, 45f, 0, wood.ToString()); PieItem segmentClay = myPane.AddPieSlice(clay, Color.OrangeRed, Color.OrangeRed, 45f, .0, clay.ToString()); PieItem segmentIron = myPane.AddPieSlice(iron, Color.Blue, Color.Blue, 45f, 0, iron.ToString()); PieItem segmentCrop = myPane.AddPieSlice(crop, Color.Yellow, Color.Yellow, 45f, 0.2, crop.ToString()); segmentWood.LabelDetail.FontSpec.Size = 20f; segmentClay.LabelDetail.FontSpec.Size = 20f; segmentIron.LabelDetail.FontSpec.Size = 20f; segmentCrop.LabelDetail.FontSpec.Size = 20f; // Sum up the pie values CurveList curves = myPane.CurveList; double total = 0; for (int x = 0; x < curves.Count; x++) { total += ((PieItem) curves[x]).Value; } // Set the GraphPane title //myPane.Title.Text = String.Format("Total Goods : {0}\nWood : {1}\nClay : {2}\nIron : {3}\nCrop : {4}", total, // wood, clay, iron, crop); myPane.Title.Text = String.Format("Total Goods : {0}", total); myPane.Title.FontSpec.IsItalic = true; myPane.Title.FontSpec.Size = 24f; myPane.Title.FontSpec.Family = "Times New Roman"; masterPane.AxisChange(g); }
private void OnRenderUserChart(ZedGraphWeb z, Graphics g, MasterPane masterPane) { GraphPane graphPane = masterPane[0]; graphPane.Title.Text = Resource.SalesByMonthChartLabel; graphPane.XAxis.Title.Text = Resource.SalesByMonthChartMonthLabel; graphPane.YAxis.Title.Text = Resource.SalesByMonthChartSalesLabel; PointPairList pointList = new PointPairList(); if (salesByMonthData == null) { salesByMonthData = CommerceReport.GetSalesByYearMonthBySite(siteSettings.SiteGuid); } foreach (DataRow row in salesByMonthData.Rows) { double x = new XDate(Convert.ToInt32(row["Y"]), Convert.ToInt32(row["M"]), 1); double y = Convert.ToDouble(row["Sales"]); pointList.Add(x, y); } LineItem myCurve2 = graphPane.AddCurve(Resource.SalesByMonthChartLabel, pointList, Color.Blue, SymbolType.Circle); // Fill the area under the curve with a white-red gradient at 45 degrees myCurve2.Line.Fill = new Fill(Color.White, Color.Green, 45F); // Make the symbols opaque by filling them with white myCurve2.Symbol.Fill = new Fill(Color.White); // Set the XAxis to date type graphPane.XAxis.Type = AxisType.Date; graphPane.XAxis.CrossAuto = true; // Fill the axis background with a color gradient graphPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45F); masterPane.AxisChange(g); }
private void OnRenderGraph(ZedGraphWeb zgw, Graphics g, MasterPane masterPane) { ErrorMsg.Text = ""; CY.GFive.DALProviders.SqlServerProvider.ScoreProvider sp = new CY.GFive.DALProviders.SqlServerProvider.ScoreProvider(); string classcode = Request.Form.Get("ddlClass"); string[] year = Request.Form.GetValues("cyear"); string[] term = Request.Form.GetValues("cterm"); if (classcode == null || string.IsNullOrEmpty(classcode) || year == null || year.Length == 0 || term == null || term.Length == 0) { ErrorMsg.Text = "有参数不正确"; ZedGraphWeb1.Visible = false; return; } List<YearTerm> ytlist = new List<YearTerm>(); List<YearTermCourse> ytclist = new List<YearTermCourse>(); for (int i = 0; i < year.Length; i++) { bool isIn = false; foreach (YearTerm yt in ytlist) { if (yt.Year == year[i] && yt.Term == term[i]) isIn = true; } if (!isIn) ytlist.Add(new YearTerm { Year = year[i], Term = term[i] }); } foreach (YearTerm yt in ytlist) { List<string> courselist = sp.GetCourseList(yt.Year, Convert.ToInt32(yt.Term), classcode); if (courselist.Count > 0) foreach (string s in courselist) { ytclist.Add(new YearTermCourse { Year = yt.Year, Term = yt.Term, Course = s }); } } GraphPane myPane = masterPane[0]; myPane.Title.Text = "分数段统计"; //设计图表的标题 myPane.XAxis.Title.Text = "分数段"; //X轴标题 myPane.YAxis.Title.Text = "人数"; //Y轴标题 string[] labels = new string[6]; labels[0] = "60以下"; labels[1] = "60-69"; labels[2] = "70-79"; labels[3] = "80-89"; labels[4] = "90-99"; labels[5] = "100"; foreach (YearTermCourse ytc in ytclist) { Random rand = new Random(); int r = rand.Next(8); int gg = rand.Next(10); int b = rand.Next(5); Color temp = Color.FromArgb(r * 30, gg * 25, b * 50); DataSet ds = sp.GetScoreUnionByParam(ytc.Year, Convert.ToInt32(ytc.Term), classcode, ytc.Course); CY.GFive.Core.Business.Course ctemp = CY.GFive.Core.Business.Course.GetByCode(ytc.Course); PointPairList list = new PointPairList(); for (int i = 0; i < 6; i++) list.Add(0, Convert.ToInt32(ds.Tables[0].Rows[i]["人数"])); BarItem myCurve = myPane.AddBar(ytc.Year + "年" + ctemp.Name, list, temp); myCurve.Bar.Fill = new Fill(temp, Color.White, temp); } myPane.XAxis.MajorTic.IsBetweenLabels = false; //柱状显示位置,true为在两个下标题值的中间,flase为两边 myPane.XAxis.Scale.TextLabels = labels;//下标题的内容 myPane.XAxis.Type = AxisType.Text; myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 90.0f);//图表外层背景填充色,由color1到color2渐变,参数3为方向 myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 270.0f);//图表内层背景填充色,由color1到color2渐变,参数3为方向 ZedGraphWeb1.Visible = true; masterPane.AxisChange(g); }
protected void ZedGraphWebExpStatistic_RenderGraph(ZedGraph.Web.ZedGraphWeb webObject, Graphics g, MasterPane masterPane) { Color statColor = Color.Blue; string statTitle = string.Empty; string statXAxisTitle = string.Empty; switch (ListBoxViewContent.SelectedValue) { case "NpcBeKilled": statColor = Color.Orange; statTitle = StringDef.NpcBeKilledStatistic; statXAxisTitle = StringDef.NpcBeKilledCount; break; case "NpcKill": statColor = Color.Red; statTitle = StringDef.NpcKillPlayerStatistic; statXAxisTitle = StringDef.NpcKillPlayerCount; break; } GraphPane graphPane = masterPane[0]; graphPane.Fill = new Fill(WebConfig.GraphPaneBgColor); graphPane.Title.Text = statTitle; graphPane.Title.FontSpec.Family = StringDef.DefaultFontFamily; graphPane.Title.FontSpec.Size = 10; graphPane.Legend.IsVisible = false; graphPane.BarSettings.Base = BarBase.Y; graphPane.XAxis.Title.Text = statXAxisTitle; graphPane.XAxis.Title.FontSpec.Family = StringDef.DefaultFontFamily; graphPane.XAxis.Title.FontSpec.Size = 6.2f; graphPane.XAxis.MajorGrid.IsVisible = true; graphPane.XAxis.MajorGrid.DashOff = 0; graphPane.XAxis.MajorGrid.Color = Color.Gray; graphPane.XAxis.MinorGrid.IsVisible = true; graphPane.XAxis.MinorGrid.Color = Color.LightGray; graphPane.XAxis.MinorGrid.DashOff = 0; graphPane.XAxis.Scale.FontSpec.Size = 5.6f; graphPane.XAxis.Scale.FontSpec.Family = StringDef.DefaultFontFamily; //graphPane.YAxis.Title.Text = StringDef.NpcTemplate; graphPane.YAxis.Title.FontSpec.Family = StringDef.DefaultFontFamily; graphPane.YAxis.MajorTic.IsBetweenLabels = true; graphPane.YAxis.Scale.IsPreventLabelOverlap = false; graphPane.YAxis.Scale.AlignH = AlignH.Center; graphPane.YAxis.Scale.FontSpec.Size = 5.6f; graphPane.YAxis.Scale.FontSpec.Family = StringDef.DefaultFontFamily; graphPane.YAxis.Scale.IsReverse = true; graphPane.YAxis.Type = AxisType.Text; double[] countList = new double[_recordList.Count]; string[] templateList = new string[_recordList.Count]; for (int i = 0; i < _recordList.Count; i++) { NpcStatisticInfo info = _recordList[i]; countList[i] = info.Count; FS2NpcData npcData = FS2GameDataManager.TheInstance.GetNpcData(int.Parse(info.TemaplteId)); if (npcData != null) { templateList[i] = npcData.ToString(); } else { templateList[i] = info.TemaplteId; } } BarItem barItem = graphPane.AddBar(StringDef.NpcBeKilledCount, countList, null, Color.Blue); barItem.Bar.Fill = new Fill(statColor); graphPane.YAxis.Scale.TextLabels = templateList; masterPane.AxisChange(); BarItem.CreateBarLabels(graphPane, false, string.Empty, StringDef.DefaultFontFamily, 5.6f, TextObj.Default.FontColor, false, false, false); }
private void OnRenderGraph(ZedGraphWeb zgw, Graphics g, MasterPane masterPane) { ErrorMsg.Text = ""; CY.GFive.DALProviders.SqlServerProvider.ScoreProvider sp = new CY.GFive.DALProviders.SqlServerProvider.ScoreProvider(); string coursecode = Request.Form.Get("ddlCourse"); string term = Request.Form.Get("ddlTerm"); if (coursecode == null || coursecode == "请选择" || term == null || term == "请选择") { ErrorMsg.Text = "有参数不正确"; ZedGraphWeb1.Visible = false; return; } if (string.IsNullOrEmpty(ddlYearNum.SelectedValue) || ddlYearNum.SelectedValue == "请选择") { ErrorMsg.Text = "有参数不正确"; ZedGraphWeb1.Visible = false; return; } string year = ddlYearNum.SelectedItem.ToString();//year term course class teacher GraphPane myPane = masterPane[0]; myPane.Title.Text = "同课程分数段统计"; //设计图表的标题 myPane.XAxis.Title.Text = "分数段"; //X轴标题 myPane.YAxis.Title.Text = "人数"; //Y轴标题 string[] labels = new string[6]; labels[0] = "60以下"; labels[1] = "60-69"; labels[2] = "70-79"; labels[3] = "80-89"; labels[4] = "90-99"; labels[5] = "100"; List<string> dic = sp.PrapareTeacherAndClassByCourse(year, Convert.ToInt32(term), coursecode); foreach (string s in dic) { string[] value = s.Split(','); //teachercode,classcode Random rand = new Random(); int r = rand.Next(8); int gg = rand.Next(10); int b = rand.Next(5); Color temp = Color.FromArgb(r * 30, gg * 25, b * 50); DataSet ds = sp.GetScoreUnionByParam(year, Convert.ToInt32(term), value[1], coursecode); PointPairList list = new PointPairList(); for (int i = 0; i < 6; i++) list.Add(0, Convert.ToInt32(ds.Tables[0].Rows[i]["人数"])); CY.GFive.Core.Business.StaffInfo si = CY.GFive.Core.Business.StaffInfo.GetInstance(value[0]); CY.GFive.Core.Business.ClassInfo ci = CY.GFive.Core.Business.ClassInfo.GetByCode(value[1]); BarItem myCurve = myPane.AddBar(si.Name + "-" + ci.ClassName, list, temp); myCurve.Bar.Fill = new Fill(temp, Color.White, temp); } myPane.XAxis.MajorTic.IsBetweenLabels = false; //柱状显示位置,true为在两个下标题值的中间,flase为两边 myPane.XAxis.Scale.TextLabels = labels;//下标题的内容 myPane.XAxis.Type = AxisType.Text; myPane.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 90.0f);//图表外层背景填充色,由color1到color2渐变,参数3为方向 myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(200, 200, 255), 270.0f);//图表内层背景填充色,由color1到color2渐变,参数3为方向 ZedGraphWeb1.Visible = true; masterPane.AxisChange(g); }
/// <summary> /// Creates a new plot in the zedGraph Control /// </summary> /// <param name="peptide"></param> /// <param name="scanNumber"></param> /// <param name="unmatchedPointsList"></param> /// <param name="matchedPointsList"></param> public void PlotGraph(string peptide, string scanNumber, PointPairList unmatchedPointsList, PointPairList matchedPointsList) { //save the data m_currentPeptide = peptide; m_currentScanNumber = scanNumber; m_unmatchedPoints = unmatchedPointsList; m_matchedPoints = matchedPointsList; //clear the masterPane ZedGraph.MasterPane master = this.MasterPane; master.GraphObjList.Clear(); master.PaneList.Clear(); // split the points into groups List <PointPairList> unmatchedPointsSection; List <PointPairList> matchedPointsSection; // Divides the points into sections, this is used when we create more than one plot DividePointsIntoSections(m_options.numberOfPlots, m_matchedPoints, m_unmatchedPoints, out matchedPointsSection, out unmatchedPointsSection); // Show the masterpane title master.Title.IsVisible = true; master.Title.Text = "Peptide: " + peptide + " Scan: " + scanNumber; // Leave a margin around the masterpane, but only a small gap between panes master.Margin.All = 10; master.InnerPaneGap = 5; for (int j = 0; j < m_options.numberOfPlots; j++) { // Create a new graph -- dimensions to be set later by MasterPane Layout GraphPane myPaneT = new GraphPane(new Rectangle(10, 10, 10, 10), "", "m/z", "Relative Intensity"); // Set the BaseDimension, so fonts are scale a little bigger myPaneT.BaseDimension = m_standardBaseDemension / m_options.numberOfPlots; // Hide the XAxis scale and title myPaneT.XAxis.Title.IsVisible = false; myPaneT.XAxis.Scale.IsVisible = false; // Hide the legend, border, and GraphPane title myPaneT.Legend.IsVisible = false; myPaneT.Border.IsVisible = false; myPaneT.Title.IsVisible = false; // Restrict the scale to go right up to the last data point double matchedMax = 0; double unmatchedMax = 0; double matchedMin = double.MaxValue; double unmatchedMin = double.MaxValue; if (matchedPointsSection[j].Count > 0) { matchedMax = matchedPointsSection[j][matchedPointsSection[j].Count - 1].X; matchedMin = matchedPointsSection[j][0].X; } if (unmatchedPointsSection[j].Count > 0) { unmatchedMax = unmatchedPointsSection[j][unmatchedPointsSection[j].Count - 1].X; unmatchedMin = unmatchedPointsSection[j][0].X; } myPaneT.XAxis.Scale.Max = (matchedMax > unmatchedMax) ? matchedMax : unmatchedMax; myPaneT.XAxis.Scale.Min = (matchedMin < unmatchedMin) ? matchedMin : unmatchedMin; // Remove all margins myPaneT.Margin.All = 0; // Except, leave some top margin on the first GraphPane if (j == 0) { myPaneT.XAxis.Scale.Min = myPaneT.XAxis.Scale.Min - 100; myPaneT.Margin.Top = 20; } // And some bottom margin on the last GraphPane // Also, show the X title and scale on the last GraphPane only if (j == m_options.numberOfPlots - 1) { myPaneT.XAxis.Scale.Max = myPaneT.XAxis.Scale.Max + 100; myPaneT.XAxis.Title.IsVisible = true; myPaneT.Legend.IsVisible = m_options.showLegend; myPaneT.Legend.Position = LegendPos.BottomCenter; } myPaneT.XAxis.Scale.IsVisible = true; //myPaneT.Margin.Bottom = 10; if (j > 0) { myPaneT.YAxis.Scale.IsSkipLastLabel = true; } // This sets the minimum amount of space for the left and right side, respectively // The reason for this is so that the ChartRect's all end up being the same size. myPaneT.YAxis.MinSpace = 80; myPaneT.Y2Axis.MinSpace = 20; // generate the lines // Keep the matched points in front by drawing them first. OHLCBarItem matchedCurve = myPaneT.AddOHLCBar(matchedCurveName, matchedPointsSection[j], m_options.matchedColor); matchedCurve.Bar.Width = 2; AddAnnotations(matchedCurve.Points, myPaneT); if (!m_options.hideUnmatched) { OHLCBarItem unmatchedCurve = myPaneT.AddOHLCBar(unmatchedCurveName, unmatchedPointsSection[j], m_options.unmatchedColor); AddAnnotations(unmatchedCurve.Points, myPaneT); } // Add the GraphPane to the MasterPane.PaneList master.Add(myPaneT); } //Tell ZedGraph to refigure the axes since the data has changed using (Graphics g = this.CreateGraphics()) { // Align the GraphPanes vertically if (m_options.numberOfPlots >= 4) { master.SetLayout(g, PaneLayout.SquareColPreferred); } else { master.SetLayout(g, PaneLayout.SingleColumn); } master.AxisChange(g); this.PerformAutoScale(); } }
protected void graphResults_OnRenderGraph(ZedGraph.Web.ZedGraphWeb z, System.Drawing.Graphics g, ZedGraph.MasterPane masterPane) { if (hiddenAccountID.Value == null || hiddenAccountID.Value == Guid.Empty.ToString()) { return; } DataSet dataSet = null; GraphPane myPane = masterPane[0]; myPane.Border.Color = Color.White; myPane.Title.Text = Lang.OurRingtestResults;; myPane.XAxis.Title.Text = Lang.Years; myPane.YAxis.Title.Text = "%"; // Lang.ErrorPercent; Database.RingtestBox box = new Database.RingtestBox(); try { Database.Interface.open(); dataSet = Database.RingtestReport.select_Year_Error_CalculatedUncertainty_RingtestBoxID_MCAType_ActivityRef_where_AccountID(new Guid(hiddenAccountID.Value)); PointPairList list = new PointPairList(); PointPairList eList = new PointPairList(); PointPairList bList = new PointPairList(); double maxYear = DateTime.Now.Year; for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { Guid boxID = (Guid)dataSet.Tables[0].Rows[i][3]; box.select_all_where_ID(boxID); double year = Convert.ToDouble(dataSet.Tables[0].Rows[i][0]); double error = Convert.ToDouble(dataSet.Tables[0].Rows[i][1]); double uncertainty = Convert.ToDouble(dataSet.Tables[0].Rows[i][2]); string MCAType = dataSet.Tables[0].Rows[i][4].ToString(); if (MCAType.ToLower() != "serie10") { double activity = Convert.ToDouble(dataSet.Tables[0].Rows[i][5]); uncertainty = (uncertainty / activity) * 100.0; } if (year > maxYear) { maxYear = year; } list.Add(year, error); eList.Add(year, error + uncertainty, error - uncertainty); bList.Add(year, box.Uncertainty, -box.Uncertainty); } myPane.YAxis.Scale.Max = 11.0f; myPane.YAxis.Scale.Min = -11.0f; myPane.XAxis.Scale.Max = maxYear + 1; myPane.XAxis.Scale.Min = maxYear - 10; myPane.XAxis.Scale.MinorStep = 1.0; myPane.XAxis.Scale.MajorStep = 1.0; myPane.YAxis.MajorGrid.IsVisible = true; myPane.YAxis.MinorGrid.IsVisible = true; myPane.Legend.IsVisible = true; LineItem curve = myPane.AddCurve(Lang.Reported_result, list, Color.White, SymbolType.Circle); curve.Line.IsVisible = false; curve.Symbol.Fill = new Fill(Color.IndianRed); curve.Symbol.Size = 6; ErrorBarItem errBar = myPane.AddErrorBar(Lang.CalculatedUncertainty, eList, Color.Red); errBar.Bar.PenWidth = 1; ErrorBarItem boxBar = myPane.AddErrorBar(Lang.RingtestBoxUncertainty, bList, Color.LightGray); boxBar.Bar.PenWidth = 12; boxBar.Bar.Symbol.IsVisible = false; myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(255, Color.White), 45.0F); const double offset = 0.1; for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { PointPair pt = curve.Points[i]; if (pt.Y >= myPane.YAxis.Scale.Min && pt.Y <= myPane.YAxis.Scale.Max) { TextObj text = new TextObj(pt.Y.ToString("f2"), pt.X + offset, pt.Y, CoordType.AxisXYScale, AlignH.Left, AlignV.Center); text.FontSpec.Size = 6; text.ZOrder = ZOrder.A_InFront; text.FontSpec.Border.IsVisible = false; text.FontSpec.Fill.IsVisible = false; //text.FontSpec.Angle = 90; myPane.GraphObjList.Add(text); //g.DrawLine(pen, new Point((int)(pt.X + 10), (int)pt.Y), new Point((int)(pt.X - 10), (int)pt.Y)); } } myPane.YAxis.Scale.MaxGrace = 0.2; } catch (Exception ex) { Utils.reportStatus(ref labelStatus, Color.Red, "Ringtest.graphResults_OnRenderGraph: " + ex.Message); return; } finally { Database.Interface.close(); } masterPane.AxisChange(g); }