Example 030: Graph showing Table Annotations, Hot Spots

PegoGraph Objectadvanced

Table Annotations, Hot Spots

Preview

ProEssentials Pego Graph Object - Graph showing Table Annotations, Hot Spots
Click to enlarge

Source Code

Form2.cs
1//! Please read the RED text within this code window and others.
2//! You will find important information that improves your experience with the demo.
3//!
4//! Some things to try...
5//! 1) Right click the chart and use the popup menu to adjust viewing style and other items.
6//! 2) Left click and drag to zoom, use popup menu to undo zoom. Note how time scale changes.
7//! 3) Left click the Portfolio table to select different stocks.
8//! 4) Change Point Label Orientation via the popup menu and note how x axis scale changes.
9//! 5) The Data Cursor can be moved with arrow keys. Click a data point and then use arrow keys.
10//! 6) Zoom chart and watch the Volume bar plotting method structure for different time ranges.
11//! There's new drawing logic that first recognizes all bars are connected, then as range is shrunk,
12//! bar's get drawn 1 pixel apart, and finally after zooming more, bars are spaced.
13
14// Note, the entire code to produce this example is shown below.
15// The immediate section controls chart construction, latter sections show
16// how to respond to mouse-move and table annotation hot spot events.
17// The final section shows how the data is loaded from a comma delimited.
18// file and studies calculated.
19
20// This example shows a collection of features.
21// Table Annotation Hot Spots can turn table annotations into user interface objects.
22// Also shown is real-time table annotation updating and date/time handling.
23
24
25Pego1.PeUserInterface.Cursor.PromptTracking = true;
26Pego1.PeUserInterface.Cursor.PromptLocation = CursorPromptLocation.ToolTip;
27Pego1.PeUserInterface.Cursor.PromptStyle = CursorPromptStyle.XYValues;
28Pego1.PeUserInterface.Cursor.TrackingTooltipMaxWidth = 100;
29Pego1.PeUserInterface.Cursor.TrackingCustomDataText = true;
30Pego1.PeUserInterface.Cursor.MouseCursorControl = true;
31
32// Enable ZoomWindow //
33Pego1.PePlot.ZoomWindow.Show = true;
34
35// Enable MouseWheel Zooming
36Pego1.PeUserInterface.Scrollbar.MouseWheelFunction = MouseWheelFunction.HorizontalZoom;
37Pego1.PeUserInterface.Scrollbar.MouseDraggingX = true; // note that pan gestures require MouseDragging to be enabled
38
39// Enable MouseWheel Zoom Smoothness
40Pego1.PeUserInterface.Scrollbar.MouseWheelZoomSmoothness = 4;
41Pego1.PeUserInterface.Scrollbar.PinchZoomSmoothness = 2;
42
43// Enable Bar Glass Effect //
44Pego1.PePlot.Option.BarGlassEffect = true;
45
46// No Flicker //
47Pego1.PeConfigure.PrepareImages = true;
48Pego1.PeConfigure.CacheBmp = true;
49
50// Fixed Font Sizes //
51Pego1.PeFont.Fixed = true;
52
53// YAxis Changes Range as you pan horizontally or zoom //
54Pego1.PeUserInterface.Scrollbar.ScrollingScaleControl = true;
55
56// Construct a simple table annotation //
57Pego1.PeAnnotation.Table.Working = 0;
58Pego1.PeAnnotation.Table.Rows = 17;
59Pego1.PeAnnotation.Table.Columns = 1; // 12 is same number as PEP_nPOINTS
60
61// Pass the table text //
62Pego1.PeAnnotation.Table.Text[0, 0] = " MSFT";
63Pego1.PeAnnotation.Table.Text[1, 0] = " AAPL";
64Pego1.PeAnnotation.Table.Text[2, 0] = " AMD";
65Pego1.PeAnnotation.Table.Text[3, 0] = " AMZN";
66Pego1.PeAnnotation.Table.Text[4, 0] = " CSCO";
67Pego1.PeAnnotation.Table.Text[5, 0] = " META";
68Pego1.PeAnnotation.Table.Text[6, 0] = " NFLX";
69Pego1.PeAnnotation.Table.Text[7, 0] = " QCOM";
70Pego1.PeAnnotation.Table.Text[8, 0] = " SBUX";
71Pego1.PeAnnotation.Table.Text[9, 0] = " TSLA";
72Pego1.PeAnnotation.Table.Text[10, 0] = "-----------------";
73
74Pego1.PeAnnotation.Table.HotSpot[0, 0] = true;
75Pego1.PeAnnotation.Table.HotSpot[1, 0] = true;
76Pego1.PeAnnotation.Table.HotSpot[2, 0] = true;
77Pego1.PeAnnotation.Table.HotSpot[3, 0] = true;
78Pego1.PeAnnotation.Table.HotSpot[4, 0] = true;
79Pego1.PeAnnotation.Table.HotSpot[5, 0] = true;
80Pego1.PeAnnotation.Table.HotSpot[6, 0] = true;
81Pego1.PeAnnotation.Table.HotSpot[7, 0] = true;
82Pego1.PeAnnotation.Table.HotSpot[8, 0] = true;
83Pego1.PeAnnotation.Table.HotSpot[9, 0] = true;
84
85Pego1.PeAnnotation.Table.Color[0, 0] = Color.FromArgb(255, 198, 0, 0);
86Pego1.PeAnnotation.Table.Color[1, 0] = Color.FromArgb(255, 142, 142, 142);
87Pego1.PeAnnotation.Table.Color[2, 0] = Color.FromArgb(255, 142, 142, 142);
88Pego1.PeAnnotation.Table.Color[3, 0] = Color.FromArgb(255, 142, 142, 142);
89Pego1.PeAnnotation.Table.Color[4, 0] = Color.FromArgb(255, 142, 142, 142);
90Pego1.PeAnnotation.Table.Color[5, 0] = Color.FromArgb(255, 142, 142, 142);
91Pego1.PeAnnotation.Table.Color[6, 0] = Color.FromArgb(255, 142, 142, 142);
92Pego1.PeAnnotation.Table.Color[7, 0] = Color.FromArgb(255, 142, 142, 142);
93Pego1.PeAnnotation.Table.Color[8, 0] = Color.FromArgb(255, 142, 142, 142);
94Pego1.PeAnnotation.Table.Color[9, 0] = Color.FromArgb(255, 142, 142, 142);
95Pego1.PeAnnotation.Table.Color[10, 0] = Color.FromArgb(255, 142, 142, 142);
96Pego1.PeAnnotation.Table.Color[11, 0] = Color.FromArgb(255, 150, 150, 150);
97Pego1.PeAnnotation.Table.Color[12, 0] = Color.FromArgb(255, 150, 150, 150);
98Pego1.PeAnnotation.Table.Color[13, 0] = Color.FromArgb(255, 142, 142, 142);
99Pego1.PeAnnotation.Table.Color[14, 0] = Color.FromArgb(255, 0, 170, 0);
100Pego1.PeAnnotation.Table.Color[15, 0] = Color.FromArgb(255, 198, 0, 0);
101Pego1.PeAnnotation.Table.Color[16, 0] = Color.FromArgb(255, 190, 190, 190);
102
103Pego1.PeAnnotation.Table.ColumnWidth[0] = 8;
104
105// Set Table Location //
106Pego1.PeAnnotation.Table.Location = GraphTALocation.LeftCenter;
107
108// Other Table Related Properties ///
109Pego1.PeAnnotation.Table.Show = true;
110Pego1.PeAnnotation.Table.Border = TABorder.SingleLine;
111Pego1.PeAnnotation.Table.BackColor = Color.FromArgb(255, 0, 0, 0);
112Pego1.PeAnnotation.Table.ForeColor = Color.FromArgb(255, 250, 250, 250);
113Pego1.PeAnnotation.Table.TextSize = 100;
114
115// Done setting Table Annotations //
116
117// Load Data and Add Studies, Total of 11 subsets when finished //
118StockPriceLoader.LoadData("MSFT", Pego1);
119
120//! Set properties related to date/time mode //
121Pego1.PeData.DeltasPerDay = 1; // 1 data point per day
122Pego1.PeData.DeltaX = -1 ; // -1 special code for daily data //
123Pego1.PeData.DateTimeMode = true ; // How to interpret serial dates //
124Pego1.PeGrid.Option.YearMonthDayPrompt = YearMonthDayPrompt.InsideTop;
125Pego1.PeGrid.Option.DayLabelType = DayLabelType.ThreeCharacters;
126Pego1.PeGrid.Option.MonthLabelType = MonthLabelType.ThreeCharacters;
127
128// Split up subsets among different axes //
129Pego1.PeGrid.MultiAxesSubsets[0] = 7; // ohlc and upper bollinger, sma, lower bollinger
130Pego1.PeGrid.MultiAxesSubsets[1] = 1; // volume
131Pego1.PeGrid.MultiAxesSubsets[2] = 1; // RSI
132Pego1.PeGrid.MultiAxesSubsets[3] = 2; // Fast and Slow Stochastic
133
134Pego1.PeGrid.MultiAxesProportions[0] = 0.70F;
135Pego1.PeGrid.MultiAxesProportions[1] = 0.10F;
136Pego1.PeGrid.MultiAxesProportions[2] = 0.10F;
137Pego1.PeGrid.MultiAxesProportions[3] = 0.10F;
138
139// Set Various Other Properties ///
140Pego1.PeData.Precision = DataPrecision.TwoDecimals;
141Pego1.PeGrid.Option.MultiAxisStyle = MultiAxisStyle.SeparateAxes;
142Pego1.PeUserInterface.Allow.MultiAxesSizing = true;
143Pego1.PeGrid.Option.YAxisOnRight = true;
144Pego1.PePlot.Option.SpecificPlotModeColor = true; // Enables mult-colored candle stick fills
145Pego1.PePlot.DataShadows = DataShadows.None;
146Pego1.PeUserInterface.Allow.Zooming = AllowZooming.HorzAndVert;
147Pego1.PeUserInterface.Allow.ZoomStyle = ZoomStyle.Ro2Not;
148
149Pego1.PeUserInterface.HotSpot.Data = true;
150Pego1.PeUserInterface.HotSpot.Size = HotSpotSize.Large;
151
152Pego1.PeGrid.Option.ShowXAxis = ShowAxis.GridNumbers;
153Pego1.PeString.MainTitle = "";
154Pego1.PeString.SubTitle = "";
155Pego1.PeFont.FontSize = FontSize.Medium;
156Pego1.PePlot.PointSize = PointSize.Small;
157Pego1.PeUserInterface.Allow.Maximization = false;
158Pego1.PeGrid.LineControl = GridLineControl.Both;
159Pego1.PeLegend.SimpleLine = true;
160Pego1.PeLegend.SimplePoint = true;
161Pego1.PeLegend.Style = LegendStyle.OneLineTopOfAxis;
162Pego1.PeGrid.Configure.AutoMinMaxPadding = 1;
163Pego1.PePlot.Option.OhlcMinWidth = 4; // NOTE: Controls minium candle-stick width //
164
165Pego1.PeUserInterface.Menu.GraphPlusTable = MenuControl.Hide;
166Pego1.PeUserInterface.Menu.TableWhat = MenuControl.Hide;
167Pego1.PeUserInterface.Menu.MultiAxisStyle = MenuControl.Show;
168Pego1.PeUserInterface.Menu.LegendLocation = MenuControl.Show;
169Pego1.PeUserInterface.Menu.ShowTableAnnotations = MenuControl.Show;
170Pego1.PeUserInterface.Menu.AnnotationControl = true;
171Pego1.PeUserInterface.Dialog.PrintStyleControl = PrintStyleControl.DefaultMonochrome;
172
173// Set up per axis properties //
174Pego1.PeGrid.WorkingAxis = 0;
176Pego1.PePlot.SpecificPlotMode = SpecificPlotMode.BoxPlot;
177Pego1.PePlot.ComparisonSubsets = 3;
178Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;
179
180Pego1.PeGrid.WorkingAxis = 1;
181Pego1.PePlot.Method = GraphPlottingMethod.Bar;
182Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;
183
184Pego1.PeGrid.WorkingAxis = 2;
185Pego1.PePlot.Method = GraphPlottingMethod.Line;
186Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;
187
188Pego1.PeGrid.WorkingAxis = 3;
189Pego1.PePlot.Method = GraphPlottingMethod.Area;
190Pego1.PeGrid.Option.ShowYAxis = ShowAxis.GridNumbers;
191
192// Set Subset Colors //
193Pego1.PeColor.SubsetColors[0] = Color.FromArgb(255, 255, 255, 255);
194Pego1.PeColor.SubsetColors[1] = Color.FromArgb(255, 240, 3, 3);
195Pego1.PeColor.SubsetColors[2] = Color.FromArgb(255, 240, 5, 5);
196Pego1.PeColor.SubsetColors[3] = Color.FromArgb(255, 25, 198, 25);
197Pego1.PeColor.SubsetColors[4] = Color.FromArgb(255, 126, 250, 200);
198Pego1.PeColor.SubsetColors[5] = Color.FromArgb(255, 212, 168, 0);
199Pego1.PeColor.SubsetColors[6] = Color.FromArgb(255, 200, 50, 50);
200Pego1.PeColor.SubsetColors[7] = Color.FromArgb(255, 126, 250, 62);
201Pego1.PeColor.SubsetColors[8] = Color.FromArgb(255, 33, 200, 69);
202Pego1.PeColor.SubsetColors[9] = Color.FromArgb(255, 163, 160, 250);
203Pego1.PeColor.SubsetColors[10] = Color.FromArgb(155, 212, 216, 0);
204
205// Set Subset Line Types //
206Pego1.PeLegend.SubsetLineTypes[0] = LineType.ThinSolid;
207Pego1.PeLegend.SubsetLineTypes[1] = LineType.ThinSolid;
208Pego1.PeLegend.SubsetLineTypes[2] = LineType.ThinSolid;
209Pego1.PeLegend.SubsetLineTypes[3] = LineType.ThinSolid;
210Pego1.PeLegend.SubsetLineTypes[4] = LineType.ThinSolid;
211Pego1.PeLegend.SubsetLineTypes[5] = LineType.ThinSolid;
212Pego1.PeLegend.SubsetLineTypes[6] = LineType.ThinSolid;
213Pego1.PeLegend.SubsetLineTypes[7] = LineType.MediumThinSolid;
214Pego1.PeLegend.SubsetLineTypes[8] = LineType.MediumThinSolid;
215Pego1.PeLegend.SubsetLineTypes[9] = LineType.MediumThinSolid;
216Pego1.PeLegend.SubsetLineTypes[10] = LineType.MediumThinSolid;
217
218// Set Subset Labels //
219Pego1.PeString.SubsetLabels[0] = "High";
220Pego1.PeString.SubsetLabels[1] = "Low";
221Pego1.PeString.SubsetLabels[2] = "Open";
222Pego1.PeString.SubsetLabels[3] = "Close";
223Pego1.PeString.SubsetLabels[4] = "Bollinger Upper";
224Pego1.PeString.SubsetLabels[5] = "SMA 20";
225Pego1.PeString.SubsetLabels[6] = "Bollinger Lower";
226Pego1.PeString.SubsetLabels[7] = "Volume";
227Pego1.PeString.SubsetLabels[8] = "Relative Strength Index - 10";
228Pego1.PeString.SubsetLabels[9] = "Fast %K";
229Pego1.PeString.SubsetLabels[10] = "Slow %D";
230
231Pego1.PePlot.Option.GradientBars = 14;
232Pego1.PeConfigure.TextShadows = TextShadows.BoldText;
233Pego1.PeFont.MainTitle.Bold = true;
234Pego1.PeFont.SubTitle.Bold = true;
235Pego1.PeFont.Label.Bold = true;
236Pego1.PePlot.Option.LineShadows = true;
237Pego1.PeFont.FontSize = FontSize.Medium;
238Pego1.PePlot.DataShadows = DataShadows.Shadows;
239
240Pego1.PeColor.BitmapGradientMode = true;
241Pego1.PeColor.QuickStyle = QuickStyle.DarkNoBorder;
242
243Pego1.PeUserInterface.Menu.AnnotationControl = true;
244Pego1.PeUserInterface.Menu.ShowAnnotationText = MenuControl.Show;
245
246Pego1.PePlot.Option.PointGradientStyle = PlotGradientStyle.VerticalAscentInverse;
247Pego1.PeColor.PointBorderColor = Color.FromArgb(100, 0, 0, 0);
248Pego1.PePlot.Option.LineSymbolThickness = 3;
249Pego1.PePlot.Option.AreaBorder = 0;
250Pego1.PePlot.Option.SolidLineOverArea = 1;
251
252Pego1.PeConfigure.ImageAdjustTop = 75;
253Pego1.PeConfigure.ImageAdjustLeft = 75;
254Pego1.PeConfigure.ImageAdjustRight = 75;
255
256// Set various export defaults //
257Pego1.PeSpecial.DpiX = 600;
258Pego1.PeSpecial.DpiY = 600;
259
260// Other default export setting //
261Pego1.PeUserInterface.Dialog.ExportSizeDef = ExportSizeDef.NoSizeOrPixel;
262Pego1.PeUserInterface.Dialog.ExportTypeDef = ExportTypeDef.Png;
263Pego1.PeUserInterface.Dialog.ExportDestDef = ExportDestDef.Clipboard;
264Pego1.PeUserInterface.Dialog.ExportUnitXDef = "1280";
265Pego1.PeUserInterface.Dialog.ExportUnitYDef = "768";
266Pego1.PeUserInterface.Dialog.ExportImageDpi = 300;
267
268Pego1.PeConfigure.RenderEngine = RenderEngine.Direct2D;
269Pego1.PeConfigure.AntiAliasText = true;
270Pego1.PeConfigure.AntiAliasGraphics= true;
271
272Pego1.PeFunction.ReinitializeResetImage();
273Pego1.Invalidate();
274// Optionally call Pego1.Refresh() if you are not seeing changes immediately
Tip: Uses property syntax like Pego1.PeData.Y[s, p]Click underlined properties to view documentation