Home

QCChart2D for WPF User Manual - Quinn

image

Contents

1. Dim transformArray As CartesianCoordinates pTransforml _ pTransform2 pTransform3 pTransform4 pTransform5 Dim zoomObj As New ChartZoom chartVu transformArray 5 True j SetButtonMask MouseButton Left j SetZoomYEnable True j SetZoomXEnable True bj SetZzoomXRoundMode ChartObj AUTOAXES FAR bj SetZoomYRoundMode ChartObj AUTOAXES FAR j SetEnable True 7 Set ZoomStackEnable True InternalZoomStackProcesssing True 331 Zooming chartVu SetCurrentMouseListener zoomObj Limiting the Zoom Range A zoom window needs to have zoom limits placed on the minimum allowable zoom range for the x and y coordinates Unrestricted or infinte zooming can result in numeric under and overflows The default minimum allowable range resuling from a zoom operation is 1 1000 of the original coordinate range Change this value using the ChartZoom SetZoomRangeLimitsRatio method The minimum allowable range for this value is approximately 1 0e 9 Another way to set the minimum allowable range is to specify explicit values for the x and y range using the ChartZoom SetZoomRangeLimits method Specify the minimum allowable zoom range for a time axis in milliseconds for example ChartZoom SetZoomRangeLimits new Dimension 1000 0 01 sets the minimum zoom range for the time axis to 1 second and for the y axis to 0 01 The utility method ChartCalendar GetCalendarWidth Value is useful for calculating t
2. Ct public int AddLegendItem string stext double rsize ChartAttribute attrib ChartFont thefont public BubblePlotLegend Stext rsize coordinate system the bubble plot is placed in chartobj attributes of this chart object thefont Specifies the text font for the legend item The method returns the current number of legend items BubblePlot plot double rx double ry double rwidth double rheight ChartAttribute attrib Specifies the text string for the legend item Legends 366 Specifies the size of the bubble for this item in the same units as the The color and fill attributes for the legend item are copied from the Simple legend example extracted from the example program ScatterPlots class BubbleChart C 367 Legends ttribl SetFillFlag true ubblePlot thePlotl new BubblePlot pTransforml Datasetl ChartObj SIZE BUBBLE RADIUS attribl chartVu AddChartObject thePlotl c attribl SetFillColor iGolor FromRgbul77 33 1 T a B hartAttribute attribl new ChartAttribute Colors Black 0 DashStyles Solid ChartFont theTitleFont new ChartFont SansSerif 14 FontStyles Normal FontWeights Bold ChartTitle mainTitle new ChartTitle pTransforml theTitleFont DOT COM Bankruptcies and CEO Compensation mainTitle SetTitleType ChartObj CHART HEADER mainTitle SetTitlePosition ChartObj CENTER GRAPH hartVu AddChartObject mainTitle Q
3. Sales3 xData3 yData3 ElapsedTimeSimpleDataset datasetsArray new ElapsedTimeSimpleDataset 3 datasetsArray 0 datasetl datasetsArray 1 dataset2 datasetsArray 2 dataset3 ElapsedTimeCoordinates simpleScale new ElapsedTimeCoordinates simpleScale AutoScale datasetsArray Visual Basic Dim xDatal As Double 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Dim yvDatal As Double 10 22 33 44 55 46 33 25 14 9 Dim xData2 As Double 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Dim yData2 As Double 20 12 43 54 15 26 63 25 24 19 Dim xData3 As Double 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Dim yData3 As Double 30 52 13 64 25 76 13 35 24 9 Dim datasetl As ElapsedTimeSimpleDataset New ElapsedTimeSimpleDataset Sales1 xDatal yDatal Dim dataset2 As ElapsedTimeSimpleDataset New ElapsedTimeSimpleDataset Sales2 xData2 yData2 Dim dataset3 As ElapsedTimeSimpleDataset New ElapsedTimeSimpleDataset Sales3 xData3 yData3 Dim datasetsArray 2 As ElapsedTimeSimpleDataset datasetsArray 0 datasetl datasetsArray 1 dataset2 datasetsArray 2 dataset3 Dim simpleScale As ElapsedTimeCoordinate S New ElapsedTimeCoordinates Q simpleScale AutoScale datasetsArray There is a version of the multiple dataset auto scale routine that also specifies rounding mode parameter
4. d FontWeights Bold ChartTitle footer new ChartTitle pTransforml theFooterFont The size radius or area of the bubble adds an additional dimension ChartAttribute attrib2 ttribl SetFillColor Color FromHgb 177 33 33 vhartAttribute legendAttributes legendAttributes SetFillFlagitrue legendAttributes SetLineFlag true BubblePlotLegend legend legend AddLegendItem 10 Million 10 attrib2 legendFont legend AddLegendItem 25 Million 25 attrib2 legendFont legend AddLegendItem 40 Million 40 attrib2 legendFont legend AddLegendGeneralText ChartObj LEGEND HEADER Bubble Size Colors Black legendFont chartVu AddChartObject legend Visual Basic Dim attribl As New ChartAttribute Colors Black 0 DashStyles Solid ttribl SetFillColor iCcolor FromBgb 177 33 33 attribl SetFillFlag True Dim thePlotl As New BubblePlot pTransforml Datasetl _ ChartObj SIZE BUBBLE RADIUS attribil chartVu AddChartObject thePlot1 Dim theTitleFont As New ChartFont SansSerif 14 FontStyles Normal Dim mainTitle As New ChartTitle pTransforml theTitleFont _ DOT COM Bankruptcies and CEO Compensation mainTitle SetTitleType ChartObj CHART HEADER mainTitle SetTitlePosition ChartObj CENTER GRAPH chartVu AddChartObject mainTitle Dim theFooterFont As New ChartFont SansSerif 10 FontStyles Normal Dim footer As New ChartTitle pTransforml theFooterFont graph
5. Create the time axis x axis is assumed Dim xAxis As TimeAxis New TimeAxis simpleTimeScale Create the linear y axis Dim yAxis As LinearAxis New LinearAxis simpleTimeScale ChartObj Y AXIS Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis The documentation for the various coordinate system and axis classes includes examples of manual scaling 11 How do I update my data and auto rescale the chart scales and axes to reflect the new data after it has already been drawn Updating data was discussed in FAQ 6 If you want the chart to rescale based on the new data call the appropriate coordinate systems auto scale method followed by the auto axis methods of all related axes Then call the ChartView UpdateDraw method For example C Create the ChartView object to place graph objects in TimeSimpleDataset Datasetl new TimeSimpleDataset Sales x1l yl TimeCoordinates simpleTimeCoordinates new TimeCoordinates simpleTimeCoordinates AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR ChartView chartVu new ChartView Create the time axis x axis is assumed TimeAxis xAxis new TimeAxis simpleTimeCoordinates Create the linear y axis LinearAxis yAxis new LinearAxis simpleTimeCoordinates ChartObj Y AXIS FAQs 45
6. hartFont theFooterFont new ChartFont SansSerif 10 FontStyles Normal to the graph new ChartAttribute Color FromRgb 177 33 33 0 DashStyles Solid a ChartFont legendFont new ChartFont SansSerif 10 FontStyles Normal C new ChartAttribute Colors Black 1 DashStyles Solid Colors White new BubblePlotLegend thePlotl 0 82 0 15 0 14 0 25 legendAttributes FontWeights Bold FontWeights Bold The size radius or area of the bubble adds an additional dimension to the Legends 368 footer SetTitleType ChartObj CHART FOOTER footer SetTitlePosition ChartObj CENTER GRAPH footer SetTitleOffset 8 footer SetColor Colors White chartVu AddChartObject footer Dim attrib2 As New ChartAttribute Color FromRgb 177 33 33 0 DashStyles Solid attribl SetFillColor Color FromBgb 177 33 332 Dim legendFont As New ChartFont SansSerif 10 FontStyles Normal Dim legendAttributes As New ChartAttribute Colors Black 1 DashStyles Solid Colors White legendAttributes SetFillFlag True legendAttributes SetLineFlag True Dim legend As New BubblePlotLegend thePlotl 0 82 0 15 0 14 0 25 legendAttributes legend AddLegendItem 10 Million 10 attrib2 legendFont legend AddLegendItem 25 Million 25 attrib2 legendFont legend AddLegendItem 40 Million 40 attrib2 legendFont legend AddLegendGeneralText ChartObj LEGEND HEADER Bubble Size Colors Black legendFont chartVu AddChartOb
7. 2 0 5 ChartSupport GetRandomDouble open minval Math Min stockPriceData 3 stockPriceData 0 maxval Math Max stockPriceData 3 stockPriceData 0 stockPriceData 1 maxval 1 5 ChartSupport GetRandomDouble high stockPriceData 2 minval 1 5 ChartSupport GetRandomDouble low currentdate Add incrementbase increment Chart Datasets 110 if currentdate Get ChartObj HOUR OF DAY gt 16 currentdate Add ChartObj DAY OF YEAR 1 currentdate SetTOD 9 30 0 currentEvent new ChartEvent xValues i position stockPriceData currentEvent AxisLabel XXX position ToString currentEvent ToolTip ToolTip position ToString eventArray i currentEvent EventGroupDataset Datasetl new EventGroupDataset Stock Data eventArray 4 EventSimpleDataset Dataset2 Datasetl ConvertToEventSimpleDataset 1 EventCoordinates pTransforml new EventCoordinates Datasetl VB Dim minval As Double 0 0 maxval As Double 0 0 Dim incrementbase As Integer ChartObj MINUTE Dim increment As Integer 10 Dim currentdate As New ChartCalendar Dim eventArray As ChartEvent New ChartEvent nNumPnts 1 stockPriceData 3 25 5 close stockPriceData 0 24 5 open StockPriceData 1 26 T high stockPriceData 2 24 low Dim currentEvent As New ChartEvent currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode currentdate SetTO
8. LinearAxis constructors Axes 184 Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal axtype As Integer _ Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal axtype As Integer _ ByVal minval As Double _ ByVal maxval As Double Ct public LinearAxis PhysicalCoordinates transform int axtype public LinearAxis PhysicalCoordinates transform int axtype double minval double maxval transform Places the axes in the coordinate system defined by transform axtype Specifies if the axis is an x axis X AXIS ora y axis Y AXIS minval Sets the minimum value for the axis maxval Sets the maximum value for the axis Other axis properties minor tick mark spacing number of minor tick marks per major tick mark axis intercept tick mark lengths tick mark direction and axis tick mark origin are automatically calculated using an auto axis method Set these properties explicitly if you need to override the automatically calculated values SetAxisIntercept method Visual Basic Public Sub SetAxisIntercept _ ByVal intercept As Double Ct public void SetAxisIntercept double intercept E SetAxisTicks method Visual Basic Overloads Public Sub SetAxisTicks ByVal tickorigin As Double _ ByVal tickspace As Double _ ByVal ntickspermajor As Integer _ 185 Axes Visual Basic Overloads Public Sub SetAxisTicks ByVa
9. Simple event axis example C EventSimpleDataset Datasetl new EventSimpleDataset Actual Sales char EventCoordinates pTransforml new EventCoordinates Datasetl pTransforml SetScaleStartY 0 pTransforml SetGraphBorderDiagonal 0 15 15 9 0 8 Background background new Background pTransforml ChartObj GRAPH BACKG Color FromRgb 30 70 70 Color FromRgb 90 20 155 ChartObj Y AX chartVu AddChartObject background EventAxis xAxis new EventAxis pTransforml EventAxis TICK RULE MAJOREV ChartObj X AXIS xAxis SetColor Colors White tevents ROUND IS ENT Axes 208 chartVu AddChartObject xAxis LinearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS yAxis SetColor Colors White chartVu AddChartObject yAxis Visual Basic Dim Datasetl As New EventSimpleDataset Actual Sales chartevents Dim pTransforml As New EventCoordinates Datasetl pTransforml SetScaleStartY 0 pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 8 Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 30 70 70 Color FromRgb 90 20 155 ChartObj Y AXIS chartVu AddChartObject background Dim xAxis As New EventAxis pTransforml EventAxis TICK RULE MAJOREVENT ChartObj X AXIS xAxis SetColor Colors White chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS yAxis SetColor Colors White chartVu AddChartObject
10. TimeAxisLabels This class labels the major tick marks of the associated TimeAxis object The class supports many time 23 59 59 and date Class Architecture 44 5 17 2001 formats It is also possible to define custom date time formats ElapsedTimeAxisLabels This class labels the major tick marks of the associated ElapsedTimeAxis object The class supports HH MM SS and MM SS formats with decimal seconds out to 0 00001 i e 12 22 43 01234 It also supports a cumulative hour format 101 51 22 and a couple of day formats 4 5 51 22 4D 5 51 22 PolarAxesLabels This class labels the major tick marks of the associated PolarAxes object The x axis is labeled from 0 0 to the polar scale magnitude and the circular axis is labeled counter clockwise from 0 to 360 degrees starting at 3 00 AntennaAxesLabels This class labels the major tick marks of the associated AntennaAxes object The y axis is labeled from the radius minimum to the radius maximum The circular axis is labeled clockwise from 0 to 360 degrees starting at 12 00 EventAxisLabels This class labels the major tick marks of the associated EventAxis object The class supports many time 23 59 59 and date 5 17 2001 formats It is also possible to define custom date time formats Chart Plot Classes ChartPlot ContourPlot GroupPlot PieChart PolarPlot AntennaPlot SimplePlot Plot objects are objects that display data organized in a ChartDataset class There are six
11. You can retrieve a copy of the date time data using the TimeSimpleDataset GetTimeXData or GetTimeYData method It returns an array of ChartCalendar objects and it is not a reference to the underlying data The underlying data is stored as double values that represent the millisecond equivalent of the date time values The TimeSimpleDataset GetXData and GetYData methods return references to the underlying numeric data You can also modify a point at a time using one of the SetTimeDataPoint SetTimeXDataValue or SetTimeYDataValue and SetYDataValue or SetXDataValue methods If you need to add new points to the dataset increasing its size use one of the AddTimeDataPoint or InsertTimeDataPoint methods Delete data points using the DeleteTimeDataPoint method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a simple time datasets 81 Chart Datasets C int nnumpnts 32 ChartCalendar xl new ChartCalendar nnumpnts double yl new double nnumpnts double y2 new double nnumpnts y1 0 100 y2 0 30 x1 0 ChartCalendar currentdate Clone currentdate Add ChartObj MONTH 3 for i951 i lt nnumpnts i xl i ChartCalendar currentdate Clone yl i yl i 1 5 1 0 75 ChartSupport GetRandomDouble y2 i y2 i 1 15 i 0 95 ChartSupport GetRandomDouble currentdate Add ChartObj MONTH 3 Time
12. return PathGeometry result 259 Simple Plot Objects Set the custom symbol using SimpleScatterPlot SetCustomScatterPlotSymbol method after the SimpleScatterPlot object is created Individual scatter plot symbols in a scatter plot object can have unique properties Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods Simple scatter plot example extracted from the example program ScatterPlots class SimpleScatter C prransforml SetGraphBorderDiagonal 0 15 15 90 0 725 Background background new Background pTransforml ChartObj PLOT BACKGROUND Colors White chartVu AddChartObject background Define and add axes axes labels and grids to chart hartAttribute attribl new ChartAttribute Colors Blue 1 DashStyles Solid ttribl SetFillColor Colors Blue ttribl SetFillFlag true ttribl SetSymbolSize 10 impleScatterPlot thePlotl new SimpleScatterPlot pTransforml Dataset2 ChartObj CROSS attribl chartVu AddChartObject thePlot1 DD DD DC ChartAttribute attrib3 new ChartAttribute Colors Red 1 DashStyles Solid attrib3 SetFillColor Colors R d attrib3 SetFillFlag true attrib3 SetSymbolSize 6 SimpleScatterPlot thePlot3 new SimpleScatterPlot pTransforml Dataset3 ChartObj CIRCLE attrib3 chartVu AddChartObject thePlot3 Visual Basic Dim pTransforml As New CartesianCoordinates ChartObj LINEAR_SCALE _ ChartObj LINEAR SCALE pTrans
13. 297 Simple Plot Objects GroupDataset Datasetl new GroupDataset First xl yl CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartX 0 pTransforml SetScaleStartY 0 Background background new Background pTransforml ChartObj PLOT BACKGROUND Color FromRgb 255 255 255 chartVu AddChartObject background prransforml SetGr phBorderDiagonal 0 15 15 90 0 70 Define axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Blue 3 DashStyles Solid ChartAttribute attribArray new ChartAttribute numGroups for i20 i lt numGroups i attribArray i ChartAttribute attribl Clone MultiLinePlot thePlotl new MultiLinePlot pTransforml Datasetl attribArray chartVu AddChartObject thePlotl Visual Basic Dim numPoints As Integer 100 Dim numGroups As Integer 7 Dim x1 numPoints 1 As Double Dim yl numGroups 1 numPoints 1 As Double Dim i j As Integer For i D To numPoints 1 xl i CDbl i 0 2 For j 0 To numGroups 1 ylije i J Lh DUI t DR ly 5 0 1 0 Math Rept e 7 9 J J Next j Next i yl 0 5 ChartObj rBadDataValue y1 3 15 ChartObj rBadDataValue theFont New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold Dim Datasetl As New GroupDat
14. 403 File and Printer Rendering RBMPR IJPGI GIF TIEE PNG ALL files imagefilechooser Filter Image Files BMP JPG GIF TIFF PNG 5 9 xw imagefilechooser FileName filename Show save file dialog box Dim result As Nullable Of Boolean If result True Then filename imagefilechooser FileName Dim fileinformation As New FileInfo filename Dim fileext As String fileinformation Extension imagefilechooser ShowDialog fileext fileext ToUpper Dim imageencoder As BufferedImage ImageFormats If fileext BMP Then imageencoder BufferedImage ImageFormats Bmp ElseIf fileext JPG OrElse fileext JPEG Then imageencoder BufferedImage ImageFormats Jpg ElseIf fileext GIF Then imageencoder BufferedImage ImageFormats Gif ElseIf fileext TIF OrElse fileext TIFF Then imageencoder BufferedImage ImageFormats Tif ElseIf fileext PNG Then imageencoder BufferedImage ImageFormats Png ElseIf fileext WMP Then imageencoder BufferedImage ImageFormats Wmp Else imageencoder BufferedImage ImageFormats Jpg End If Dim bufimage As New BufferedImage currentChart imageencoder bufimage Savelmage filename End If End Sub BufferedImage example saving a Panel object extracted from the example program LinePlotSalesVolume class Window1 C public void SaveAsFile object sender YKS K RoutedEventArgs e String filename
15. FAQs 454 5 Trapping a mouse event and determining the mouse cursor position in device and physical coordinates Identifying the chart object that intersects the mouse event Displaying appropriate information about the chart object There are many classes that aid in one or more of these functions The MouseListener class will trap a mouse event in the chart view The FindObj class will filter and return the chart object if any that intersects the mouse cursor when a mouse button is pressed The MoveObj class will filter select and move a chart object as the mouse is dragged across the chart The DataToolTip class will find the data point in a chart nearest the mouse cursor and display xy information about the data point as a popup ChartText display The DataToolTip can also be customized for the display of custom information about the selected data point It only takes a few lines to add a simple y value tool tip to an existing chart C DataToolTip datatooltip new DataToolTip chartVu datatooltip SetEnable true chartVu SetCurrentMouseListener datatooltip Visual Basic Dim datatooltip As New DataToolTip chartVu datatooltip SetEnable True chartVu SetCurrentMouseListener datatooltip Most all of the example programs have charts which use data tool tips See the SimpleLinePlots examples LineFill LinePlotSegments and SimpleLineAndScatterPlot Also see the Bargraphs examples SimpleBars DoubleB
16. GraphObj ChartText AxisLabels EventAxisLabels The EventAxisLabels class extends the AxisLabels class adding extensive time and date formatting capability Use it to label axes created using the EventAxis class Label formats A time axis label can take many forms Variations on these forms include Time formats hh mm ss hh mm mmiss etc 5 Date formats mm dd yy dd mm yy mm yy etc There are more ways to format time and date information than numeric data The QCChart2D for Net software directly supports twelve time formats and twenty two date formats It is also possible to create custom date time formats The software makes use of the 235 Axis Labels System DateTime ToString method to format times and dates A table listing predefined date time formats appears below Date Time Format Constant TIMEDATEFORMAT MSDDD TIMEDATEFORMAT MSDD TIMEDATEFORMAT MSD TIMEDATEFORMAT MS TIMEDATEFORMAT 12HMSDD TIMEDATEFORMAT 12HMSD TIMEDATEFORMAT 12HMS TIMEDATEFORMAT 12HM TIMEDATEFORMAT 24HMDDD TIMEDATEFORMAT 24HMDD TIMEDATEFORMAT 24HMS TIMEDATEFORMAT 24HM TIMEDATEFORMAT STANDARD TIMEDATEFORMAT MDY TIMEDATEFORMAT DMY TIMEDATEFORMAT MY TIMEDATEFORMAT Q TIMEDATEFORMAT MMMM TIMEDATEFORMAT MMM TIMEDATEFORMAT M TIMEDATEFORMAT DDDD TIMEDATEFORMAT DDD Format String mm ss fff mmt ss ff mm ss f m ss h mm ss ff h mm ss f H mm ss ff H mm ss f H mm ss
17. Using QCChart2D for WPF to Create Windows Applications 426 Wi Window1 FEN d Theoretical vs Experimental Data e e Quinn Curtis 5 amp B 2 o S z 2 2 g vo e o z 40 60 MBAs 1000 employees Energy Companies Software Companies Predicted Scatter plots usually display some form of sampled data There are other ways to incorporate charts into your application You can add a UserControl to your program Add UserControl and place the chart entirely in the UserControl The ChartView object is referenced in the Grid panel of the UserControl s xaml file and initialized in the UserControl s behind code file The UserControl derived class is then referenced in the main Window xaml file The UserControlChartExamplel demonstrates this method Or You can add a UserControl to your program but change the inheritance from UserControl to ChartView Since ChartView is a subclass of UserControl this is valid In this case you want to remove the Grid section from the xaml file of the ChartView derived class The Grid panel is opaque and the chart will not show through The ChartView derived class is then referenced in the main Window xaml file See the UserControlChartExample2 program for an example of this technique Or You can just reference the ChartView class in the main Windows xaml file Define the chart in the behind code file Windows xaml cs or Windows xaml vb See the Us
18. y 17 new ChartCalendar 2002 ChartObj OCTOBER 1 theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold TimeGroupDataset Datasetl new TimeGroupDataset Actual Sales x1 y1 TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES NEAR pTransforml SwapScaleOrientation pTransforml SetScaleStartY 0 pTransforml SetGraphBorderDiagonal 0 22 15 95 0 8 F 285 Simple Plot Objects Define axes axes labels and grids FloatingBarPlot thePlotl new FloatingBarPlot pTransforml ChartAttribute attribl new ChartAttribute Colors Black 1 DashStyles Solid Colors Green attribl SetFillFlag true thePlotl InitFloatingBarPlot Datasetl 0 75 attribl ChartObj JUSTIFY CENTER thePlotl SetBarOrient ChartObj HORIZ DIR chartVu AddChartObject thePlotl Visual Basic Dim nnumpnts As Integer 18 Dim numgroups As Integer 2 Dim xl nnumpnts 1 As Double Dim yl numgroups 1 nnumpnts 1 As ChartCalendar x1 0 6 y1 0 0 New ChartCalendar 2002 ChartObj JANUARY 1 yl 1 0 New ChartCalendar 2003 ChartObj JANUARY 1 xl 1 5 yl 0 1 New ChartCalendar 2002 ChartObj JANUARY 1 yl 1 1 New ChartCalendar 2002 ChartObj MAY 1 xlti7y 1 yl 0 17 New ChartCalendar 2002 ChartObj JULY 1 yl 1 17 New ChartCalendar 2002 ChartObj OCTOBER 1 theFont New ChartFont SansSer
19. 393 395 398 412 413 422 423 430 431 437 438 439 443 444 445 446 447 448 449 450 452 453 454 455 456 457 460 461 ChartTitle 59 66 318 365 367 370 371 372 ChartView 21 23 26 28 29 34 61 63 65 74 78 82 94 97 100 104 107 160 161 162 163 164 165 166 167 174 184 189 198 208 209 219 220 227 228 239 244 245 246 247 311 312 317 318 319 320 321 324 326 327 330 334 335 337 338 339 381 382 388 395 396 399 402 403 406 448 450 451 453 454 455 457 ChartView 1 3 7 11 13 19 21 23 26 28 29 34 61 62 63 65 74 78 82 94 97 100 104 107 160 161 162 163 164 165 166 167 174 184 189 198 208 209 219 220 227 228 239 244 245 246 247 310 311 312 313 314 315 317 318 319 320 321 324 326 330 333 334 335 337 338 339 381 382 383 384 385 388 395 396 397 399 400 402 403 404 405 406 409 410 411 412 414 415 419 420 421 423 424 427 429 430 432 435 436 437 439 448 449 450 451 453 454 455 457 458 459 Comma separated Values sss essen CSV 63 65 72 73 74 75 77 78 79 80 81 84 85 93 94 96 97 98 99 100 101 102 103 104 106 107 266 Contour plotting 0 sccccccscccesccsses dach egedoh grey da adab gk goah ContourDataset 29 65 72 83 84 85 86 87 303 304 ContourDataset 29 65 72 83 84 85 86 87 303 304 CSV
20. C double xMin 5 double xMax 15 double yMin OF Scaling and Coordinate Systems 160 double yMax 15 CartesianCoordinates simpleScale simpleScale new CartesianCoordinates xMax yMin xMin yMax Visual Basic Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax AS double 15 Dim simpleScale As CartesianCoordinates simpleScale New CartesianCoordinates xMax yMin xMin yMax Use the CartesianCoordinates SetCoordinateBounds method in the same manner The example below inverts the y scale simpleScale SetCoordinateBounds xMin yMax xMax yMin Invert the x and y scale of a TimeCoordinates object in an analogous fashion Example of inverted scaling using a TimeCoordinates constructor C ChartCalendar xMin new ChartCalendar 1996 ChartObj FEBRUARY 5 ChartCalendar xMax new ChartCalendar 2002 ChartObj JANUARY 5 double yMin 0 double yMax 15 TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMax yMin xMin yMax Visual Basic Dim xMin As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 Dim xMax As ChartCalendar New ChartCalendar 2002 ChartObj JANUARY 5 Dim yMin As Double 0 Dim yMax As Double 15 Dim simpleTimeScale As TimeCoordinates simpleTimeScale New TimeCoordinates xMax yMin xMin yMax Use the TimeCoordinates SetCoordinateBounds method in the same manner The example below inverts the y s
21. ChartFont titleFont new ChartFont SansSerif 12 FontStyles Normal FontWeights Bold AxisTitle yaxistitle new AxisTitle yAxis titleFont Test Score chartVu AddChartObject yaxistitle AxisTitle xaxistitle new AxisTitle xAxis titleFont Student 4 chartVu AddChartObject xaxistitle Visual Basic Dim xAxis As New LinearAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS hartVu AddChartObject yAxis e Dim xAxisLab As New NumericAxisLabels xAxis xAxisLab SetTextFont theFont hartVu AddChartObject xAxisLab Q Dim yAxisLab As New NumericAxisLabels yAxis yAxisLab SetTextFont theFont chartVu AddChartObject yAxisLab Dim titleFont As New ChartFont SansSerif 12 FontStyles Normal FontWeights Bold Dim yaxistitle As New AxisTitle yAxis titleFont Test Score hartVu AddChartObject yaxistitle Q Dim xaxistitle As New AxisTitle xAxis titleFont Student hartVu AddChartObject xaxistitle Q Numeric Time Elapsed Time and String Label Classes Class ChartLabel ChartText ChartLabel StringLabel TimeLabel t ElapsedTimeLabel NumericLabel The ChartLabel class is the abstract base class for all of the formatted label classes The axis label classes use formatted labels to label the axis tick marks They are also useful for chart annotations Position the objects using a
22. Color c Color FromRgb 255 0 0 VB Dum e ds Color Color FromArgb 127 255 0 0 Dam e s Color Color FromRgb 255 0 0 Linestyle Constants Line styles are used to specify whether a line is solid dashed dotted or some combination of dot and dash styles The line style class used in the Net Forms based version of QCChart2D is derived from the System Drawing DashStyle class The WPF version of the line style class derives from the System Windows Media DashStyle class Whereas the line style enumerated constants for System Drawing line styles are found in the DashStyle class in WPF they are found in the DashStyles class Example System Drawing WPF C DashStyle ls DashStyle Solid DashStyle c DashStyles Solid VB Dim ls as DashStyle DashStyle Solid Dim ls as DashStyle DashStyles Solid Class Architecture 70 Fonts It is strange but WPF does not encapsulate font properties into a single class like the System Drawing Font class Instead WPF text objects which require a font specification use separate properties for the font name font size font style and the font weight We found this to be inconvenient so we created a simple ChartFont class which superficially looks like the old System Drawing Font class That way we could keep source codes consistent System Drawing Font theFont new Font Microsoft Sans Serif 10 FontStyle Regular VB Dim theFont As New Font Microsoft Sans Serif 10 FontStyle Regular W
23. ElapsedTimeA xes The ElapsedTimeAxis is subclassed from the LinearAxis class and has much in common with it The only difference between the two is the way in which major and minor tick marks are calculated in the CalcAutoAxis method The ElapsedTimeAxis takes into account the base 60 of seconds per minute and minutes per hour and the base 24 of hours per day Read the sections Linear Axis Minimum and Maximum Linear Minor and Major Tick Mark Intervals Linear Axis Intercept Linear Axis Tick Mark Origin under the discussion of LinearAxis Creating a Elapsed Time Axis There are two main constructors for ElapsedTimeAxes objects The first ElapsedTimeAxes constructor assumes that the axis extents match the extents of the underlying coordinate system transform The second ElapsedTimeAxes constructor sets the axis extents to the specified minimum and maximum values regardless of the underlying coordinate system ElapsedTimeAxes constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal axtype As Integer Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal axtype As Integer _ Axes 202 ByVal minval As TimeSpan _ ByVal maxval As TimeSpan _ Ct public ElapsedTimeAxis PhysicalCoordinates transform int axtype public ElapsedTimeAxis PhysicalCoordinates transform int axtype double minval double maxval transform Places th
24. H mm MMMMM dd yyyy M dd yy d MM yy M yy None MMMM MMM MMM dddd ddd Example String Result 12 33 999 12 33 99 12 33 9 12 33 11 12 33 99 11 12 33 9 11 12 33 11 12 23 12 33 99 23 12 33 9 23 12 33 23 12 December 7 2000 12 07 00 7 12 00 7 00 QI January Jan J Tuesday Tue TIMEDATEFORMAT D TIMEDATEFORMAT Y TIMEDATEFORMAT MDY2000 TIMEDATEFORMAT DMY2000 TIMEDATEFORMAT MY2000 TIMEDATEFORMAT Y2000 TIMEDATEFORMAT MDY HMS TIMEDATEFORMAT DMY HMS TIMEDATEFORMAT MDY HM TIMEDATEFORMAT DMY HM ddd yy M dd yyyy d MM yyyy M yyyy Yyyy H mm ss nM dd yy H mm ss nd M yy H mm nM dd yy H mm nd M yy Axis Labels 236 00 12 07 2000 7 12 2000 7 2000 2000 12 23 33 12 07 00 23 12 33 12 07 00 12 23 33 12 07 00 23 12 33 12 07 00 In some cases the TIMEDATEFORMAT Q format for example the DateTime ToString class does not handle the desired conversion In cases like this the date time Format constant is trapped and undergoes additional processing to create the final label That is why some of the date format strings are the same event though the resulting labels are different EventAxis Labels constructor There is only one main constructor for EventAxisLabels objects Visual Basic Overloads Public Sub New _ ByVal baseaxis As EventAxis _ Ct public TimeAxisLabels EventAxis baseaxis M 237 Axis Labels
25. New ChartCalendar 1996 ChartObj FEBRUARY Dim xMax As ChartCalendar New ChartCalendar 2002 ChartObj JANUARY 0 105 Dim yMin As Double Dim yMax As Double Dim simpleTimeScale As TimeCoordinates simpleTimeScale New TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed Dim xAxis As TimeAxis New TimeAxis simpleTimeScale Create the linear y axis 5 5 Axes 200 Dim yAxis As LinearAxis New LinearAxis simpleTimeScale ChartObj Y AXIS Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Custom time axis example C Define a Time coordinate system ChartCalendar xMin new ChartCalendar 1996 ChartObj FEBRUARY 5 ChartCalendar xMax new ChartCalendar 2002 ChartObj JANUARY 5 double yMin 0 double yMax 105 int xAxisTickMarkFormat ChartObj TIMEAXIS MONTHWEEK double xAxisMinorTickLength 5 double xAxisMajorTickLength 10 int xAxisTickDirection ChartObj AXIS MIN TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed TimeAxis xAxis new TimeAxis simpleTimeScale xAxisTickMarkFormat xAxis SetAxisTicksAttributes xAxisMinorTickLength xAxisMajorTickLength xAxisTickDirection Create the linear y axis
26. chartVu AddChartObject xAxisLab5 14 How do I place more than one graph in a view One way to create multiple charts is to create multiple instances of the ChartView class and add each ChartView object to a container object such as a Window or UserControl The WPF layout manager is used to manage the position and size of each ChartView Another way is to place multiple charts in the same ChartView object This makes it easier to guarantee alignment between the axes of separate graphs The trick to doing this is to create separate coordinate system objects CartesianCoordinates TimeCoordinates or FAQs 458 PolarCoordinates for each chart and to position the plot area of each coordinate system so that they do not overlap Use one of the coordinate systems SetGraphBorder methods Many of the examples use this technique including Bargraphs GroupBargraphs Bargraphs DoubleBarPlot FinancialExamples OHLCChart FinancialExamples FinOptions DynamicCharts DynPieChart PieCharts PieAndLineChart and PieCharts PieAndBarChart The example below was extracted from the FinancialExamples OHL CChart class C pTransforml new TimeCoordinates pTransforml SetGraphBorderDiagonal 0 1 15 90 0 6 pTransform2 new TimeCoordinates pTransform2 SetGraphBorderDiagonal 0 1 7 90 0 875 Visual Basic pTransforml new TimeCoordinates pTransforml SetGraphBorderDiagonal 0 1 15 90 0 6 pTransform2 new TimeCoordinate
27. chartview UpdateDraw 4 How do you zoom charts that use multiple coordinate systems The ChartZoom class will zoom one or more simultaneous coordinate systems The example program SuperZoom zooms a chart that has one x axis and five y axes Use the ChartZoom constructor that accepts an array of coordinate system objects 5 How do you select a chart object and create a dialog panel that permits editing of that objects properties The QCChart2D for WPF library does not include predefined dialogs for editing chart object properties The look feel and details of such dialogs are application specific and it is up to the application programmer to provide these The property editor tables common to many packages are designed to be used by developers not end users You can add your own dialogs that edit the characteristics important to your end users If you want to select the chart object by pressing a mouse button while the cursor is on the object 451 FAQs use the FindObj class Override the OnMouseDown method and invoke the appropriate dialog panel there The following example is extracted from the EditChartExample example program C public class LinePlot public TimeAxis xAxis null public LinearAxis yAxis null ChartView chartVu null class CustomFindObj FindObj LinePlot currentObj null public CustomFindObj LinePlot component base component chartVu currentObj component public void I
28. stockPriceData 0 24 5 open stockPriceData 1 26 high stockPriceData 2 24 low ChartEvent currentEvent new ChartEvent currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode currentdate SetTOD S 33 09 for i 0 i lt nNumPnts i double position i 1 xValues i ChartCalendar currentdate Clone AE 4i 0 stockPriceData 3 2 0 5 ChartSupport GetRandomDouble close Scaling and Coordinate Systems stockPriceData 0 2 0 5 ChartSupport GetRandomDouble open minval Math Min stockPriceData 3 stockPriceData 0 maxval Math Max stockPriceData 3 stockPriceData 0 stockPriceData 1 maxval 1 5 ChartSupport GetRandomDouble high stockPriceData 2 minval 1 5 ChartSupport GetRandomDouble low currentEvent new ChartEvent xValues i position stockPriceData currentEvent AxisLabel XXX position ToString currentEvent ToolTip ToolTip position ToString eventArray i currentEvent currentdate Add incrementbase increment if currentdate Get ChartObj HOUR_OF DAY gt 16 currentdate Add ChartObj DAY OF YEAR 1 currentdate SetTOD 9 30 0 Visual Basic Dim minval As Double 0 0 maxval As Double 0 0 Dim incrementbase As Integer ChartObj MINUTE Dim increment As Integer 10 Dim currentdate As New ChartCalendar Dim eventArray As ChartEvent New ChartEvent n
29. this Name SaveFileDialog imagefilechooser new SaveFileDialog imagefilechooser Filter Image Files BMP JPG GIF TIFF PNG BMP JPG GIF TIFF PNG All files pU px ers imagefilechooser FileName filename Show save file dialog box Nullable lt bool gt result imagefilechooser ShowDialog if result true filename imagefilechooser FileName FileInfo fileinformation new FileInfo filename String fileext fileinformation Extension fileext fileext ToUpper BufferedlImage ImageFormats imageencoder if fileext BMP imageencoder BufferedImage ImageFormats Bmp else if fileext JPG fileext JPEG imageencoder BufferedImage ImageFormats Jpg else if fileext GIF imageencoder BufferedImage ImageFormats Gif else if fileext TIF fileext TIFF imageencoder BufferedImage ImageFormats Tif else if fileext PNG imageencoder BufferedImage ImageFormats Png else if fileext WMP imageencoder BufferedImage ImageFormats Wmp else imageencoder imageencoder BufferedImage ImageFormats Jpg BufferedImage bufimage new BufferedImage currentChart imageencoder bufimage Savelmage filename Visual Basic Public Sub SaveAsFile ByVal sender As Object ByVal e As RoutedEventArgs Dim currentChart As ChartView chartViewl Dim filename As String Me Name Dim imagefilechooser As New SaveFileDialog
30. void DefineSimpleBars ChartView chartVu ChartFont theFont int nnumpnts 8 ChartCalendar xl new ChartCalendar nnumpnts double yl new double nnumpnts ChartCalendar currentdate new ChartCalendar 1998 ChartObj JANUARY 1 ime i yL 100 x1 0 ChartCalendar currentdate Clone currentdate Add ChartObj MONTH 12 For i 1 i nnumpnts i xl i ChartCalendar currentdate Clone currentdate Add ChartObj MONTH 12 TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR pTransforml SetScaleStartY 0 pTransforml SetTimeScaleStart new ChartCalendar 1997 pTransforml SetGraphBorderDiagonal 0 15 15 9 0 8 ChartObj GRAPH BACKGROUND ChartObj Y AXIS y1 i yl i 1 25 i 0 75 ChartSupport GetRandomDouble t theFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal TimeSimpleDataset Datasetl new TimeSimpleDataset Actual Sales xl yl ChartObj AUTOAXES FAR ChartObj guLY 1595 H rg Background background new Background pTransforml if Color FromRgb 30 70 70 Color FromRgb 90 20 155 Background background new Background pTransforml ChartObj GRAPH BACKGROUND Colors LightBlue chartVu AddChartObject background m imeAxis xAxis new TimeAxis pTransforml xAxis SetColor Colors Black chartVu AddChartObject xAxis H yAxis
31. 158 191 195 196 197 198 227 228 254 255 263 264 276 281 282 283 285 287 288 292 293 297 299 329 338 339 375 376 430 431 437 438 452 453 Candlestick plot CandlestickPlot 44 46 66 265 274 2775 2776 284 334 CandlestickPlot 44 46 66 265 274 275 276 334 Cartesian cOordinates see CartesianCoordinates 31 32 65 110 112 116 117 118 119 120 121 122 124 135 139 155 156 157 158 159 160 161 163 164 165 184 189 219 220 244 257 260 267 277 278 281 282 290 295 301 302 305 306 310 312 313 314 318 320 327 328 343 344 412 422 444 446 454 455 CartesianCoordinates 31 32 65 110 112 116 117 118 119 120 121 122 124 135 139 155 156 157 158 159 160 161 163 164 165 184 189 219 220 244 257 260 267 277 278 281 282 290 295 301 302 305 306 310 312 318 320 327 328 343 344 444 446 454 455 Cell plots codec m eee ER CellPlot 44 46 66 265 274 276 277 278 CelIPlot oer 44 46 66 265 274 276 277 278 Chart object attributes 28 32 Attribute 3 11 28 32 34 53 65 69 169 170 172 174 197 198 216 248 249 250 251 252 253 254 255 256 257 258 250 260 262 263 264 266 267 268 269 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 29
32. 20 How do I get data from my database into a chart The real question is How do you get data from your database into a simple Net program storing sequential data values in data array variables This is up to you and is independent of the charting software We recommend that you use the SQL database classes that are part of Net and study the documentation provide by Microsoft and other sources such as the O Reilly programming books Once you can read individual data elements of your data base it is a trivial matter to place the numeric and calendar data into simple Net array variables and from there plot the data 21 How do I use this charting software to generate chart images on the fly from a server The BufferedImage class creates chart images independent of any physical display context The BufferedImage class uses standard Net encoders to generate image files You can use this image as an image object in an HTML page 22 Can QCChart2D for WPF be used to create programs and controls that run like Java applets in web browsers Yes there are several options See the discussion of using the QCChart2D for WPF in web applications in the previous chapter FAQs 464 INDEX EIB e Point3D 63 64 65 83 84 85 86 AntennaAnpotatton 52 53 66 355 356 AntennaAnnotation 52 53 66 355 356 357 AntennaAxes 34 40 42 66 178 179 210 212 213 215 240 241 247 248 346 351 352 AntennaAxes 34
33. 90 attribl Gradient cg The example below uses the GRADIENT MAPTO OBJECT mapping mode to map four colors to each bar of the bar plot regardless of the bar size C ChartAttribute attribl new ChartAttribute Colors Green 0 DashStyles Solid Colors Green Color barcolors Colors Red Colors Orange Colors Yellow Colors White double II barbreakpoints 0 0 0 33 0 66 1 0 int gradmode ChartGradient GRADIENT MAPTO OBJECT ChartGradient cg new ChartGradient pTransforml gradmode barcolors barbreakpoints 80 jr attribl Gradient cg Visual Basic Dim attribl As New ChartAttribute Colors Green 0 DashStyles Solid Colors Green Dim barcolors As Color Colors Red Colors Orange Colors Yellow Colors White Dim barbreakpoints As Double 0 0 0 33 0 66 1 0 Dim gradmode As Integer ChartGradient GRADIENT MAPTO OBJECT Dim cg As ChartGradient New ChartGradient pTransforml grad mode barcolors _ barbreakpoints 90 attribl Gradient cg Class Background Two rectangular areas act as a backdrop for the other graphical elements of a chart The first is the rectangle formed by the ChartView class This rectangle 1s the graph area and all elements of the chart axes labels plots titles etc are within its bounds The second area is the plot area That area is within the graph area Its position within the graph area is set using one of the 177 Colors Gradients and Backgrounds Physic
34. ByVal ChartAttribute As ChartAttribute Overloads Public Sub New _ ByVal PhysicalCoordinates As PhysicalCoordinates ByVal SimpleDataset As SimpleDataset ByVal Int32 As Integer ByVal ChartAttribute As ChartAttribute ByVal ChartAttribute As ChartAttribute ByVal Double As Double Cf public SimpleVersaPlot PhysicalCoordinates transform SimpleDataset dataset ChartAttribute lineattrib public SimpleVersaPlot PhysicalCoordinates transform SimpleDataset dataset Double barwidth Double barbase ChartAttribute attrib Int32 barjust public SimpleVersaPlot hysicalCoordinates transform SimpleDataset dataset Int32 symtype ChartAttribute symbolattrib ry LZ public SimpleVersaPlot PhysicalCoordinates transform SimpleDataset dataset Int32 symtype ChartAttribute lineattrib ChartAttribute symbolattrib Double barwidth transform The coordinate system for the new SimpleVersaPlot object 265 Simple Plot Objects dataset The versa plot represents the values in this dataset symtype The symbol used in the line marker plot Use one of the scatter plot symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR CIRCLE lineattrib Specifies the attributes line color and line style for the line part of the line marker plot symbolattrib Specifies the attributes line and fill color for the symbol part of
35. ByVal x1 As Double _ ByVal dstart As ChartCalendar ByVal x2 As Double _ ByVal dstop As ChartCalendar Ct public TimeCoordinates ChartCalendar dstart double yl ChartCalendar dstop double y2 int nweektype public TimeCoordinates double xl ChartCalendar dstart double x2 ChartCalendar dstop public TimeCoordinates ChartCalendar dstart double yl ChartCalendar dstop double y2 SetTimeCoordinateBounds method Visual Basic Overloads Public Sub SetTimeCoordinateBounds ByVal dstart As ChartCalendar ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal y2 As Double _ ByVal nweektype As Integer _ Overloads Public Sub SetTimeCoordinateBounds ByVal dstart As ChartCalendar ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal y2 As Double Overloads Public Sub SetTimeCoordinateBounds ByVal x1 As Double 133 Scaling and Coordinate Systems ByVal dstart As ChartCalendar ByVal x2 As Double _ ByVal dstop As ChartCalendar _ Ct public void SetTimeCoordinateBounds ChartCalendar dstart double yl ChartCalendar dstop double y2 int nweektype LE public void SetTimeCoordinateBounds ChartCalendar dstart double yl ChartCalendar dstop double y2 public void SetTimeCoordinateBounds double xl ChartCalendar dstart double x2 ChartCalendar dstop SetWeekType method Visual Basic Public Sub SetWeekType _ By
36. C ChartFont theLabelFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold ChartText currentLabell new ChartText pTransforml theLabelFont L b 50uA 15 5 yl 0 85 9L y ChartObJ PHYS POS chartVu AddChartObject currentLabell ChartText currentLabel2 new ChartText pTransforml theLabelFont rib 1000A 15 5 y1 1 85 41 GhettObj PHYS POS chartVu AddChartObject currentLabel2 ChartText currentLabel3 new ChartText pTransform1 theLabelFont HUT 150uA 15 5 yi 2 95 1l OChartObj PHYS POS chartVu AddChartObject currentLabel3 ChartText currentLabel4 new ChartText pTransforml theLabelFont L b 200uA 15 5 yl 3 85 L ChartObDJ PHYS POS chartVu AddChartObject currentLabel4 ChartText currentLabel5 new ChartText pTransforml theLabelFont I b 250gA 15 5 yl1 4 85 1 ChartObj PHYS POS chartVu AddChartObject currentLabel5 Visual Basic Dim theLabelFont As New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold Dim currentLabell As New ChartText pTransforml theLabelFont b 50uA 15 5 YL 85 1 GhartObj PHYS POS chartVu AddChartObject currentLabell Dim currentLabel2 As New ChartText pTransforml1 theLabelFont I b 100uA 15 5 yl l 95 t 1 ChartObi FHYS POS chartVu AddChartObject currentLabel2 ct Dim currentLabel3 As New C
37. ChartAttribute attrib4 new ChartAttribute Colors MediumPurple 2 DashStyles Dot Colors MediumPurple AntennaLineMarkerPlot thePlotl new AntennaLineMarkerPlot pAntennaTransform Datasetl attribl s chartVu AddChartObject thePlotl AntennaLineMarkerPlot thePlot2 new AntennaLineMarkerPlot pAntennaTransform Dataset2 attrzib2 j chartVu AddChartObject thePlot2 AntennaAnnotation thePlot3 new AntennaAnnotation pAntennaTransform ChartObj ANTENNA ANNOTATION ANGULAR 180 attrib chartVu AddChartObject thePlot3 AntennaAnnotation thePlot4 new AntennaAnnotation pAntennaTransform ChartObj ANTENNA ANNOTAT ON RADIUS 12 attrib4 chartVu AddChartObject thePlot4 VB Dim transparentRed As Color Color FromArgb 180 255 0 0 Dim transparentBlue As Color Color FromArgb 180 0 0 255 Dim attribl As New ChartAttribute transparentRed 1 DashStyles Solid attribl SymbolSize 7 Dim attrib2 As New ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue attrib2 SymbolSize 7 Dim thePlotl As New AntennaLineMarkerPlot pAntennaTransform hartVu AddChartObject thePlot1 Q Dim thePlot2 As New AntennaLineMarkerPlot pAntennaTransform hartVu AddChartObject thePlot2 Q Dim attrib3 As New ChartAttribute Colors Yellow 3 Dim attrib4 As New ChartAttribute Colors MediumPurple Colors MediumPurple Dim thePlot3 As New AntennaAnnotation pAntennaTransform ChartObj ANTENNA ANNOTATION ANGULAR 180 attr
38. FindObj DataToolTip 63 Class Architecture DataCursor MoveData MagniView MoveCoordinates MultiMouseListener ChartZoom Several classes implement delegates for mouse events The MouseListener class implements a generic interface for managing mouse events in a graph window The DataCursor MoveData MoveObj ChartZoom MagniView and MoveCoordinates classes also implement mouse event delegates that use the mouse to mark move and zoom chart objects and data MouseListener MoveObj FindObj DataCursor MoveData DataToolTip ChartZoom This class implements Net delegates that trap generic mouse events button events and mouse motion events that take place in a ChartView window A programmer can derive a class from MouseListener and override the methods for mouse events creating a custom version of the class This class extends the MouseListener class and it can select chart objects and move them Moveable chart objects include axes axes labels titles legends arbitrary text shapes and images Use the MoveData class to move objects derived from SimplePlot This class extends the MouseListener class providing additional methods that selectively determine what graphical objects intersect the mouse cursor This class combines the MouseListener class and Marker class Press a mouse button and the selected data cursor horizontal and or vertical line cross hairs or a small box appears at the point of the mouse
39. GroupBarPlot MultiLinePlot OHLCPlot CandlestickPlot etc The tooltip values displayed in the tooltip window reflect the actual data values stored in the associated dataset and do not reflect the implicit summation that goes on in the display of stacked plot objects You should not use symbols to highlight the tooltip data point for stacked objects since the position of the tooltip symbol in the chart will not take into account the stacked object summation DataToolTip constructors The constructors below create a DataToolTip object Visual Basic Overloads Public Sub New _ ByVal component As ChartView Overloads Public Sub New _ ByVal component As ChartView _ ByVal buttonmask As MouseButton Cf public DataToolTip ChartView component public DataToolTip ChartView component MouseButton buttonmask SS component A reference to the ChartView object that the chart is placed in buttonmask Specifies the mouse button that is trapped to invoke a move Create the DataToolTip object and then install it using the ChartView SetCurrentMouseListener method This adds the DataToolTip object as a MouseListener to the ChartView object Enable Disable the function using DataToolTip SetEnable method Call ChartView SetCurrentMouseListener null to remove the object as a mouse listener for the chart view Set the threshold distance for deciding if the nearest data point found is a hit using the DataToolTip SetHitTes
40. GroupDataset The GroupDataset class represents group data where every x value can have one or more y values The number of x values in a group plot is referred to as the number of columns or as NumberDatapoints and the number of y values for each x value is referred to as the number of rows or NumberGroups Think of spreadsheet file that looks like x values x 0 x1 x 2 x3 xa x 5 y values group 0 y 06 0 ail y 02 y 03 y 0 4 y 0 5 y values group 41 y 1 0 y LI yv L2 y L3 y L4 als y values group 2 y 2 0 y 2 1 y 22 y 23 y 24 va Chart Datasets 98 number of x values NumberDatapoints NumberColumns 6 number of y values for each x value NumberGroups NumberRows 3 This would be the ROW_MAJOR format if the data were stored in a CSV file GroupDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As Double _ ByVal y As Double Cf public GroupDataset string sname double Ax double y E sname Specifies the name of the dataset x An array that specifies the x values of a group dataset The length of the x array sets the number of columns for the group dataset y An array that specifies the y values of a group dataset where y has the dimensions number of rows number of columns The number of rows in the y array sets the number of groups in the group dataset The number of columns in the y array must match the length of the
41. In calculating the font size and the line thickness the current size properties are multiplied by the ResizeMultiplier The initial value of the ResizeMultiplier is 1 0 and the objects size properties correspond exactly to the initial settings Shrink the ChartView window and the ResizeMultiplier for each object is set to a value that is less than 1 0 Enlarge the window and the ResizeMultiplier is set to a value greater than 1 0 The ChartView class has three resize modes that it can use to resize graph objects placed in the graph NO_RESIZE OBJECTS The ResizeMultiplier stays fixed at 1 0 Resizing the graph window does not affect the size and thickness of the charts graph objects Text will stay the same size and lines will stay the same thickness The overall chart shrinks it is just that size of the chart text and the thickness of the chart lines do not change Resize the window small enough and the chart text will overlap and the lines used to draw the chart will look thick when compared to the chart size AUTO RESIZE OBJECTS Resizing the graph window causes the size and thickness of the charts graph objects to resize The auto resize algorithm looks at which dimension changed the most x or y and uses the larger of the two changes to calculate new sizes for lines and text Text and lines will shrink the same percentage Resize the chart window with a minimum change in the charts aspect ratio the change in the chart size will be very close
42. InitializeComponent InitializeCharts void InitializeCharts Size bitmapsize new Size 850 600 chartView4 new ChartView int bitmapsize Width int bitmapsize Height ss new SimpleScatter chartView4 chartView4 PreferredSize bitmapsize MakeWindowlessImage chartView4 void MakeWindowlessImage ChartView graph BufferedImage ImageFormats imageencoder BufferedImage ImageFormats Bmp BufferedImage bufimage new BufferedImage graph imageencoder RenderTargetBitmap bitmap bufimage GetRenderedBitmap 1 imagel is defined in XAML code as an Image control and placed in fourth tab imagel Source bitmap VB Imports com quinncurtis chart2dwpf Imports Microsoft Win32 Imports System IO Namespace ImageCharts III lt summary gt Interaction logic for Windowl xaml lt summary gt Partial Public Class Windowl Inherits Window Private chartView4 As ChartView Public Sub New InitializeComponent InitializeCharts End Sub Private Sub InitializeCharts Dim bitmapsize New Size 850 600 chartView4 New ChartView bitmapsize Width bitmapsize Height ss New SimpleScatter chartView4 chartView4 PreferredSize bitmapsize MakeWindowlessImage chartView4 407 File and Printer Rendering End Sub Private Sub MakeWindowlessImage ByVal graph As ChartView Dim imageencoder As BufferedImage ImageFormats BufferedImage ImageFormats Bmp Dim bufimage As New Buffered
43. MouseButton Left oomYEnable true oomXEnable true oomXRoundMode ChartObj AUTOAXES FAR oomYRoundMode ChartObj AUTOAXES FAR c able true zoomObj nStackEnable true zoomObj InternalZoomStackProcesssing true chartVu SetCurrentMouseListener zoomObj ioni ich zoomObj S zoomObj o Dim Datasetl As New Simple Dim Dataset2 As New Si Dim Dataset3 As New Simple S Third x1 y3 Dim Dataset4 As New Simp ataset Fourth xl y4 Dim Dataset5 As New SimpleDataset Fifth xl y5 HR eE MOL Y1 cond xl y2 Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE ChartC LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Il Dim Lido iei As New Car artObj pTransform2 AutoScale Dataset2 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR tesianCoordinates ChartObj LINEAR SCALE Dim pTransform3 As New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransform3 AutoScale Dataset3 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR lI Dim pirar sform4 As New CartesianCoordinates ChartObj LINEAR SCALE artObj NEAR SCALE M Av le Dataset4 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Dim pTransform5 As New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransform5 AutoScale Dataset5 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR
44. PolarAxes baseaxis baseaxis This is the axis the axis labels are for Other axis label properties font rotation numeric format axis labels direction and numeric precision are automatically set These properties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Overloads Public Sub SetAxisLabels ByVal font As ChartFont _ ByVal labcolor As Color C4 public void SetAxisLabels ChartFont font Color labcolor SetAxisLabelsFormat method Visual Basic Public Sub SetAxisLabelsFormat ByVal format As Integer _ 241 Axis Labels Ct public void SetAxisLabelsFormat int format font The font object used to display the axis label text labcolor The color of the label text format Sets the numeric format for the axis labels Use one of the numeric format constants DECIMALFORMAT SCIENTIFICFORMAT EXPONENTFORMAT BUSINESSFORMAT ENGINEERINGFORMAT PERCENTFORMAT CURRENCEYFORMAT CURRENCYBUSINESSFORMAT Polar axes labels example C double polarmagnitude 5 0 PolarCoordinates polarscale new PolarCoordinates polarmagnitude PolarAxes polarAxes new PolarAxes polarscale PolarAxesLabels polarAxesLabels new PolarAxesLabels polarAxes polarAxesLabels SetAxisLabelsFormat ChartObj DECIMALFORMAT polarAxesLabels SetAxisLabelsDecimalPos 2 Create the ChartView object to place graph objects in ChartView char
45. Quinn Curtis Inc 18 Hearthstone Dr Medfield MA 02052 USA or by telephone at 508 359 6639 or by electronic mail at support Quinn Curtis com iv QCChart2D for WPF Table of Contents Contact Eeer EE i Te troduction E 9 New Features found in the 2 3 version of OC Chart2D ius ire e erp ara HR AER ERR pde EROS 9 ARTIE cundo taa DG amen aee Lom ts UN ed emendet adn 11 Customer SUDDOIb n ar ac Wee aE EE 11 W PE Back IT aR asiaa 13 OCChart2D for WPE Dependetclies eod eror p ri ete eet ed ocn e Ee a ee Re id 15 Directory Structure of QCChart2D for WER eene tenente etna rn tetas etant ta aset tta sett taa aee an 17 Critical Note Running the Example Programs sese eee eee eee 23 Chapter SUMMAT o esee Gp Rei t RU ee a as E eU RR DRE TU en F E P ERR EDO e aan Qo des 25 2 Class Architecture of the QCChart2D for WPF Class Library esee 28 Major Design Considerations EE 28 QCChart2D for WPF Class tee Eeer 29 Chart Window EE 30 Re 31 Scale Hee nr ENS 32 Coordmate Transtormi ClaSs S mii Posi vt DIN Cup ta uae Ead cus te DERI En EAR NE T SEI 33 Auto scaling EE 35 Ch rt Object EE 36 Mouse Interaction CLASS Soest Ee 62 File and Printer Rendering Classes 0 0 EE 64 Miscellaneous Utility EG 65 Source Code Differences between the Net Forms version of QCChart2D QCRTGraph and the WPF VOISIO ue E ebe 68 3 Chart Datasets ov asd asa Ones du aco adu e actu dN scs Mate M Rea 74 SimpledNumetic R E 75
46. Sales xData yData Dim simpleScale As CartesianCoordinates _ New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LOG SCALE simpleScale AutoScale dataset simpleScale SetScaleStopX 10 simpleScale SetScaleStartX 1 0 Coordinate Systems using times and dates Many charting applications use data where the x or y coordinate values are in the form of time and date records The creation of a powerful yet flexible time and date physical coordinate system for scaling charts is a major challenge Important design goals include The programmer scales the graph using objects of the ChartCalendar class The scale should support a continuous range of date time scaling from milliseconds to hundreds of years The scale should have a 5 7 day week option A day does not have to be 24 hours long instead it can have a specific range for example 8 30 AM to 4 00 PM Time and date axes used to delineate a date time scale must be able to display and label tick marks for days weeks months and years taking into account the non uniformity of years months weeks and days in the Gregorian calendar OO SS The ChartCalendar Class 125 Scaling and Coordinate Systems The ChartCalendar class represents time and date information in the format used by the majority of the world It is a universal time class capable of representing time with a resolution of milliseconds and a dynamic range of hundreds of years It contains time and date f
47. SetChartObjAttributes method The simple bar plot SetColor method can be used to change the bar color Individual bars in a simple bar plot object can have unique properties Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods Simple bar plot example extracted from the example program Bargraphs class SimpleBars C TimeSimpleDataset Datasetl new TimeSimpleDataset Actual Sales x1 y1 TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartY 0 pTransforml SetTimeScaleStart new ChartCalendar 1997 ChartObj JULY 1 pTransforml SetGraphBorderDiagonal 0 15 15 9 0 8 Background background new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 30 70 70 GQolor FromRgb 90 20 159 ChartObj Y AXIS chartVu AddChartObject background Define and add axes axes labels and grids to chart j a hartAttribute attribl new ChartAttribute Colors Green 0 DashStyles Solid Colors Green ttribl SetFillFlag true SimpleBarPlot thePlotl new SimpleBarPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 0 0 attribl ChartObj JUSTIFY CENTER chartVu AddChartObject thePlot1 w Visual Basic Dim Datasetl As New TimeSimpleDataset Actual Sales xl yl Dim pTransforml As New TimeCoordinates pTransforml AutoScale Datasetl Ch
48. Spain United States Engl and Positions bar double x1 new double NumberOfCountries Y axis string labels Each string will label a major tick mark StringAxisLabels yAxisLabl new StringAxisLabels yAxisl yAxisLabl SetAxisLabels theFont 0 ChartObj AXIS MIN ChartObj LABEL ALL Colors Black CountryNames 14 yAxisLabl SetColor Colors Black chartVu AddChartObject yAxisLabl 225 Axis Labels Visual Basic Dim NumberOfCountries As Integer 13 Dim NumberOfGroups As Integer 2 Dim CountryNames As String China Japan Russia Italy Sweden Denmark Mexico Brazil France Australia Spain United States England Positions bar Dim x1 NumberOfCountries As Double Overweight data for magnitude of of stacked bars Make sure arrays are sized for 0 N 1 Dim Men NumberOfGroups 1 NumberOfCountries 1 As Double Dim Women NumberOfGroups 1 NumberOfCountries 1 As Double Y axis string labels Each string will label a major tick mark Dim yAxisLabl As New StringAxisLabels yAxisl yAxisLabl SetAxisLabels theFont 0 ChartObj AXIS MIN ChartObj LABEL ALL Colors Black CountryNames 14 yAxisLabl SetColor Colors Black chartVu AddChartObject yAxisLabl Time and Date Axis Labels Class TimeAxisLabels GraphObj ChartText AxisLabels TimeAxisLabels The TimeAxisLabels class extends the AxisLabels class adding extensive t
49. Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal axtype As Integer Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal axtype As Integer _ ByVal minval As Double _ ByVal maxval As Double C public LogAxis PhysicalCoordinates transform 189 Axes int axtype E public LogAxis PhysicalCoordinates transform int axtype double minval double maxval transform Places the axes in the coordinate system defined by transform axtype Specifies if the axis is an x axis X AXIS or a y axis Y AXIS minval Sets the minimum value for the axis maxval Sets the maximum value for the axis The first LogAxis constructor assumes that the axis extents match the extents of the underlying coordinate system transform The second LogAxis constructor sets the axis extents to the specified minimum and maximum values regardless of the underlying coordinate system Other axis properties axis intercept tick mark lengths tick mark direction and axis tick mark origin are automatically calculated using an auto axis method These properties can be explicitly set if you need to override the automatically calculated values SetAxisIntercept method Visual Basic Public Sub SetAxisIntercept _ ByVal intercept As Double Ct public void SetAxisIntercept double intercept E SetAxisTicks method Visual Basic Overloads Public
50. _ New ChartCalendar 1996 hartObj NOVEMBER 5 Dim yData As Double 10 22 33 44 55 46 33 25 14 9 Dim dataset As TimeSimpleDataset New TimeSimpleDataset Sales xData yData Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale AutoScale dataset simpleTimeScale SetTimeScaleStart new ChartCalendar 1996 ChartObj JANUARY 5 simpleTimeScale SetTimeScaleStop new ChartCalendar 1997 ChartObj JANUARY 5 The auto scale methods that use an array of datasets to determine the proper range are very similar Example of auto scaling a TimeCoordinates object using the multiple datasets C 131 Scaling and Coordinate Systems ChartCalendar xData new ChartCalendar 1996 ChartObj FEBRUARY 5 new ChartCalendar 1996 ChartObj MARCH 5 new ChartCalendar 1996 ChartObj APRIL 5 new ChartCalendar 1996 ChartObj MAY 5 new ChartCalendar 1996 ChartObj JUNE 5 new ChartCalendar 1996 ChartObj JULY 5 new ChartCalendar 1996 ChartObj AUGUST 5 new ChartCalendar 1996 ChartObj SEPTEMBER 5 new ChartCalendar 1996 ChartObj OCTOBER 5 new ChartCalendar 1996 ChartObj NOVEMBER 5 double yDatal 10 22 33 44 55 46 33 25 14 9 double yData2 20 12 43 54 15 26 63 25 24 19 double yDatas 30 52 13 64 25 75 13 35 24 19 All of the datasets reference the same xData array of ChartCalendar dates
51. chartVu AddChartObject thePlotl 18 Polar and Antenna Plots PolarPlot PolarLinePlot PolarScatterPlot AntennaPlot AntennaLinePlot AntennaScatterPlot AntennaLineMarkerPlot Polar charts play an important in engineering applications involving electronics and advanced control systems Polar charts give a visual interpretation to mathematical problems involving trigonometric functions and complex numbers Antenna charts are used to display the operating characteristics of antennas The PolarPlot class is an abstract class representing plot types that use data organized as arrays of x and y values where an x value represents the magnitude of a point in polar coordinates and the y value represents the angle of a point in polar coordinates Polar plots types include line plots and scatter plots The polar angle values stored as the y values in the SimpleDataset should be in radians If the raw data is in degrees convert the data to radians using the ChartSupport ToRadians method The AntennaPlot class is an abstract class representing plot types that use data organized as arrays of x and y values where an x value represents the radial value of a point in antenna coordinates and the y value represents the angle of a point in antenna coordinates Antenna plots types include line plots scatter plots line marker plots and annotations The antenna angle values stored as the y values in the SimpleDataset should be spe
52. new FloatingBarPlot pTransforml ChartAttribute attribl new ChartAttribute Colors Black 1 ChartObj DashStyles Solid Colors Green ttribl SetFillFlag true thePlotl floatingBarPlot Datasetl 0 75 attribl ChartObj JUSTIFY CENTER thePlotl SetBarOrient ChartObj HORIZ DIR w Visual Basic Dim Datasetl As New GroupDataset Actual Sales x1 yl Dim pTransforml As New CartesianCoordinates pTransforml SetScaleStartx 0 pTransforml SetScaleStartY 0 pTransforml SetScaleStopxX 12 pTransforml SetScaleStopY 7 Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Black 1 DashStyles Solid Colors Green attribl SetFillFlag True Dim thePlotl As New FloatingBarPlot pTransforml Datasetl 0 75 attribl ChartQobj JUSTI FY CENTER thePlotl SetBarOrient ChartObj HORIZ DIR Floating bar plot example that uses date time values as the floating bar endpoints extracted from the example program CalendarData class FloatingBars2s C int nnumpnts 18 int numgroups 2 double xl new double nnumpnts ChartCalendar yl new ChartCalendar numgroups nnumpnts x1 0 6 y1 0 0 new ChartCalendar 2002 ChartObj JANUARY 1 y 0 new ChartCalendar 2003 ChartObj JANUARY 1 x e 3 y1 0 1 new ChartCalendar 2002 ChartObj JANUARY 1 y 1 new ChartCalendar 2002 ChartObj MAY 1 E 7 1 y1 0 17 new ChartCalendar 2002 ChartObj JULY 1
53. new TimeCoordinates dstart starttod yl dstop stoptod y2 ChartObj WEEK 5D VB Dim starttod As Long 9 60 30 60 1000 msecs cooresponding to 9 30 AM Dim stoptod As Long 16 60 60 1000 msecs cooresponding to 4 00 PM Dim dstart As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 Dim dstop As ChartCalendar New ChartCalendar 1997 ChartObj JANUARY 5 Dim yl As Double 0 0 Dim y2 As Double 55 0 S Dim stockTimeScale As TimeCoordinates StockTimeScale New TimeCoordinates dstart starttod yl dstop stoptod y2 ChartObj WEEK 5D Another technique uses the default constructor and scales the coordinates using the TimeCoordinates SetTimeCoordinateBounds method SetTimeCoordinateBounds Method Visual Basic Overloads Public Sub SetTimeCoordinateBounds ByVal dstart As ChartCalendar ByVal starttod As Long ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal stoptod As Long ByVal y2 As Double _ ByVal nweektype As Integer _ Overloads Public Sub SetTimeCoordinateBounds ByVal x1 As Double _ ByVal dstart As ChartCalendar ByVal starttod As Long ByVal x2 As Double _ ByVal dstop As ChartCalendar ByVal stoptod As Long _ ByVal nweektype As Integer _ Ct public void SetTimeCoordinateBounds ChartCalendar dstart long starttod double yl ChartCalendar dstop long stoptod double y2 int nweektype E public void SetTimeCoordinateBounds double x
54. not upper limit double y2 new double n2 dimension is size not upper limit x2 0 5 x2 1 7 x2 n2 1 100 y2 0 15 y2 1 25 v2 n2 1 100 SimpleDataset Dataset2 new SimpleDataset Second x2 y2 Example of reading and writing a simple dataset from a CSV file C CSV csvdata new CSV SimpleDataset Datasetl new SimpleDataset csvdata SimpleDataset csv 0 0 Write out dataset as a CSV file under a different file name Datasetl WriteSimpleDataset csvdata SimpleDataset2 csv Visual Basic Dim csvdata As CSV New CSV Dim Datasetl As SimpleDataset New SimpleDataset csvdata SimpleDataset csv 0 0 Write out dataset as a CSV file under a different file name Datasetl WriteSimpleDataset csvdata SimpleDataset2 csv Chart Datasets 78 Example of modifying simple dataset elements using the indexed accessor property C Define a simple dataset SimpleDataset Datasetl new SimpleDataset First xl yl Point2D datapoint Dataset1 0 Get the xy point at index 0 in the dataset if datapoint X lt 0 datapoint X Math Abs datapoint X arbitrary Datasetl1 0 datapoint Change the datapoint Visual Basic Dim Datasetl As SimpleDataset New SimpleDataset First xl yl Dim datapoint As Point2D Dataset1 0 Get the xy point at index 0 in the dataset If datapoint X 0 Then datapoint X Math Abs datapoint X arbitrary Dataset1 0 datapo
55. plot objects text objects and data markers When a chart object draws itself it uses the viewport and the physical coordinate system stored in its instance of a PhysicalCoordinates class A chart can have one or more instances of the PhysicalCoordinates since a single chart can plot data against one or more physical coordinate systems Important numeric considerations Value limiting A chart should be scaleable to any numeric range that a user wants to plot This incorporates the entire range of floating point numbers support under Net A range of 10 30 is just as valid as a range of 4 10 30 even though there is 60 orders of magnitude of difference A user can attempt to plot data with an extremely large dynamic range the 10 30 range in a chart scaled for an extremely small range the 10 30 range The resulting user coordinate values resulting from such an extreme case can easily exceed the numeric range supported by the plotting functions Bad value checking Invalid data often finds its way into chart Invalid data can take many different forms The most obvious is the introduction of numeric values that do not fit the Net floating point format These types of numbers are often found in databases and representing non initialized or improperly initialized data Net cannot include an invalid floating point number in a calculation so it is best to try and avoid them Another type of invalid data is data that is a valid floating poi
56. the coordinate system is scaled to the number of event objects Each event object represents an x value and one or more y values The x value can be time based or numeric based while the y values are numeric based Since an event object can represent one or more y values for a single x value it can be used as the source for simple plot types simple line plot simple bar plot simple scatter plot simple line marker plot and group plot types open high low close plots candlestick plots group bars stacked bars etc Event objects can also store custom data tooltips and x axis strings The most common use for event based plotting will be for displaying time based data which is discontinuous financial markets data for example In financial markets the number trading hours in a day may change and the actual trading days Weekends holidays and unused portions of the day can be excluded from the plot scale producing continuous plots of discontinuous data The following classes have been added to the software in support of event based charting e ChartEvent A ChartEvent object stores the position value the time stamp y values and custom strings associated with the event EventArray A utility array class used to store ChartEvent objects EventAutoScale An auto scale class used by the EventCoordinates class EventAxis Displays an axis based on an EventCoordinates scale EventAxisLabels Displays the string labels labeling t
57. this Name SaveFileDialog imagefilechooser imagefilechooser Filter Image Files BMP JPG GIF TIEF PNG BMP JPG GIF TIFF PNG AIIl files new SaveFileDialog imagefilechooser FileName filename Show save file dialog box Nullable lt bool gt result imagefilechooser ShowDialog if result true filename imagefilechooser FileName FileInfo fileinformation new FileInfo filename String fileext fileinformation Extension fileext fileext ToUpper BufferedImage ImageFormats imageencoder if fileext BMP imageencoder BufferedImage ImageFormats Bmp else if fileext JPG fileext JPEG imageencoder BufferedImage ImageFormats Jpg else if fileext GIF imageencoder BufferedImage ImageFormats Gif else if fileext TIF fileext TIFF imageencoder BufferedImage ImageFormats Tif else if fileext PNG imageencoder BufferedImage ImageFormats Png else if fileext WMP File and Printer Rendering 404 imageencoder BufferedImage ImageFormats Wmp else imageencoder imageencoder BufferedImage ImageFormats Jpg BufferedImage bufimage new BufferedImage gridl imageencoder bufimage Savelmage filename Visual Basic Public Sub SaveAsFile ByVal sender As Object ByVal e As RoutedEventArgs Dim currentChart As ChartView chartViewl Dim filename As String Me Name Dim imagefilecho
58. yMax 129 Scaling and Coordinate Systems It is possible to scale the bounds of the coordinate system based on the data values in a time based dataset TimeSimpleDataset and TimeGroupDataset There are constructors and methods that take a single dataset and others that take an array of datasets Example of auto scaling a TimeCoordinates object using a single dataset C ChartCalendar xData new ChartCalendar 1996 ChartObj FEBRUARY 5 new ChartCalendar 1996 ChartObj MARCH 5 new ChartCalendar 1996 ChartObj APRIL 5 new ChartCalendar 1996 ChartObj MAY 5 new ChartCalendar 1996 ChartObj JUNE 5 new ChartCalendar 1996 ChartObj JULY 5 new ChartCalendar 1996 ChartObj AUGUST 5 new ChartCalendar 1996 ChartObj SEPTEMBER 5 new ChartCalendar 1996 ChartObj OCTOBER 5 new ChartCalendar 1996 ChartObj NOVEMBER 5 double yData 10 22 33 44 55 46 33 25 14 9 TimeSimpleDataset dataset new TimeSimpleDataset Sales xData yData TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale AutoScale dataset Visual Basic Dim xData As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 1996 ChartObj MARCH 5 New ChartCalendar 1996 New ChartCalendar 1996 New ChartCalendar 1996 New ChartCalendar 1996 New ChartCalendar 1996 New ChartCalendar 1996 New ChartCalendar 1996 hartObj OCTOBER 5 _ New ChartCalendar 199
59. 0 Dim polarscale As PolarCoordinates New PolarCoordinates polarmagnitude Dim polarAxes As PolarAxes New PolarAxes polarscale Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes Custom polar axes example C double polarmagnitude 15 0 PolarCoordinates polarscale new PolarCoordinates polarmagnitude PolarAxes polarAxes new PolarAxes polarscale double axestickspace 1 int axesntickspermajor double angletickspace 5 int anglentickspermajor 6 double minorticlength 5 double majorticlength 10 int tickdir ChartObj AXIS CENTER d OF polarAxes SetPolarAxesTicks axestickspace axesntickspermajor angletickspace anglentickspermajor minorticlength majorticlength Lickdir Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes Visual Basic Dim polarmagnitude As Double 15 0 Dim polarscale As PolarCoordinates New PolarCoordinates polarmagnitude Dim polarAxes As PolarAxes New PolarAxes polarscale Dim axestickspace As Double 1 Dim axesntickspermajor As Integer Dim angletickspace As Double 50 Dim anglentickspermajor As Integer Dim minorticlength As Double 5 Dim majorticlength As Double 10 Dim tickdir As I
60. 0 05 one 0 00004 100 04 02 00 02 04 Eis aca 3 3 a T a vele pai 0 10000 20000 30000 40000 10 LL 2800 15 i 2400 25 2000 0 5 10 15 The positioning of axes is very flexible Axes can have an inverted scale LinearAxis This class implements a linear axis with major and minor tick marks placed at equally spaced intervals Logarithmic Axes 1000 50000 100 i 400 5000 Linear X Log X Log X 10 Log Y 200 Linear Y 500 Log Y 1 0 50 0 1 0 5 0 20 40 60 80 100 0 02 02 2 20 200 1 10 100 1000 40 Log X 20 Linear Y 0 o2 0406 1 gt 4 6 10 p 40 60 100 5gg 400600 1000 100 Time X 10 Log Y 8 01 02 9 01 02 10 01 02 Logarithmic axes can be combined with linear logarithmic and time axes 39 Class Architecture LogAxis This class implements a logarithmic axis with major tick marks placed on logarithmic intervals for example 1 10 100 or 30 300 3000 The minor tick marks are placed within the major tick marks using linear intervals for example 2 3 4 5 6 7 8 9 20 30 40 50 90 An important feature of the LogAxis class is that the major and minor tick marks do not have to fall on decade boundaries A logarithmic axis must have a positive range exclusive of 0 0 and the tick marks can represent any logarithmic scale Date Axes Year YeavQuarter os LL morra 1985 4990 4995 2000 1998 4900 2000 2004 2002 2003 YeawMonth QuartevMonth an a a O Sea EL 4908 4900 2000 2001 2002 2003 4
61. 12HMSDD TIMEDATEFORMAT 12HMSD TIMEDATEFORMAT 12HMS TIMEDATEFORMAT 12HM TIMEDATEFORMAT 24HMSDD TIMEDATEFORMAT 24HMSD TIMEDATEFORMAT 24HMS TIMEDATEFORMAT 24HM TIMEDATEFORMAT STANDARD TIMEDATEFORMAT MDY TIMEDATEFORMAT DMY TIMEDATEFORMAT MY TIMEDATEFORMAT Q TIMEDATEFORMAT MMMM TIMEDATEFORMAT MMM TIMEDATEFORMAT M TIMEDATEFORMAT DDDD TIMEDATEFORMAT DDD TIMEDATEFORMAT D TIMEDATEFORMAT Y TIMEDATEFORMAT MDY2000 TIMEDATEFORMAT DMY2000 TIMEDATEFORMAT MY 2000 TIMEDATEFORMAT Y2000 TIMEDATEFORMAT MDY HMS TIMEDATEFORMAT DMY HMS TIMEDATEFORMAT MDY HM IIMEDATEFORMAT DMY HMS Simple time axis labels example theFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal EventSimpleDataset Datasetl new EventSimpleDataset Actual Sales chartevents EventCoordinates pTransforml new EventCoordinates Datasetl pTransforml SetScaleStartY 0 EventAxis xAxis new EventAxis pTransforml EventAxis TICK RULE MAJOREVENT ChartObj X AXIS xAxis SetColor Colors White chartVu AddChartObject xAxis LinearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS yAxis SetColor Colors White chartVu AddChartObject yAxis EventAxisLabels xAxisLab new EventAxisLabels xAxis xAxisLab SetAxisLabelsFormat ChartObj TIMEDATEFORMAT Y2000 xAxisLab SetColor Colors White chartVu AddChartObject xAxisLab Visual Basic Dim Datasetl As New EventSimpleDataset Actual Sales chartevents Dim pTransf
62. 20 and end at 50 000 with major tick marks at 20 200 2000 and 20000 The auto scale routines for logarithmic coordinate systems will always select a power of 10 for the minimum and maximum value of the scale You can use the auto scale routine and then override the minimum and or maximum values for the logarithmic scale The default LogAxis constructor will pick up on the minimum of the coordinate system and use that as the axis tick mark origin Or you can leave the coordinate system unchanged and change the starting point of the axis tick marks using the axis SetAxisTickOrigin method The example below is derived from the Logarithmic example code GroupDataset Datasetl new GroupDataset First x1 y1 CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LOG SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartX 20 Force start of scale at 20 AutoScale will always choose a power of 10 decade LogAxis xAxis new LogAxis pTransforml ChartObj X AXIS xAxis SetAxisTickOrigin 20 chartVu AddChartObject xAxis 457 FAQs Visual Basic Create the ChartView object to place graph objects in Dim Datasetl As GroupDataset New GroupDataset First xl yl Dim pTransforml As CartesianCoordinates _ New CartesianCoordinates ChartObj LOG SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR C
63. 2002 42002 7 2002 40 2002 1 2003 MonthiWeek FETTEN 9 0002 10 0102 140102 120102 1 01 03 Month Day 5 Day Week Month Day 7 Day Week 110102 1210102 1 01 03 Weel Day 7 Day Week TTT 10103 20505 30303 40105 10503 44203 1903 12603 WeekiD ay 5 Day Week pau Hour S EEE E LEE L EE EE Ie or 4 06 03 1303 42003 4 27 03 4 0103 4 02 03 10303 10403 There are more than 40 different time date axes types appropriate for scales ranging from 1 second to 100 years Date Axes QuarterMonth Fb aE E deb gk ol 2003 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 2004 Day 5 Day Week w T M w T F M T w rT F M T w 4 06 03 143 03 172003 Day 7 Day Week T T T T T T T T T T T T T U Wed Thu Fri Sat Sun Mon Tue Wed Thu Fi Sat Sun Mon Tue Wed Thu 1 05 03 41203 There are more than 40 different time date axes types appropriate for scales ranging from 1 second to 100 years Date Axes Gau Hour 8 HourHour Fr 10103 10203 110303 pa oo 00 1600 000 6 00 10103 10203 A HourHour Hout Minute krer reri reri errr EN ETT U TE O00 400 00 1200 eng 0 00 4 00 2 00 3 00 400 10103 10103 neu Minute 45 Minute Minute myy Im SR ER 0 00 4 00 290 3 00 0 00 0 15 0 30 0 45 4 00 10103 10103 5 Minute Minute 000 005 on oe 020 025 10103 Minute Second 0 00 00 0 01 00 0 02 00 0 03 00 41 0103 Minute 1 Seconds TETTE gO SEL ES 0 00
64. 257 238 255 250 5 Low 24 0 25 4 25 7 25 7 25 1 24 1 22 0 23 3 227 228 23 5 23 7 Close 25 0 26 3 264 26 0 25 6 24 6 237 247 238 242 245 238 lt gt C Rectangle2D posrect new Rectangle2D 0 0 0 0 1 0 1 0 387 Text Classes Ch da da da da ar da da da da da tasetviewer InitDatasetViewer chartVu pTransforml posrect Datasetl 5 12 0 tasetviewer EnableEdit true tasetviewer SyncTableRange true tasetviewer DatasetTable TableBackgroundMode tGeneralizedTableDisplay TABLE SINGLE COLOR BACKGROUND GRIDCELL tasetviewer SyncChart true tasetviewer ResizeMode ChartObj AUTO RESIZE OBJECTS tasetviewer SetArrayFormat 0 ChartObj TIMEDATEFORMAT MDY tasetviewer TransformList Add pTransform2 tasetviewer TransformList Add pTransform3 Visual Basic Dim posrect As New Rectangle2D 0 05 0 5 0 9 0 9 Dim rows As Integer 4 columns As Integer 10 startindex As Integer initialstartindex da da da da da tasetviewer InitDatasetViewer chartVu pTransforml Nothing Datasetl rows columns startindex tasetviewer AddDataset Dataset2 tasetviewer AddDataset Dataset3 tasetviewer EnableEdit True tasetviewer DatasetTable TableBackgroundMode ChartGeneralizedTableDisplay TABLE SINGLE COLOR BACKGROUND GRIDCELL da da da tasetviewer UseStripedGridBackground True tasetviewer RowHeaderFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal tasetviewer Column
65. 273 277 278 282 283 285 287 292 293 295 297 299 301 302 310 318 320 322 327 328 348 349 351 352 453 454 455 AutoScale 7 33 65 119 120 121 122 127 128 129 131 134 135 137 138 145 156 157 159 160 161 163 176 177 231 232 250 251 252 254 257 260 267 268 273 274 277 278 282 283 285 287 292 293 295 297 299 301 302 310 318 320 322 327 328 348 349 351 352 412 422 430 438 453 454 455 Axis 34 35 40 41 59 66 161 178 179 180 181 185 186 190 191 195 199 202 203 206 207 210 214 216 218 220 221 223 229 232 242 318 372 Axis label classes eere ttes AxisLabels 7 40 A1 42 66 92 135 142 145 146 148 151 152 153 154 161 190 214 215 216 218 219 220 221 222 223 225 226 2271 228 229 230 231 232 234 235 236 237 238 239 240 241 288 305 306 348 349 351 352 367 372 373 413 422 430 438 445 447 455 458 459 ChartLabel 59 60 66 367 370 373 Axis titles et beer eite tud axistitle 59 66 318 367 372 373 413 422 430 438 445 447 AxisLabels 40 41 66 161 214 215 216 221 223 229 232 237 240 367 455 AxisTitle 59 66 318 367 372 373 445 447 Backgrounds 11 34 66 161 174 175 176 177 251 252 254 251 267 285 287 288 290 292 293 295 301 302 305 306 343 345 348 349 351 352 380 446 Backgroun
66. 3 14 23 12 333 as an example of an elapsed time of three days 14 hours 23 minutes 12 seconds and 333 milliseconds You can also modify a point at a time using SetElapsedTimeXDataValue or SetElapsedTimeYDataValue if you are using TimeSpan objects and SetYDataValue or SetXDataValue if you use millisecond values If you need to add new points to the dataset increasing its size use one of the AddDataPoint or InsertDataPoint methods Delete data points using the DeleteDataPoint method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a group datasets from numeric arrays C int nNumPnts 5 nNumGroups 4 TimeSpan xValues new TimeSpan nNumPnts double groupBarData new double nNumGroups nNumPnts xValues 0 TimeSpan FromMinutes 1 groupBarData 0 0 6 3 groupBarData 1 0 3 1 groupBarData 2 0 2 2 groupBarData 3 0 1 8 xValues 1 TimeSpan FromMinutes 2 groupBarData 0 1 5 8 groupBarData 1 1 4 3 groupBarData 2 1 2 8 groupBarData 3 1 1 5 xValues 2 TimeSpan FromMinutes 3 groupBarData 0 2 5 5 groupBarData 1 2 4 5 groupBarData 2 2 2 5 groupBarData 3 2 2 1 xValues 3 TimeSpan FromMinutes 4 groupBarData 0 3 4 1 groupBarData 1 3 5 4 groupBarData 2 3 4 1 groupBarData 3 3 3 2 xValues 4 TimeSpan FromMinutes 5 groupBarData 0 4 3 8 groupBarData 1 4
67. 349 PolarScatterPlot 51 52 66 346 348 349 350 Polysutf ce class eee gere s 63 64 65 Polysurface 63 64 65 87 305 306 Printing 62 65 395 396 397 398 ChartPrint 62 65 395 396 397 398 414 423 Rectangle2D 63 64 65 114 116 117 339 340 381 387 Rectangle2D 63 64 65 114 116 117 339 340 381 383 384 385 386 387 389 RingChart c ec er des 55 341 342 343 IST esses 55 66 341 342 343 Scale classes nseni rinnen ERR ER ES 30 31 65 110 112 ChartScale 30 31 65 110 112 SE SimpleScatterPlot 55 57 66 92 249 255 256 257 258 260 316 411 413 414 420 421 422 423 Shapes erais 60 66 387 388 389 392 393 ChartShape 60 66 387 388 389 392 393 Simple datasets EES SimpleDataset 9 29 33 65 72 73 74 75 76 77 78 79 80 81 82 83 87 88 92 93 94 95 105 106 108 119 120 122 127 128 129 131 134 137 138 139 145 147 156 157 159 160 161 205 206 231 232 236 250 251 252 253 254 256 259 260 262 322 327 328 331 332 341 342 343 344 346 347 348 349 350 351 352 353 Appendix 470 354 380 381 382 412 422 430 438 453 454 460 461 Simple plot objects nason eina ae epa teikts SimplePlot 27 42 55 56 57 60 61 66 161 249 253 255 256 259 261 267 273 275 277 279 281 289 292 297 341 SimpleBarPlot 55 66 249 252 25
68. 373 374 375 376 377 378 381 383 385 386 387 389 390 391 392 393 395 397 398 399 400 402 416 449 452 453 454 455 456 457 459 461 Visual Basic 5 19 25 76 79 82 86 87 94 97 98 101 102 117 118 119 120 121 122 125 126 127 128 129 131 134 136 137 138 156 157 158 159 161 162 164 170 174 177 184 189 190 197 198 202 206 208 209 212 219 220 221 223 227 228 231 236 237 239 241 244 246 248 250 252 254 255 257 258 260 261 264 267 268 269 271 273 276 278 281 282 283 285 287 290 293 295 297 299 301 306 310 312 314 318 320 321 322 326 329 330 331 335 336 339 344 348 352 362 365 369 370 371 373 376 378 381 383 385 386 389 391 393 397 400 402 416 433 434 449 452 453 454 455 456 457 459 461 uibs ERE 25 406 425 433 Vis l CF i usate eto etico eti 5 25 406 425 Working coordmates esee WorkingCoordinates 31 65 110 112 114 WorkingCoordinates 31 65 110 112 114 World coordinates essere World oordmates 31 65 110 112 World oordmates esses 31 65 110 112 WPF Applicati h 14e ni ec hti repre WPF application 11 19 406 416 425 Zooming 61 65 66 323 324 325 326 327 329 347 448 ChartZoom 61 65 66 323 324 325 326 327 328 329 347 448 Appendix 472
69. 4 1 7 2 5 4 0 5 0 6 0 In Radians Dim magnitudeData As Double 20 33 44 55 46 33 54 64 Dim dataset As SimpleDataset _ New SimpleDataset Control angleData magnitudeData Dim pPolarTransform As PolarCoordinates New PolarCoordinates pPolarTransform AutoScale dataset ChartObj AUTOAXES FAR Antenna Coordinate Systems Class AntennaCoordinates PhysicalCoordinates CartesianCoordinates AntennaCoordinates An antenna coordinate s point is defined by its radial and angular values The radial and angle values can be positive or negative An angle range of 0 to 360 degrees clockwise starting at 12 00 sweeps a complete circle in antenna coordinates AntennaCoordinates are defined by specifying a starting and ending value for the radius Unlike a polar chart these values can be positive or negative Antenna coordinates always have an angular range 0 to 360 degrees AntennaCoordinates constructors 159 Scaling and Coordinate Systems The first way to create a AntennaCoordinates object is to use the constructor that specifies the minimum and maximum values of the radius AntennaCoordinates minvalue maxvalue double minvalue 40 double maxvalue 20 AntennaCoordinates antennacoords new AntennaCoordinates minvalue maxvalue Visual Basic Dim minvalue As Double 40 Dim maxvalue As Double 20 Dim antennacoords As AntennaCoordinates new AntennaCoordinates minvalue maxvalue Or you
70. 60 61 62 65 311 316 317 318 319 320 321 323 329 333 334 452 MouseListener 17 60 61 62 65 311 312 316 317 318 319 320 321 322 323 326 328 329 331 332 333 334 335 336 337 339 378 431 439 452 MoveCoordinates 61 62 65 316 320 321 322 347 MoveCoordinates 61 62 65 316 320 321 322 347 Moving chart data 61 65 316 318 319 320 347 MoveData 61 65 316 318 319 320 347 378 Moving graph objects 60 61 65 316 317 318 452 MoveObj suss 60 61 65 316 317 318 452 Multi line EE MultiLinePlot 17 44 50 66 169 265 293 294 295 301 334 368 388 392 MultiLinePlot 44 50 66 169 265 293 294 295 334 Nearest point class NearestPointData 63 64 65 313 314 NearestPointData eee 63 64 65 Numeric axis labels iro er NumericAxisLabels 40 41 66 214 215 216 218 219 220 2277 228 231 232 237 238 240 288 305 306 372 373 413 422 430 438 445 447 Numeric data point Label 66 DBartatapomtvalue eese Numeric labels eee edit ede eer aen nocet de NumericLabel 59 66 255 261 263 264 290 291 299 306 307 313 314 315 333 335 336 337 343 344 345 367 373 374 378 431 438 439 448 NumericAxisLabels 40 41 66 214 215 216 218 219 220 227 228 231 232 237 238 240 288 305 306 372 373 445 447 NumericLabel 5
71. 63 65 72 73 74 75 77 78 79 81 84 85 93 96 97 98 99 100 101 102 103 104 106 266 Customer Support 9 STET 460 CompressGroupDataset eene 460 CompressSimpleDataset esee 460 CompressTimeFieldGroupDataset CompressTimeFieldSimpleDataset 460 CompressTimeGroupDataset esses 460 CompressTimeSimpleDataset sss 460 Data Cursors iis aia etae eere e Wes et eet DataCursor 17 61 65 308 310 311 312 313 314 320 448 DataCursor 61 65 308 310 311 312 313 320 Dataset classes29 42 43 65 72 73 76 80 83 87 88 95 98 102 105 113 381 382 ChartDataset 29 42 43 65 72 73 76 80 83 87 88 95 98 102 105 113 381 382 Datasery iewer 23 380 381 382 384 385 datasetviewer 23 380 381 382 383 384 385 386 Data lool TIP heit eee d ot e en ttti datatooltip 17 60 61 65 333 334 335 336 337 338 339 431 439 452 Dumension ee 63 65 326 329 330 Dimension 28 29 30 63 65 75 83 96 99 103 110 111 112 135 165 181 196 321 325 326 329 330 331 332 341 365 391 ElapsedTimeAutoScale 33 65 231 232 ElapsedTimeAutoScale 33 65 231 232 ElapsedTimeAxis 34 38 39 42 179 190 199 200 201 202 203 204 215 229 231 232 ElapsedTimeAxis34 38 40 42 66 1
72. 99 12 33 9 12 33 11 12 33 99 11 12 33 9 11 12 33 11 12 23 12 33 99 23 12 33 9 23 12 33 23 12 December 7 2000 12 07 00 7 12 00 7 00 QI January Jan J Tuesday Tue 227 Axis Labels TIMEDATEFORMAT D ddd T TIMEDATEFORMAT_Y yy 00 TIMEDATEFORMAT MDY2000 M dd yyyy 12 07 2000 TIMEDATEFORMAT DMY2000 d MM yyyy 7 12 2000 TIMEDATEFORMAT MY2000 M yyyy 7 2000 TIMEDATEFORMAT Y2000 yyyy 2000 TIMEDATEFORMAT MDY HMS H mmi ss nM dd yy 12 23 33 12 07 00 TIMEDATEFORMAT DMY HMS H mm ssid M yy 23 12 33 12 07 00 TIMEDATEFORMAT MDY HM H nmWMM dd yy 12 23 33 12 07 00 TIMEDATEFORMAT DMY HM H mmWd M yy 23 12 33 12 07 00 In some cases the TIMEDATEFORMAT Q format for example the DateTime ToString class does not handle the desired conversion In cases like this the date time Format constant is trapped and undergoes additional processing to create the final label That is why some of the date format strings are the same event though the resulting labels are different TimeAxis Labels constructor There is only one main constructor for TimeAxisLabels objects Visual Basic Overloads Public Sub New _ ByVal baseaxis As TimeAxis _ C public TimeAxisLabels TimeAxis baseaxis LE Axis Labels 228 baseaxis This is the time axis the axis labels are for Other axis label properties font rotation numeric format axis labels direction and numeric precision are automatically set These prop
73. AXIS yAxis5 SetAxisIntercept xAxis GetAxisMax yAxis5 SetAxisTickDir ChartObj AXIS MAX yAxis5 SetChartObjAttributes attrib5 axis color matches line color chartVu AddChartObject yAxis5 NumericAxisLabels xAxisLab new NumericAxisLabels xAxis xAxisLab SetTextFont theFont chartVu AddChartObject xAxisLab NumericAxisLabels yAxisLabl new NumericAxisLabels yAxisl yAxisLabl SetTextFont theFont yAxisLabl SetAxisLabelsFormat ChartObj BUSINESSFORMAT chartVu AddChartObject yAxisLabl Lab2 new NumericAxisLabels yAxis2 heFont yAxisLab2 yAxisLab2 SetTextFont NumericAxisLabels yAxi L chartVu AddChartObject tn NumericAxisLabels yAxisLab3 new NumericAxisLabels yAxis3 yAxisLab3 SetTextFont theFont chartVu AddChartObject yAxisLab3 NumericAxisLabels yAxi yAxisLab4 SetTextFont chartVu AddChartObject Lab4 new NumericAxisLabels yAxis4 heFont yAxisLab4 tn NumericAxisLabels yAxisLab5 new NumericAxisLabels yAxis5 yAxisLab5 SetTextFont theFont chartVu AddChartObject yAxisLab5 ChartFont axisTitleFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold AxisTitle xaxistitle new AxisTitle xAxis axisTitleFont Event Partition chartVu AddChartObject xaxistitle Char char tGrid xgrid new ChartGrid xAxis tVu AddChartObject xgrid the thePlot tObject E LinePlo SimpleLin
74. Add new GradientStop Colors LightBlue 0 lgb GradientStops Add new GradientStop Colors LightSalmon 1 Background background new Background pTransforml GRAPH BACKGROUND lgb chartVu AddChartObject background Visual Basic Dim pTransforml As TimeCoordinates New TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 1 0 92 0 75 Dim lgb As New LinearGradientBrush lgb GradientStops Add New GradientStop Colors LightBlue 0 lgb GradientStops Add New GradientStop Colors LightSalmon 1 Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND lgb chartVu AddChartObject background 7 Axes Axis LinearAxis ElapsedTimeAxis PolarAxes AntennaAxes EventAxis LogAxis TimeAxis Chart axes describe for the viewer the physical coordinate system used to scale the plot area of a chart A well defined visually appealing chart will display one or more axes with the following characteristics Minimum and maximum values for axes endpoints that are appropriate for the displayed data e Appropriately spaced axis tick marks that permit the user to easily interpolate by simple inspection data values located between labeled tick marks e Axis tick mark labels that fall on logical even intervals Flexible axis placement inside or outside the plot area e Axes for linear date time elapsed time logarithmic polar and ant
75. AddChartObject chartLabell Visual Basic Dim theLabelFont As New ChartFont SansSerif 14 FontStyles Normal FontWeights Bold Dim chartLabell As New ChartText pTransforml theLabelFont Sales _ xValues 1 GetCalendarMsecs groupBarData 1 1 ChartObj PHYS POS chartLabell SetColor Colors White chartLabell SetYJust ChartObj AXIS MIN chartVu AddChartObject chartLabell Chart Title Classes Class ChartTitle ChartText ChartTitle The ChartTitle class creates a header subheader or footer for a chart The most common constructors are ChartTitle constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont ByVal tstring As String Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont _ ByVal tstring As String _ ByVal ntitletype As Integer _ ByVal ntitlepos As Integer _ Ct public ChartTitle PhysicalCoordinates transform ChartFont tfont string tstring LE public ChartTitle PhysicalCoordinates transform 373 Text Classes ChartFont tfont string tstring int ntitletype int ntitlepos transform Places the text in the coordinate system defined by transform tfont A reference to a ChartFont object tstring A reference to a string object ntitletype The title can be a header subhead or footer Use one of the title type constants CHART HEADER C
76. As ChartCalendar Cf public TimeSimpleDataset string sname ChartCalendar Xy double y public TimeSimpleDataset string sname double ChartCalendar Vi LE sname Specifies the name of the dataset x An array that specifies the x values either doubles or ChartCalendar objects of a dataset y An array that specifies the y values of a dataset either doubles or ChartCalendar objects The length of the y array must match the length of the x array Either x or y values should be ChartCalendar based The number of data points is the value of x Length property The x and y arrays must be the same length and every element must be initialized to a valid value All values in the arrays are plotted If the data is outside of the current chart scale the values will be clipped The next constructor creates a time dataset using the x and y values stored in a file that uses the CSV Comma Separated Value format There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the time values and the second column the y values If you use the ROW MAJOR format the first row represents the time values and the second row the y values Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer ByVa
77. AxisLabel XY i ToString currentdate Add ChartObj MONTH 12 theFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal EventSimpleDataset Datasetl new EventSimpleDataset Actual Sales chartevents EventCoordinates pTransforml new EventCoordinates Datasetl Visual Basic 97 Chart Datasets Dim nnumpnts As Integer 20 Dim x1 As ChartCalendar New ChartCalendar nnumpnts 1 Dim yl As Double New Double nnumpnts 1 Dim currentdate As New ChartCalendar 1998 ChartObj JANUARY 1 Dim chartevents As ChartEvent New ChartEvent nnumpnts 1 Dim i As Integer Dim startx As Double 1 For i 0 To nnumpnts 1 If i 0 Then y1 0 100 x1 0 DirectCast currentdate Clone ChartCalendar chartevents 0 New ChartEvent x1 0 startx y1 0 chartevents 0 AxisLabel XY amp 0 currentdate Add ChartObj MONTH 12 Else xl i DirectCast currentdate Clone ChartCalendar yl i y1 i 1 25 0 55 ChartSupport GetRandomDouble chartevents i New ChartEvent xl i i startx yl i chartevents i AxisLabel XY amp i ToString currentdate Add ChartObj MONTH 12 End If Next theFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal Dim Datasetl As New EventSimpleDataset Actual Sales chartevents Dim pTransforml As New EventCoordinates Datasetl Numeric Group Dataset Class GroupDataset ChartObj ChartDataset
78. C public void UpdateXScaleAndAxes int index int startindex index pTransforml SetScaleStartX double startindex pTransforml SetScaleStopX double startindex 100 xAxis CalcAutoAxis yAxis CalcAutoAxis xAxisLab CalcAutoAxisLabels yAxisLab CalcAutoAxisLabels chartVu UpdateDraw public void UpdateYScaleAndAxes int index chartVu int startindex index pTransforml SetScaleStartY double startindex pTransforml SetScaleStopY double startindex xAxis CalcAutoAxis yAxis CalcAutoAxis xAxisLab CalcAutoAxisLabels yAxisLab CalcAutoAxisLabels UpdateDraw private void InitializeChart ChartView chartvu chartVu chartVu chartVu chartVu chartVu chartVu chartVu chartvu chartVu chartvu o e hartVu hartVu Q hartVu hartVu Q EnableHScrollBarl true EnableVScrollBarl true HScrollBarl Minimum 0 HScrollBarl Maximum 200 HScrollBarl Value 0 HScrollBarl SmallChange 2 HScrollBarl LargeChange 20 VScrollBarl Minimum 0 VScrollBarl Maximum 100 VScrollBarl Value 50 VScrollBarl SmallChange 1 VScrollBarl LargeChange 5 HSerollBarl Soroll 4e nSorollBarl Soroll VScrollBaril Scroll vScrollBarl Scroll UpdateYScaleAndAxes int chartVu VScrollBarl Value 461 FAQs UpdateXScaleAndAxes int chartVu HScrollBarl Value internal void hScrollBarl Scroll object s
79. Candlestick Plots in Technical Analysis 7 03 12 7 05 12 7 06 12 7 09 12 7 10 12 7 11 12 The Open Close box is filled if the open price is greater than the close price Scaling and Coordinate Systems 144 Zoom in again and you can see the smooth transition from one day to the next even though the working hours are only a 9 30 to 16 00 subset of the 24 hours of a day E Form1 EurDolar CandestickChart FinLogPlot OHLCChart OpeningScreen FinancialOptions Techrical nalysis Candlestick Plots in Technical Analysis 12 00 00 13 00 00 14 00 00 15 00 00 9 30 00 11 00 00 12 00 00 13 00 00 14 00 00 15 00 00 7 03 12 The Open Close box is filled if the open price is greater than the close price This is accomplished because of the dual positioning values Position and TimeStamp of the ChartEvent class Each element of a plot object one of the candlestick objects in the plot above is positioned in a simple linear coordinate system starting at 0 and incrementing by 1 for each ChartEvent object In the previous example the first ChartEvent object is has a Position value of 0 0 and the last ChartEvent object has a position of 199 because there are 200 data points in the chart This is what keeps the individual elements of a plot object evenly spaced because the plot elements are positioned in the chart using the Position value not the TimeStamp value But the associated x axis EventAxis and x axis labels objects EventAxi
80. ChartGradient object will specify the defining range of colors for the gradient the breakpoints for the gradient colors and the mapping mode for mapping the breakpoints to the current chart Class ChartGradient ChartObj ChartGradient All ChartAttribute objects include a reference to a ChartGradient object Normally this reference is null signifying that line and area fills work exactly the same as before If the ChartGradient reference is not null the color definitions in the ChartGradient take precedence over the fill color of the ChartAttribute Any area fill object can have a gradient of two or more colors mapped to it The colors are mapped to the area fill object using an array of breakpoints one for each color that define the transition points for one color to the next The values of the breakpoints are interpreted according to one of four different mapping modes GRADIENT_MAPTO_OBJECT 173 Colors Gradients and Backgrounds In this mapping mode the breakpoints are expected to be in the range of 0 0 to 1 0 The break points are applied as percentages to the area fill object The value 0 0 corresponds to the start of the area fill object and the value 1 0 corresponds to the end of the area fill object It does not matter how large or small the area fill object is all of the gradient colors will map to that object This mapping mode would normally used with just two colors though it will work with an unlimited number of col
81. ContourPlot This constructor creates a new ContourDataset object that represents a surface formed by a regular grid in the xy plane The number of objects in the Point3D array must equal rows columns and must form an even grid in the xy plane ContourDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal grid As Point3D _ ByVal rows As Integer _ ByVal columns As Integer Ct public ContourDataset string sname Point3D grid int rows int columns This constructor creates a new ContourDataset object that represents a surface not necessarily a regular grid A triangularization alorithm calculates the interconnection of the vertices defining the surface Visual Basic Overloads Public Sub New ByVal sname As String _ ByVal grid As Point3D _ C public ContourDataset string sname Chart Datasets 86 Point3D grid 1 This constructor creates a new ContourDataset object that represents a surface not necessarily a regular grid A triangularization algorithm calculates the interconnection of the vertices defining the surface The length of the x y and z arrays must match Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As Double ByVal y As Double _ ByVal z As Double Ct public ContourDataset string sname double xy double K double Z This constructor creates a new ContourDataset object defined usi
82. Dim L tVu AddChar char New Simpl tObject e thePl OCS Lab2 As New NumericAxisLabel Lab2 NumericAxis Lab3 NumericAxis Lab4 NumericAxis t As New ChartFont SansSerif tle xAxis title New ChartGrid xAxis LinePl LinePl As New NumericAxisLabels xAxis As New NumericAxisLabels yAxisl t ChartObj BUSINESSFORMAT Labl S yAxis2 Label S yAxis3 Labels yAxis4 Labels yAxis5 tVu AddChartObject yAxisLab5 10 FontStyles Normal axisTitleFont yAxisl ChartObj X AXIS t pTransforml Dataset Eris t pTransform2 Datase trib2 t pTransform3 Dataset trib3 t pTransform4 Dataset4 trib4 ot pTransform5 Dataset5 trib5 FontWeights Bold Event Partition ChartObj GRID MAJOR 3 Can I add new axes text objects plot objects and images to a chart after it is already displayed or must I create a new chart from scratch taking into account the additional objects There are two ways to add new objects to a chart The first way is to create all objects when the chart is initially created but disable the ones that you do not want to show up when the chart is initially rendered Enable the objects when you want them to show up Use the chart FAQs 450 objects SetChartObj Enable method to enable disable the object This is useful if you are creating an animated chart where you want the chart to sequence through a prede
83. File S Class Diagram dd Component Class FA Custom Control u DataSet 3 Dynamic Data Field el HTML Page d Installer Class JScript File J Local Database IMG Parent Form The resulting SimpleScatterPlot cs file will contain using System using System Collections Generic using System Ling using System Text namespace WpfApplicationl H class SimpleScatterPl or Modify the SimpleScatterPlot file to create the desired chart Most all of our examples are structured the same way The constructor is changed to pass in a ChartView object Then a chart initialization routine is called which adds chart objects to the ChartView This defines the chart See the SimpleScatterPlot cs file of the WPFChartApplicationl example using using using using using using using using using using using using using using Sys Sys Sys Sys Sys Sys Sys Sys Sys Sys Sys Sys Sys tem tem tem tem tem tem tem tem tem tem tem tem tem Using QCChart2D for WPF to Create Windows Applications 414 Collections Generic Ling Text Windows Windows Controls Windows Data Windows Documents Windows Input Windows Media Windows Media Imaging Windows Navigation Windows Shapes com quinncurtis chart2dwpf namespace WpfApplicationl lt summary gt Summary description for SimpleScatter lt summary gt public class Simp
84. Grid Row 1 Margin 18 11 16 6 Name datasetViewer1 gt lt Grid gt lt TabItem gt Week 9 24 08 10 01 06 10 08 06 10 15 06 102206 1029 06 11 05 06 11 12 06 11 19 06 102606 C Rectangle2D posrect new Rectangle2D 0 05 0 5 0 9 0 9 int rows 4 columns 10 startindex initialstartindex datasetviewer InitDatasetViewer chartVu pTransforml null Datasetl rows columns startindex datasetviewer AddDataset Dataset2 datasetviewer AddDataset Dataset3 datasetviewer EnableEdit true datasetviewer DatasetTable TableBackgroundMode ChartGeneralizedTableDisplay TABLE SINGLE COLOR BACKGROUND GRIDCELL datasetviewer UseStripedGridBackground true datasetviewer RowHeaderFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal datasetviewer ColumnHeaderFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal datasetviewer GridCellFont new ChartFont Microsoft Sans Serif 9 FontStyles Normal datasetviewer SyncChart true Visual Basic Dim posrect As New Rectangle2D 0 05 0 5 0 9 0 9 Dim rows As Integer 4 columns As Integer 10 startindex As Integer initialstartindex datasetviewer InitDatasetViewer chartVu pTransforml Nothing Datasetl rows columns startindex datasetviewer AddDataset Dataset2 datasetviewer AddDataset Dataset3 datasetviewer EnableEdit True Text Classes 386 datasetviewer DatasetTable TableBackgroundMode ChartGe
85. LABEL ORIGIN The value of these constants can be OR d together The value of LABEL MIN LABEL MAX LABEL ORIGIN is LABEL ALL labcolor The color of the label text format Sets the numeric format for the axis labels Use one of the numeric format constants DECIMALFORMAT SCIENTIFICFORMAT EXPONENTFORMAT BUSINESSFORMAT ENGINEERINGFORMAT PERCENTFORMAT CURRENCEYFORMAT CURRENCYBUSINESSFORMAT Simple numeric axis labels example C Define the coordinate system double xMin 5 double xMax 15 double yMin 0 double yMax 105 CartesianCoordinates simpleScale new CartesianCoordinates xMin yMin xMax yMax Create the x and y axes LinearAxis xAxis new LinearAxis simpleScale ChartObj X AXIS LinearAxis yAxis new LinearAxis simpleScale ChartObj Y AXIS NumericAxisLabels xAxisLabels new NumericAxisLabels xAxis NumericAxisLabels yAxisLabels new NumericAxisLabels yAxis Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis chartVu AddChartObject xAxisLabels chartVu AddChartObject yAxisLabels Visual Basic Define the coordinate system Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax As Double 105 Axis Labels Dim simpleScale As CartesianCoordinates _ New CartesianCoordinates xMin yMin xMa
86. The y values of the dataset specify the explode percentage for each pie ring wedge An array of strings size dataset GetNumberDatapoints used as labels for the pie ring slices An array of ChartAttribute objects size dataset GetNumberDatapoints that specify the attributes outline color and fill color for each wedge of a pie ring chart An array of integer size dataset GetNumberDatapoints specifying if a specific pie ring slice text label is drawn inside the pie ring slice or outside of the pie ring slice Use one of the constants PIELABEL OUTSLICE or PIELABEL INSLICE All pie ring slice labels share the same format Use one of the pie ring slice label format constants PIELABEL NONE Do not display and pie ring slice text PIELABEL STRING Display only the pie ring text strings no numeric values 345 Pie Charts PIELABEL NUMVALUE Display the pie ring numeric value only no pie text strings PIELABEL STRINGNUMVAL Display the pie ring text string and numeric value A pie ring chart uses a default CartesianCoordinates object Center it in the window using the CartesianCoordinates SetGraphBorderDiagonal method Format the text used to label the pie ring chart both the strings and the numeric values using a NumericLabel template set using the PieChart SetPlotLabelTemplate method Change the starting position of the first pie ring wedge from the default value of 0 0 3 00 position using the PieChart SetStartPieSlice
87. VERT DIR datasetviewer EnableEdit True datasetviewer DatasetTable TableBackgroundMode ChartGeneralizedTableDisplay TABLE SINGLE COLOR BACKGROUND GRIDCELL datasetviewer UseStripedGridBackground True 22 Adding Lines Shapes Images and Arrows to a Chart ChartShape Arrow ChartImage It is not possible to take into account every possible graphical object that a programmer wants to add to a graph Specialized applications require specialized objects Rather than create a large group of classes that duplicate the functions of the Arc2D Rectangle2D and other classes a generalized class has been created ChartShape that can place and display in a chart any object that can be expressed as a System Windows Media PathGeometry The Arrow defines an arrow shape useable with the ChartShape class The Arrow class creates the arrows in the ArrowPlot class and it can also place individual arrows in a chart The class creates a base arrow with a custom arrowhead and shaft size Scale rotate and position the arrow in a chart The ChartImage class places a System Media Imaging BitmapImage object anywhere in a chart It can be a small element of the chart inside or outside of the plot area or it can be sized to fill the plot area or graph area and used as a background object Generic Shape Class Class ChartShape GraphObj ChartShape The ChartShape class places arbitrary PathGeometry objects in a chart If the shape includes absolut
88. WARRANTIES OR MERCHANTABILITY FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT THE ENTIRE RISK ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE REMAINS WITH YOU 9 LIMITATION OF LIABILITY IN NO EVENT SHALL QUINN CURTIS INC OR ITS SUPPLIERS BE LIABLE TO YOU FOR ANY CONSEQUENTIAL SPECIAL INCIDENTAL OR INDIRECT DAMAGES OF ANY KIND ARISING OUT OF THE DELIVERY PERFORMANCE OR USE OF THE SUCH DAMAGES IN ANY EVENT QUINN CURTIS S LIABILITY FOR ANY CLAIM WHETHER IN CONTRACT TORT OR ANY OTHER THEORY OF LIABILITY WILL NOT EXCEED THE GREATER OF U S 1 00 OR LICENSE FEE PAID BY YOU 10 U S GOVERNMENT RESTRICTED RIGHTS The SOFTWARE is provided with RESTRICTED RIGHTS Use duplication or disclosure by the Government is subject to restrictions as set forth in subparagraph c 1 11 of The Rights in Technical Data and Computer SOFTWARE clause of DFARS 252 227 7013 or subparagraphs c 1 and 2 of the Commercial Computer SOFTWARE Restricted Rights at 48 CFR 52 227 19 as applicable Manufacturer is Quinn Curtis Inc 18 Hearthstone Dr Medfield MA 02052 USA 11 MISCELLANEOUS If you acquired the SOFTWARE in the United States this EULA is governed by the laws of the state of Massachusetts If you acquired the SOFTWARE outside of the United States then local laws may apply Should you have any questions concerning this EULA or if you desire to contact Quinn Curtis Inc for any reason please contact Quinn Curtis Inc by mail at
89. You can add multiple datasets to a Dataset Viewer using the DatasetViewer AddDataset method When adding additional datasets it only adds the y values of the dataset It is assumed the x values of the datasets are the same otherwise the columns would lose synchronization The row header string for the first grid row the x values is picked up from the first dataset s XString property If that is null X Values is displayed for numeric x values and Time for time based x values Subsequent row header strings for the y values are picked up from the main title string of each associated dataset In the case of group datasets with multiple y values for each x value row header strings are picked up from the datasets GroupStrings property which stores one string for each group in the dataset You can change the default orientation of the Dataset Viewer by calling a version of the DatasetViewer constructor that has an orientation property as the last parameter See the NewDemosRev2 VerticalDatasetViewerChart for an example Simple DatasetViewer example extracted from the example program NewDemosRev2 SimpleDatasetViewer TablItem Header SimpleDatasetViewerChart Name tabItem5 gt Grid 385 Text Classes lt Grid RowDefinitions gt lt RowDefinition Height 5 gt lt RowDefinition Height 2 gt lt Grid RowDefinitions gt lt my ChartView Grid Row 0 Margin 18 11 16 6 Name chartView5 gt my DatasetViewer
90. an inverted physical coordinate system using one of the PhysicalCoordinates derived classes The axis minimum and maximum do not have to fall on decade intervals 1 e 0 1 to 10 000 and can assume any positive range 1 e 0 23 to 13 100 is valid Logarithmic Minor and Major Tick Mark Intervals The major tick marks for a logarithmic axis use an exponential interval The exponential interval in physical coordinates transforms to a linear interval in the working coordinate system Below are examples of the major tick mark locations for a logarithmic axis Axis Minimum and Maximum Axis Major Tick Mark Locations 0 1 to 100 0 0 1 1 0 10 0 100 0 20 to 50 000 20 200 2000 20000 10 to 1 0 10 10 107 10 1 0 Axes 188 The minor tick marks for a logarithmic axis use a linear interval between the tick marks For example a major tick mark interval has endpoints of 10 to 100 a logarithmic interval The minor ticks in between the 10 and the 100 use a linear interval of 10 and fall at 20 30 40 50 60 70 80 and 90 For the next major tick mark interval 100 to 1000 the minor tick mark interval becomes 100 and minor tick marks fall at 200 300 400 500 600 700 800 and 900 The minor tick mark intervals are set equal to the value of the preceding major tick mark interval If the major tick mark interval uses a non decade range for example 3 30 300 30000 the minor tick marks will track the major tick marks The major tick mark interv
91. as Net maintains a one to one coordespondence in the printing engine The aspect ratio of the view is maintained PRT RECT Print the view to the specified rectangle specified using the SetPrintRect method and normalized coordinates Regardless of the print rectangle the aspect ratio of the chart is maintained Call the ChartPrint DoPrintDialog method after creating the ChartPrint object In the print dialog you have the option of printing the graph Or if the printer dialog has already been called once and you just want to print without a dialog call Then call the ChartPrint DoPrintPage method rendering the chart to the printer If the DoPrintDialog method is not called prior to DoPrintPage the print dialog is initialized with the default printer settings as acquired using printerDialog PrintQueue LocalPrintServer GetDefaultPrintQueue Using All of the Paper When Printing The PRT MAX mode prints the chart as large as possible while maintaining the same aspect ratio as the original ChartView If the width is the limiting factor the bottom of the printed page will always be blank The same is true of the PRT RECT mode While the PRT RECT mode can control the size and position of the chart on the printed page it cannot change the aspect ratio of the chart The only way to fill the printed page in portrait or landscape mode is establish the screen 399 File and Printer Rendering ChartView size with the same aspect ratio as the 8
92. attrib4 new ChartAttribute Colors Green 1 DashStyles Solid Colors Green ChartAttribute attribArray attribl attrib2 attrib3 attrib4 GroupBarPlot thePlotl new GroupBarPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj YEAR 0 75 0 0 attribArray ChartObj JUSTIFY CENTER hePlotl SetBarOverlap 0 0 chartVu AddChartObject thePlot1 ct Visual Basic Dim Datasetl As New TimeGroupDataset GroupTimeData xValues groupBarData Group Bargraph Dim pTransforml As New TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR pTransforml SetTimeScaleStart New ChartCalendar 1997 ChartObj JANUARY 1 pTransforml SetTimeScaleStop New ChartCalendar 2003 ChartObj JANUARY 1 Simple Plot Objects 290 pTransforml SetGraphBorderDiagonal 0 1 0 1 0 45 0 75 Dim backgroundl As New Background pTransforml ChartObj GRAPH BACKGROUND _ Color FromRgb 0 120 70 Color FromRgb 0 40 30 ChartObj Y AXIS chartVu AddChartObject backgroundl pTransforml SetScaleStartY 0 Dim xAxisl As New TimeAxis pTransforml xAxisl SetColor Colors White chartVu AddChartObject xAxis1 Dim yAxisl As New LinearAxis pTransforml ChartObj Y AXIS yAxisl SetColor Colors White chartVu AddChartObject yAxis1 Dim xAxisLabl As New TimeAxisLabels xAxis1 xAxisLabl SetAxisLabelsFormat ChartObj TIMEDATEFORMAT Y2000 xAxisLabl SetColor Colors Whi
93. baseaxis This is the event axis the axis labels are for Other axis label properties font rotation numeric format axis labels direction and numeric precision are automatically set These properties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Overloads Public Sub SetAxisLabels ByVal font As Font _ ByVal rotation As Double _ ByVal labdir As Integer _ ByVal decimalpos As Integer _ ByVal labelends As Integer _ ByVal labcolor As Color Ct public void SetAxisLabels Font font double rotation int lIabdir int decimalpos int labelends Color labcolor SetAxisLabelsFormat method Visual Basic Public Sub SetAxisLabelsFormat _ ByVal format As Integer _ Ct public void SetAxisLabelsFormat int format font The font object used to display the axis label text rotation The rotation in degrees of label text in the normal viewing plane labdir The justification of the axis label AXIS MIN or AXIS MAX with respect to the tick mark endpoint decimal Sets the number of digits to the right of the decimal point for numeric axis labels labelends Ignored for time axis labels labcolor The color of the label text format Sets the numeric format for the axis labels Use one of the time format constants Axis Labels 238 TIMEDATEFORMAT MSDDD TIMEDATEFORMAT MSDD TIMEDATEFORMAT MSD TIMEDATEFORMAT MS TIMEDATEFORMAT
94. bitmap images geometric shapes titles data markers cursors and grids A chart can contain zero or more of these objects It may contain 100 of one type 5 of another type and 1 of a third QCChart2D for WPF contains no limits restricting the number of instances of a given chart object in a graph and no limit on the total number of chart objects in a graph Fifth an end user needs to interact with the graph using the mouse and or keyboard The QCChart2D for WPF architecture includes classes that implement the WPF routed event model A user can use the mouse to select data points text annotations axes image objects and other shapes and position them in the graph Create data markers and move them around the chart under mouse or program control Automatically rescale one or more chart axes using mouse controlled zooming QCChart2D for WPF Class Summary The following categories of classes realize these design considerations Chart view class The chart view class is a System Windows Controls UserControl subclass that manages the graph objects placed in the graph Data classes Scale transform classes Class Architecture 30 There are data classes for simple xy and group data types There are also data classes that handle System DateTime date time data and contour data The scale transform classes handle the conversion of physical coordinate values to working coordinate values for a single dimension Coordinate transform c
95. box and whisker plots Select which one you want using the BWFormat property Use one of the BW format constants BW MINMAX WHISKER BW IRQIS5 WHISKER OUTLIERS BW IQRIS WHISKER ALLPOINTS BW MINMAX WHISKER Plot minimum maximum values as whiskers and the median q25 and q75 values as the box BW IQRI5 WHISKER OUTLIERS Plot the minimum value within q25 1 5 IQR and maximum value within q75 1 5 IQR as whiskers the median q25 and q75 values as the box and outliers as scatter plot symbols BW_IQRI5 WHISKER ALLPOINTS Plot the minimum value within q25 1 5 IQR and maximum value within q75 1 5 IQR as the whiskers the median q25 and q75 values as the box and plot all points as scatter plot symbols Where q25 for a given population q25 is the 25th percentile point in the population Simple Plot Objects 272 q75 for a given population q75 is the 75th percentile point in the population IOR for a given population IQR is the value q75 q25 Outlier 130 0 Whisker q75 75th percentile Median q25 25th percentile Whisker Turn on the numeric labeling of the Box and Whisker summary values high whisker q75 median q25 low whisker by setting the BoxWhiskerPlot ShowDatapointValue property true Turn on the numeric labeling of the scatter plot symbols used for outliers by setting the the BoxWhiskerPlot ScatterPlot ShowDatapointValue property true You should not combine numeric labeling with the W_IQR15 WHIS
96. cell Each cell can be filled using a color or an image CellPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal attrib As ChartAttribute 279 Simple Plot Objects Ct public CellPlot PhysicalCoordinates transform GroupDataset dataset ChartAttribute attrib transform The coordinate system for the new CellPlot object dataset The cell plot represents the values in this group dataset The number of groups must be three The X Y 0 values of the group dataset represent the xy position of the lower left corner of each cell the Y 1 values set the width of the cell and the Y 2 values set the height of the cell attrib Specifies the attributes line color and line style for the cell plot Cells can be filled with an image instead of a solid color Use the CellPlot SetPlotImage method to place a System Windows Media Imaging BitmapImage Image object in the cells of a cell plot One image applies to all of the cells in the cell plot An individual cell in the cell plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Cell plot example extracted from the example program ScatterPlots class CellPlotChart C GroupDataset Datasetl new GroupDataset First xl yl Datasetl SetAutoScaleNumberGroups 1 picks up
97. constants AXIS MIN and AXIS MAX are used for this purpose The AXIS MIN constant places the text label on the side of the tick mark that is in the direction of the perpendicular axis coordinate system minimum The AXIS MAX is much the same except that it places the label on the side that is in the direction of the perpendicular axis coordinate system maximum Axis labels should not actually touch the tick marks so x and y offsets are factored in The programmer can modify these offsets Numeric Axis Labels Class NumericAxisLabels GraphObj ChartText AxisLabels NumericAxisLabels The NumericAxisLabels class extends the AxisLabels class adding extensive numeric formatting capability It labels axes created using the LinearAxis and LogAxis classes 219 Axis Labels Label formats An axis label can take many forms Variations on these forms include Full decimal conversion 0 000015 Scientific notation 1 5e 5 Exponent notation 1 5x10 Percent format 76 Business format where B M and K are used to represent billions millions and thousands 1043M 11 0K Currency format 123432 Business currency format The business format combined with the currency format 123K Depending on the scaling of the associated axis the numeric values of the axis labels may be very large or very small numbers requiring a great deal of space to display Various techniques are used to abbreviate the numeric value redu
98. environment for resale to other developers If you utilize the SOFTWARE in an application program or in a web site deployment should we ask you must supply Quinn Curtis Inc with the name of the application program and or the URL where the SOFTWARE is installed and being used 3 RESTRICTIONS You may not reverse engineer de compile or disassemble the SOFTWARE except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this ii limitation You may not rent lease or lend the SOFTWARE You may not use the SOFTWARE to perform any illegal purpose 4 SUPPORT SERVICES Quinn Curtis Inc may provide you with support services related to the SOFTWARE Use of Support Services is governed by the Quinn Curtis Inc polices and programs described in the user manual in online documentation and or other Quinn Curtis Inc provided materials as they may be modified from time to time Any supplemental SOFTWARE code provided to you as part of the Support Services shall be considered part of the SOFTWARE and subject to the terms and conditions of this EULA With respect to technical information you provide to Quinn Curtis Inc as part of the Support Services Quinn Curtis Inc may use such information for its business purposes including for product support and development Quinn Curtis Inc will not utilize such technical information in a form that personally identifies you 5 TERMINATION Without
99. file as in WpfBrowserApplicationl Pagel In Visual Basic the default Pagel xaml file does not include the namespace reference as in the example below If you stick with the default VB class definition no namespace you must be consistent across all of your source files and not specify a project namespace Most all of our other examples use namespaces throughout the project largely because they were translated directly from the C examples and all of the C examples use namespaces 9 The XAML of Pagel looks like lt Page x Class Pagel xmlins http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Gnd lt Grid gt lt Page gt 437 Using QCChart2D for WPF to Create Web Applications The window does not yet have any content First define a default size for the window and add a reference to the QCChart2D namespace In this case the namespace is com quinncurtis chart2dwpf and it is located in the assembly DLL with the name QCChart2DWPF3 So add the following line under the other xmlns namespace tags Title Pagel Height 600 Width 900 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 This line needs to be resolved by adding a reference to the QCChart2DWPF3 library to the project Right click on Reference in the Solution Explorer window and select Add Reference Browse to the Quinn Curtis DotNet lib subdirectory and selec
100. font picker example we found on the inernet 6 How do you handle missing data points in a chart There are two ways to handle missing or bad data The first is to mark the data point in the dataset invalid using the datasets SetValidData method The second is to set the x and or y value of the bad data point to the designated bad data value ChartObj rBadDataValue 453 FAQs Currently this value is set equal to the value of System Double MaxValue Either method will prevent the data point from being displayed in a chart If the bad data value is part of a line plot a gap will appear in the line plot at that point Bad data points are not deleted from a dataset 7 How do you update a chart in real time In general real time updates involve adding new objects to a chart or modifying existing objects that are already in the chart Once the object is added or changed call the ChartView UpdateDraw method to force the chart to update using the new values Objects can be added or modified based on some external event or in response to a timer event created using System Windows Threading DispatcherTimer Make all changes for a given event and call the ChartView UpdateDraw method once The position of most GraphObj derived objects is set or modified using one of the objects SetLocation methods New data points can be added to an existing dataset using one of the datasets AddDataPoint AddTimeDataPoint AddGroupDataPoints or AddTimeGroupData
101. for the new CandlestickPlot object dataset The CandlestickPlot plot represents the group open high low close values in this group dataset The number of groups must be four Orgainize the data in the following manner The x values of the group dataset set the x positions of the candlestick objects The Y 0 values of the group dataset represent the values for Open the Y 1 values for High the Y 2 values for Low and the Y 3 values for Close rwidth The width of the candlestick box in physical coordinates defaultattrib Specifies the default attributes line color and fill color of the candlestick lines and box fillattrib Specifies the attributes line color and fill color of the candlestick lines when the close value is greater than the open value An individual candlestick in a candlestick plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Candlestick plot example extracted from the example program FinancialExamples class CandlestickChart C TimeGroupDataset Datasetl new TimeGroupDataset Stock Data xValues stockPriceData Define axes axes labels and grids ChartAttribute defaultattrib new ChartAttribute Colors Black 1 DashStyles Solid Colors White defaultattrib SetFillFlag true ChartAttribute fillattrib new ChartAttribute Colors Black 1 DashStyles Solid Colors Red fillattrib S
102. groupBarData 0 2 54 groupBarData 1 2 48 xValues 3 new ChartCalendar 2001 ChartObj JANUARY 3 groupBarData 0 3 56 groupBarData 1 3 44 xValues 4 new ChartCalendar 2002 ChartObj JANUARY E groupBarData 0 4 58 groupBarData 1 4 40 TimeGroupDataset Datasetl new TimeGroupDataset GroupTimeData xValues groupBarData TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 1 95 0 8 Background background new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 0 120 70 Color FromRgb 0 40 30 ChartObj Y AXIS chartVu AddChartObject background Define axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Black 1 DashStyles Solid Colors Red attribl SetFillFlag true attribl SetLineFlag false 295 Simple Plot Objects LineGapPlot thePlotl new LineGapPlot pTransforml Datasetl attribl chartVu AddChartObject thePlotl Visual Basic Dim nNumPnts As Integer 5 Dim nNumGroups As Integer 2 Dim xValues nNumPnts 1 As ChartCalendar Dim groupBarData nNumGroups 1 nNumPnts 1 As Double theFont New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold xValues 0 New ChartCalendar 1998 ChartObj JANUARY groupBarData 0 0 43 groupBarData 1
103. hold left mouse button over a stock value to get details for that date It may be that you want to specify date times for the starting and ending values of the x axis instead of a simple index In that case you use the EventCoordinates TimeScaleStart and EventCoordinates TimeScaleStop properties Those methods use a binary search algorithm to search for the ChartEvent closest to the desired date time It then uses the ChartEvent at that index to establish the x axis scale The code below is extracted from the ChartEventExamples OHLCEventChart example program C public void UpdateScaleAndAxesUsingDates int startindex ChartCalendar startdate ChartCalendar datastartdate Clone ChartCalendar stopdate new ChartCalendar Startdate Add ChartCalendar DAY OF YEAR startindex stopdate ChartCalendar startdate Clone stopdate Add ChartObj MONTH 1 pTransforml TimeScaleStart startdate pTransforml TimeScaleStop stopdate pTransform2 TimeScaleStart startdate pTransform2 TimeScaleStop stopdate pTransform3 TimeScaleStart startdate pTransform3 TimeScaleStop stopdate xAxisl CalcAutoAxis yAxisl CalcAutoAxis xAxisLabl CalcAutoAxisLabels yAxisLabl CalcAutoAxisLabels xAxis2 CalcAutoAxis xAxis2 SetAxisIntercept pTransform2 GetStopY xAxis2 SetAxisTickDir ChartObj AXIS MAX Scaling and Coordinate Systems 156 yAxis2 CalcAutoAxis yAxisLab2 CalcAutoAxisLabels yAxis
104. i TotalSeconds 0 5 ChartSupport GetRandomDouble ElapsedTimeSimpleDataset Datasetl new ElapsedTimeSimpleDataset First xl yl ElapsedTimeSimpleDataset Dataset2 new ElapsedTimeSimpleDataset Second xl y2 Visual Basic Dim numPoints As Integer 100 Dim xl As TimeSpan New TimeSpan numPoints 1 Dim yl As Double New Double numPoints 1 Dim y2 As Double New Double numPoints 1 Dim i As Integer For i 0 To numPoints 1 xl i TimeSpan FromMilliseconds i 30 1000 30000 milliseconds increment Or you can use seconds and the FromSeconds method xl i TimeSpan FromSeconds i 30 30 seconds increment If Math Sin xl i TotalSeconds 20 0R gt 0 Then yl i 20 0R 50 0R 0 5 ChartSupport GetRandomDouble Math Sin xl i TotalSeconds 5 Else yl i 20 0R 5 0R 0 5 ChartSupport GetRandomDouble Math Sin xl i TotalSeconds 2 End If yati yigi i5 0 2 xlii TotelSeconds 0 5 ChartSupport GetRandomDouble Next 65 Chart Datasets Dim Datasetl As New ElapsedTimeSimpleDataset First xl yl Dim Dataset2 As New ElapsedTimeSimpleDataset Second x1 y2 Contour Plot Dataset Class ContourDataset ChartObj ChartDataset SimpleDataset ContourDataset The ContourDataset adds a third dimension z values to the x and y values of the simple dataset It is use exclusively with the contour plotting class
105. in a graph A major weakness in many commercial graphics packages is that they have hard coded limits that restrict the number of data points axes or coordinate systems A simple business bar chart may only contain 3 or 4 data points depicting a sales forecast An audio mixer application may require 32 million plotted points represented by 32 traces of 1 million points each each trace representing 20 seconds of audio sampled at 50 kHz The most effective way to compare data is to overlay it in the same graph Often the data series have different dynamic ranges If the data series are plotting using the same scale it is difficult do see the correlation or lack of in the data A better solution is to create a unique scale for each data series with associated axes and plot each data series with respect to its own scale All of the plots will overlay the same area of the graph Many advanced charting packages do not support more than one coordinate system per graph while most others have some fixed limit such as 2 4 or 8 scales per graph The number of coordinate systems for a graph can be as large as the number of data series plotted in the graph Charts can have hundreds of data series at once therefore a flexible charting package needs to allow for an equal number of simultaneous coordinate systems Fourth a well constructed chart often displays more than just data Other common chart objects include legends arbitrary text annotations
106. is not appropriate to look at the range maximum value minimum value and divide by some integer For example an axis with endpoints 5 to 30 should have a major tick mark interval of 5 or 10 and a minor tick mark interval 1 0 Dividing the axis range 30 5 35 0 by 10 will result in a tick interval of 3 5 which is inappropriate for either major or minor tick intervals The programmer can calculate the proper tick mark intervals using custom algorithms or use the automatic methods that are used by default in the axis constructors Linear Axis Intercept An axis resides in a 2 dimensional physical coordinate system The minimum and maximum values for the axis provide coordinate information for only one dimension x coordinates in the case of an x axis and y coordinates in the case of the y axis The missing coordinate needed to position the axis is the axis intercept The axis intercept specifies the y coordinate position for the x axis and the x coordinate position for the y axis Linear Axis Tick Mark Origin The axis major and minor tick mark intervals specify the space between adjacent tick marks A minor tick mark interval of 1 0 and a major tick mark interval of 5 0 may result in major tick marks at 0 0 5 0 10 0 15 0 20 0 etc It can also result in major tick marks at 0 88769 4 11231 9 11231 14 11231 19 11231 etc Obviously the first example is the desired tick mark placement The difference between the two exa
107. line representing High and Low values with two small horizontal flags one left and one right extending from the vertical High Low line and representing the Open and Close values 53 Class Architecture Cumulative Plot of Noise vs Time from 7 Sources 10 15 20 Time The Stacked Line Plot will plot the cumulative sum of multiple y vectors vs a single x vector StackedLinePlot This class is a concrete implementation of the GroupPlot class and displays data in a stacked line format In a stacked line plot each group is stacked on top of one another each group line a cumulative sum of the related group items before it Polar Plot Classes PolarPlot PolarLinePlot PolarScatterPlot Polar plots that use data organized as arrays of x and y values where an x value represents the magnitude of a point in polar coordinates and the y value represents the angle in radians of a point in polar coordinates Polar plot types include line plots and scatter plots PolarPlot This class is an abstract base class for the polar plot classes Class Architecture 54 Polar Line and Scatter Plots The polar line charts use true polar not linear interpolation between data points PolarLinePlot This class is a concrete implementation of the PolarPlot class and displays data in a simple line plot format The lines drawn between adjacent data points use polar coordinate interpolation PolarScatterPlot This class is a concrete implemen
108. main categories simple group polar antenna contour and pie plots Simple plots graph data organized as a simple set of xy data points The most common examples of simple plots are line plots bar graphs scatter plots and line marker plots Group plots graph data organized as multiple y values for each x value The most common examples of group plots are stacked bar graphs open high low close plots candlestick plots floating stacked bar plots and box and whisker plots Polar charts plot data organized as a simple set of data points where each data point represents a polar magnitude and angle pair rather than xy Cartesian coordinate values The most common example of polar charts is the display of complex numbers a bi and it is used in many engineering disciplines Antenna charts plot data organized as a simple set of data points where each data point represents a radius value and angle pair rather than xy Cartesian 45 Class Architecture coordinate values The most common example of antenna charts is the display of antenna performance and specification graphs The contour plot type displays the iso lines or contours of a 3D surface using either lines or regions of solid color The last plot object category is the pie chart were a pie wedge represents each data value The size of the pie wedge is proportional to the fraction data value sum of all data values ChartPlot This class is the abstract base class for chart plot objec
109. name of the base class that is used to filter the desired class objects The string ChartPlot would cause the routine to return only objects derived from the ChartPlot class Specifies to return the n object that intersects the test point A value of 0 signifies that the first object found is returned a value of 1 specifies that the second item found is returned and so on The function returns a reference to the found object or null if unsuccessful 6 Colors Gradients and Backgrounds Class ChartAttribute ChartObj ChartAttribute All graphical object derived from our abstract GraphObj class include an instance of the ChartAttribute class This class encapsulates common graphical line and fill style characteristics into a single class If a graphical object is line based it can have a line color line style and a line thickness Line based graphical objects include line based plots SimpleLinePlot MultiLinePlot OHLCPlot all types of axes and all types of text If an object is area based it can have a solid fill color or a fill gradient or any other type of Brush derived object you can define The fill color fills the interior of the area object Most area fill objects also use line attributes to define the color and line thickness of the outline of the area object A bar can have an outline color different from the interior fill color All of the bar graph plot types scatter plot types and pie charts are example of gra
110. object using a single dataset C double xData 1 2 3 4 5 95 7 8 9 10 double yData 10 22 33 44 55 46 33 25 14 9 SimpleDataset dataset new SimpleDataset Sales xData yData CartesianCoordinates simpleScale new CartesianCoordinates simpleScale AutoScale dataset Visual Basic Dim xData As Double Dim yData As Double 1 2 3 4 5 6 7 8 9 10 110 22 33 44 55 46 33 25 14 9 Dim dataset As SimpleDataset New SimpleDataset Sales xData yData Dim simpleScale As CartesianCoordinates New CartesianCoordinates simpleScale AutoScale dataset You can control the tightness of the auto scale values about the dataset values using other versions of the CartesianCoordinates AutoScale method that take rounding mode parameters Example of auto scaling a CartesianCoordinates object using a single dataset and explicit rounding mode parameters simpleScale AutoScale dataset ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR You can auto scale the bounds of the coordinate system using a dataset and then explicitly modify the range the auto scale selected There are methods that set the minimum and maximum values of the x and y scales This way you can use the auto scale methods for the values of one scale the y scale in the example below but explicitly set the values for the other scale the x scale in the example below Example of modifying the minimum and maximum values selected by a
111. on width but because data is should still work CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Add in max width of cells double maxx pTransforml GetScaleStopX 20 Add in max height of cells double maxy pTransforml GetScaleStopY 10 pTransforml SetScaleStopX maxx pTransforml SetScaleStopY maxy Re auto scale to produce rounded axis values pTransforml AutoScale ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR prransforml SetGr phBorderDiagonal 0 15 15 90 0 75 F Define axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Blue 1l DashStyles Solid attribl SetFillColor Colors Blus attribl SetFillFlag true CellPlot thePlotl new CellPlot pTransforml Datasetl attribl for i20 i lt numPoints i thePlotl SetSegmentColor i Color FromRgb int xl i Simple Plot Objects 280 tint yl Ope S220 Hane Phyl ta wIQ2 1 Zi chartVu AddChartObject thePlotl Visual Basic Dim Datasetl As New GroupDataset First x1 yl Datasetl SetAutoScaleNumberGroups 1 picks up on width but because data is X random should still work Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE _ ChartObJ LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Add in m
112. physical coordinate system defined for the plot area is extended in all four directions left right top and bottom It is extended so that the physical coordinates of the four corners of the plot area remain unchanged The four corners of the graph area are assigned calculated physical coordinate values so that when it is overlaid on to the plot area there is an exact 1 1 correspondence for all points inside the plot area Once this calculation is made there is no need to use the physical coordinate system assigned to the plot area Instead the physical coordinate system of the graph area is used instead Chart axes objects and plotted data always align because they are plotted using the exact same physical coordinate system The only difference is that plotted data is clipped to the plot area while axes objects are not clipped For example assume a graph area with the dimensions of 400x400 units and a plot area with the dimensions 200x200 centered inside the graph area This implies that there is a 100 unit boundary around all four sides of the plot area The desired chart uses a physical coordinate system of 0 0 100 100 These coordinates apply to the plot area Instead of using the plot area coordinate system the coordinate system 50 50 150 150 15 calculated and used to scale the graph area This does not guarantee that any point plotted in plot area coordinate system will always map to the exact same pixel as the same point plotted in t
113. plots The legend item objects display in a row or column format Each legend item contains a symbol and a descriptive string The symbol normally associates the legend item to a particular plot object and the descriptive string describes what the plot object represents This class is a concrete implementation of the Legend class and it is a legend class used exclusively with bubble plots The legend item objects display as offset concentric circles with descriptive text giving the key for the value associated with a bubble of this size Grid lines are perpendicular to an axis extending the major and or minor tick marks of the axis across the width or height of the plot area of the chart ChartGrid PolarGrid This class defines the grid lines associated with an axis Grid lines are perpendicular to an axis extending the major and or minor tick marks of the axis across the width or height of the plot area of the chart This class works in conjunction with the LinearAxis LogAxis and TimeAxis classes This class defines the grid lines associated with a polar axis A polar chart grid consists of two sets of lines The first set is a group of concentric circles centered on the origin and passing through the major and or minor tick marks of the polar magnitude horizontal and vertical axes The second set is a group of radial lines starting at the origin and extending to the outermost edge of the polar plot circle passing through the majo
114. prejudice to any other rights Quinn Curtis Inc may terminate this EULA if you fail to comply with the terms and conditions of this EULA In such event you must destroy all copies of the SOFTWARE 6 COPYRIGHT The SOFTWARE is protected by United States copyright law and international treaty provisions You acknowledge that no title to the intellectual property in the SOFTWARE is transferred to you You further acknowledge that title and full ownership rights to the SOFTWARE will remain the exclusive property of Quinn Curtis Inc and you will not acquire any rights to the SOFTWARE except as expressly set forth in this license You agree that any copies of the SOFTWARE will contain the same proprietary notices which appear on and in the SOFTWARE 7 EXPORT RESTRICTIONS You agree that you will not export or re export the SOFTWARE to any country person entity or end user subject to U S A export restrictions Restricted countries currently include but are not necessarily limited to Cuba Iran Iraq Libya North Korea Sudan and Syria You warrant and represent that neither the U S A Bureau of Export Administration nor any other federal agency has suspended revoked or denied your export privileges 8 NOWARRANTIES Quinn Curtis Inc expressly disclaims any warranty for the SOFTWARE THE SOFTWARE AND ANY RELATED DOCUMENTATION IS PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS OR IMPLIED INCLUDING WITHOUT LIMITATION THE IMPLIED
115. property What you end up with is the clean evenly spaced look of a simple linear chart with the axis tick marks and axis labeling of a dedicated time date axis The graph can be made to scroll or pan left to right or re scale along the y axis smoothly The EventSimpleDataset class is used to supply the simple plot classes SimpleLinePlot SimpleBarPlot SimpleScatterPlot and SimpleLineMarkerPlot with data A ChartEvent can have one ore more y values In the case of an EventSimpleDataset usually it will have a single value as seen in the programming example below one y value for each x value In the EventGroupDataset each ChartEvent object can have multiple y values for each x value EventSimpleDataset constructors Visual Basic Overloads Public Sub New _ 95 Chart Datasets ByVal sname As String _ ByVal ev As ChartEvent Ct public EventSimpleDataset string sname ChartEvent ev E sname Specifies the name of the dataset ev An array of ChartEvent objects Create an array of ChartEvent objects specifying the time stamp and y value for each ChartEvent object and use that to initialize a EventSimpleDataset The next constructor creates an EventSimpleDataset using the x and y values stored in a file that uses the CSV Comma Separated Value format Only the COLUMN MAJOR format is supported where each row presents a ChartEvent object and the columns are organized as description short description x axi
116. seem to think they can make do with just the source code without the Developer Version Purchasing the source without a Developer License does not give a license to use the software so don t do it Chapter Summary The remaining chapters of this book discuss the QCChart2D for WPF interactive charting package designed to run on any hardware that has Net or higher interpreter available for it Chapter 2 presents the overall class architecture of the QCChart2D for WPF and summarizes all of the classes found in the software Chapter 3 describes the dataset classes that hold chart data Chapter 4 describes the various classes that implement the Cartesian time and polar coordinate systems supported by the software Chapter 5 describes the ChartView container class that manages the chart objects Chapter 6 describes the color gradient and background classes Chapters 7 8 and 9 describe the classes that create chart axes axis labels and axis grids Chapter 10 describes the classes used to display simple xy data one y value for each x value as line plots bar plots scatter plots line marker plots and simple versa plots Chapter 11 describes the classes used to display group data one or more y values for each x value as line plots group bar plots stacked bar plots scatter plots open high low close plots candlestick plots box and whisker plots floating stacked bar plots and group versa plots Chapter 12 describes plotting sur
117. that operate on the existing dataset and return a new compressed dataset The CompressTimeFieldSimpleData and CompressTimeFieldGroupDataset are particular useful because they do not use a fixed sample size of N instead they compress data so that adjacent time values are an increment of a specific time field ChartObj DAY OF YEAR ChartObj WEEK OF YEAR ChartObj MONTH ChartObj Year Compressing data by month and year obviously requires a varying sample size 463 FAQs Once created connect the compressed dataset to the ChartPlot object used to display the dataset C nNumPnts 1000000 TimeSimpleDataset RawDataset new TimeSimpleDataset Raw xtimedata ydata nNumPnts int compressXmode ChartObj DATACOMRESS AVERAGE int compressYmode ChartObj DATACOMRESS MINMAX int compressTimeField Calendar MONTH TimeSimpleDataset CompressedDataset RawDataset CompressTimeFileSimpleData compressXmode compressYmode compressTimeField 0 nNumPnts Compressed Visual Basic nNumPnts 1000000 Dim RawDataset As TimeSimpleDataset new TimeSimpleDataset Raw xtimedata ydata nNumPnts Dim compressXmode As Integer ChartObj DATACOMRESS AVERAGE Dim compressYmode As As Integer ChartObj DATACOMRESS MINMAX Dim compressTimeField As Integer Calendar MONTH Dim CompressedDataset As TimeSimpleDataset _ RawDataset CompressTimeFileSimpleData compressXmode compressYmode compressTimeField 0 nNumPnts Compressed
118. the line marker plot nsymbolstart Specifies the starting index for symbols in the line marker plot nsymbolskip Specifies the skip factor for placing symbols in the line marker plot barwidth Specifies the width of the bar A ChartAttribute object sets the objects global line color line width and line style attributes Change the ChartAttribute object using the objects SetChartObj Attributes method Use the objects setSymbolAttributes to change the attributes of the marker symbol Change the plot type using the PlotType property Use one of the plot type constants LINE MARKER PLOT LINE PLOT BAR PLOT SCATTER PLOT Simple versa plot example extracted from the example program NewDemosRev2 SimpleVersaChart C ChartAttribute attribl new ChartAttribute Colors Green 0 DashStyles Solid Colors Green Color barcolors Colors Red Colors Orange Colors Yellow Colors White double barbreakpoints 0 0 80 160 240 int gradmode ChartGradient GRADIENT MAPTO PLOT PHYSICAL COORDINATES ChartGradient cg new ChartGradient pTransforml gradmode barcolors barbreakpoints 90 attribl Gradient cg attribl SetFillFlag true thePlotl new SimpleVersaPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 0 0 attribl ChartObj JUSTIFY CENTER NumericLabel bardatavalue thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartOb
119. thePlotl1 Visual Basic Dim contourlevels As Double _ 1000 1200 1400 1600 1800 1900 2000 2100 2200 2400 2600 2800 3000 Dim theFont As ChartFont chartVu Me Dim i As Integer theFont New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold Dim pTransforml As New CartesianCoordinates 7 7 7 7 CreateRegularGridPolysurface d CreateRandomGridPolysurface pTransforml SetGraphBorderDiagonal 0 1 0 1 0 85 0 85 Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND Colors White chartVu AddChartObject background Dim checkBoxCaption As New ChartText pTransform1 theFont Contour Level _ 560 35 ChartObj DEV POS chartVu AddChartObject checkBoxCaption Dim xAxis As New LinearAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS chartVu AddChartObject yAxis Dim xAxisLab As New NumericAxisLabels xAxis chartVu AddChartObject xAxisLab Dim yAxisLab As New NumericAxisLabels yAxis chartVu AddChartObject yAxisLab Dim xgrid As New ChartGrid xAxis yAxis ChartObj X AXIS ChartObj GRID MAJOR chartVu AddChartObject xgrid Dim ygrid As New ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR chartVu AddChartObject ygrid Dim attribs numcontourlevels As ChartAttribute For i 0 To numcontourlevels Dim color As Color color FromArgb CInt 255 _ Cha
120. to create elements known as controls that enable a user to interact with an application The control classes are at the core of the user s experience with any application because they allow a user to view select or enter data or other information System Windows Controls Primitives Contains base classes and controls that are intended to be used as part of other more complex controls System Windows Media Provides types that enable integration of rich media including drawings text and audio video content in Windows Presentation Foundation WPF applications System Windows Media Imaging Provides types that are used to encode and decode bitmap images System Windows Input Provides types to support the Windows Presentation Foundation WPF input system This includes device abstraction classes for mouse keyboard and stylus devices a common input manager class support for commanding and custom commands and various utility classes System Windows Shapes Provides access to a library of shapes that can be used in Extensible Application Markup Language XAML or code Directory Structure of QCChart2D for WPF The QCChart2D for WPF class library uses the following directory structure Drive Quinn Curtis Root directory DotNet Quinn Curtis Net based products directory Docs Quinn Curtis Net related documentation directory Lib Quinn Curtis Net related compiled libraries and components directory QCChart2D Language spec
121. to fill the plot area or graph area and used as a background object ChartImage constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal aimage As Image _ ByVal x As Double _ ByVal y As Double _ ByVal npostype As Integer _ ByVal rotation As Integer _ C4 public ChartImage PhysicalCoordinates transform Image aimage double x double y int npostype int rotation transform The coordinate system for the new ChartImage object aimage A reference to the Image object that is to be placed in the chart x The x value for the position of the image in the chart y The y value for the position of the image in the chart npostype Specifies whether the x and y position values are specified in normalized coordinates or physical coordinates Use one of the position constants NORM POS PHYS POS rotation The rotation of the image specified in degrees ChartImage example extracted from the example program ImageCharts class ImageBackground 393 Lines Shapes Images and Arrows C String filename Images ChartClouds jpg BitmapImage almage null try almage new BitmapImage new Uri filename UriKind Relative catch System ArgumentException filename Images ChartClouds jpg aImage null if aImage null try almage new BitmapImage new Uri filename UriKind Relative catch System ArgumentException aIm
122. use the same values for the major and minor tick mark spacing partitioning the axes between R endpoints The circular axis also uses major and minor tick marks analogous to the hour and minute marks of a clock Creating polar axes There is only one constructor for PolarAxes objects PolarAxes PolarCoordinates transform transform The transform coordinate system defines the axis extents of the polar axes The PolarAxes constructor assumes that the axis extents match the extents of the underlying coordinate system transform Other axis properties minor tick mark spacing number of minor tick marks per major tick mark tick mark direction and tick mark lengths are automatically calculated using an auto axis method These properties can be explicitly set if you need to override the automatically calculated values Visual Basic Overloads Public Sub SetPolarAxesTicks ByVal axestickspace As Double _ ByVal axesntickspermajor As Integer _ ByVal angletickspace As Double _ ByVal anglentickspermajor As Integer _ Overloads Public Sub SetPolarAxesTicks ByVal axestickspace As Double _ ByVal axesntickspermajor As Integer _ ByVal angletickspace As Double _ ByVal anglentickspermajor As Integer _ ByVal minorticklength As Double _ ByVal majorticklength As Double _ ByVal tickdir As Integer Axes 210 Ct public void SetPolarAxesTicks double axestickspace int axesntickspermajor double angletickspace in
123. was mailed to you return the media envelope UNOPENED along with the rest of the package to the location where you obtained it within 30 days from purchase 1 The SOFTWARE is licensed not sold 2 GRANT OF LICENSE A Developer License After you have purchased the license for SOFTWARE and have received the file containing the licensed copy you are licensed to copy the SOFTWARE only into the memory of the number of computers corresponding to the number of licenses purchased The primary user of the computer on which each licensed copy of the SOFTWARE is installed may make a second copy for his or her exclusive use on a portable computer Under no other circumstances may the SOFTWARE be operated at the same time on more than the number of computers for which you have paid a separate license fee You may not duplicate the SOFTWARE in whole or in part except that you may make one copy of the SOFTWARE for backup or archival purposes You may terminate this license at any time by destroying the original and all copies of the SOFTWARE in whatever form B 30 Day Trial License You may download and use the SOFTWARE without charge on an evaluation basis for thirty 30 days from the day that you DOWNLOAD the trial version of the SOFTWARE The termination date of the trial SOFTWARE is embedded in the downloaded SOFTWARE and cannot be changed You must pay the license fee for a Developer License of the SOFTWARE to continue to use the SOFTWARE after the
124. x Class Window1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Window1 Height 631 Width 878 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 gt lt Grid gt lt my ChartView Margin 18 11 16 6 Name chartView 1 gt lt Grid gt lt Window gt The actual WpfChartApplicationl example has a little more complicated XAML file because it also includes a simple menu for printing the chart and saving the chart as an image file That version of the XAML file looks like Window x Class Window1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Window1 Height 631 Width 878 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 gt lt Grid gt O Using QCChart2D for WPF to Create Windows Applications 422 lt Grid RowDefinitions gt lt RowDefinition Height gt lt RowDefinition Height 20 gt lt Grid RowDefinitions gt Menu Height 22 HorizontalAlignment Left Margin 0 0 0 0 Name menul VerticalAlignment Top Width 72 Background White Grid Row 0 gt lt Menultem Header File MinWidth 0 MinHeight 0 gt lt Menultem Header Printer Setup Click PrinterSetupMenultem gt lt Menultem Header Print Click PrintMenultem gt lt Menultem Header SaveAsFile Click SaveAsFileMenul
125. x array The number of columns in the group dataset is the value of x Length property The number of columns in the y array must match the length of the x array and every element must be initialized to a valid value All values in the arrays are plotted If the data is outside of the current chart scale the values will be clipped The next constructor creates a dataset using the x and y values stored in a file that uses the CSV Comma Separated Value format There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the x values and subsequent columns represent the y values where each column is a group If you use the ROW MAJOR format the first row represents the x values and subsequent rows represent the y values where each row is a group Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation 99 Chart Datasets Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ C4 public GroupDataset CSV csv string filename int rowskip int columnskip E CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before reading the first value from the row You can retrieve references to the inter
126. x position of the plot area inside the graph area specified using graph normalized coordinates rTop The top y position of the plot area inside the graph area specified using graph normalized coordinates width The width of the plot area inside the graph area specified using graph normalized coordinates height The height of the plot area inside the graph area specified using graph normalized coordinates This method initializes the size and position of the plot area inside the graph area specified using graph normalized values for the opposite corners of the region Visual Basic Public Sub SetGraphBorderDiagonal _ ByVal rLeft As Double _ ByVal rTop As Double _ ByVal rRight As Double _ ByVal rBottom As Double Ct public void SetGraphBorderDiagonal double rLeft double rTop double rRight double rBottom rLeft The left x position of the plot area inside the graph area specified using graph normalized coordinates rTop The top y position of the plot area inside the graph area specified using graph normalized coordinates rRight The right x position of the plot area inside the graph area specified using graph normalized coordinates rBottom The bottom y position of the plot area inside the graph area specified using graph normalized coordinates Scaling and Coordinate Systems 118 This method initializes the insets of the plot area inside the graph area specified using graph normalized va
127. xData As Double 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Dim yData As Double LD 22 33 44 55 46 33 25 14 9 Dim dataset As ElapsedTimeSimpleDataset New ElapsedTimeSimpleDataset Sales xData yData Dim simpleScale As ElapsedTimeCoordinates New ElapsedTimeCoordinates simpleScale AutoScale dataset You can control the tightness of the auto scale values about the dataset values using other versions of the ElapsedTimeCoordinates AutoScale method that take rounding mode parameters Example of auto scaling a ElapsedTimeCoordinates object using a single dataset and explicit rounding mode parameters simpleScale AutoScale dataset ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR You can auto scale the bounds of the coordinate system using a dataset and then explicitly modify the range the auto scale selected There are methods that set the minimum and maximum values of the x and y scales This way you can use the auto scale methods for the values of one scale the y scale in the example below but explicitly set the values for the other scale the x scale in the example below Example of modifying the minimum and maximum values selected by an auto scale method C double xData 1000 2000 3000 4000 5000 6000 7000 8000 9000 double yData 11 22 33 44 55 46 33 25 14 ElapsedTimeSimpleDataset dataset new ElapsedTimeSimpleDataset Sales xData yData ElapsedTimeCoordinat
128. your own The selected data point is highlighted using a ChartSymbol object set to a default shape of ChartObj SQUARE a size of 8 and a color of black Change this by replacing the ChartSymbol used as the template with one of your own Simple data tooltip example Adapted from the MultiAxes example In this example the tooltip will display the decimal y value of the nearest data point when the left mouse button is pressed C ChartView chartVu DataToolTip datatooltip new DataToolTip chartVu chartVu SetCurrentMouseListener datatooltip Visual Basic Dim chartVu As ChartView Dim datatooltip As DataToolTip New DataToolTip chartVu chartVu SetCurrentMouseListener datatooltip Medium complex data tooltip example Adapted from the LineFill example In this example the tooltip will display the x value of the data point as a date and the y value as currency The x and y values are displayed on two separate lines one above the other Data ToolTips 338 C ChartFont toolTipFont new ChartFont SansSerif 10 FontStyles Normal DataToolTip datatooltip new DataToolTip chartVu TimeLabel xValueTemplate new TimeLabel ChartObj TIMEDATEFORMAT MDY NumericLabel yValueTemplate new NumericLabel ChartObj CURRENCYFORMAT 0 datatooltip GetToolTipSymbol SetColor Colors Green datatooltip SetXValueTemplate xValueTemplate datatooltip SetYValueTemplate yValueTemplate datatooltip S
129. 0 Background background new Background pTransforml ChartObj PLOT BACKGROUND Color FromBRgb 255 255 255 chartVu AddChartObject background pTransforml SetGraphBorderDiagonal 0 15 15 90 0 75 F Define axes axes labels and grids hartAttribute attribl new ChartAttribute Colors Blue 1 DashStyles Solid tribl SetFillFlag true tribl SetLineFlag false artAttribute attribArray new ChartAttribute numGroups r i20 i lt numGroups i attribArray i ChartAttribute attribl Clone tribArray 0 SetFillColor Colors Blue tribArray 1 SetPillColor Colors Yellow tribArray 2 SetFillColor Colors Magenta tribArray 3 SetFillColor Colors Orange 4 Kh CD D CH Qr e e tribArray SetFillColor Colors Gray tribArray 5 SetFillColor Colors Red tribArray 6 SetFillColor Colors Green ackedLinePlot thePlotl new StackedLinePlot pTransforml Datasetl attribArray chartVu AddChartObject thePlotl no vo DD D D Visual Basic Dim numPoints As Integer 100 Dim numGroups As Integer 7 Dim x1 numPoints 1 As Double Dim yl numGroups 1 numPoints 1 As Double Initialize data theFont New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold Dim Datasetl As New GroupDataset First x Dataset1 SetStackMode ChartObj AUTOAXES STAC Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE pTransforml AutoScale Datasetl
130. 0 24 low For i 1 To nNumPnts 1 xValues i currentdate Clone stockPriceData 3 i stockPriceData 3 i 1 _ 3 0 52 ChartSupport GetRandomDouble close stockPriceData 0 i stockPriceData 3 i _ 2 0 5 ChartSupport GetRandomDouble open minval Math Min stockPriceData 3 i stockPriceData 0 i maxval Math Max stockPriceData 3 i stockPriceData 0 i stockPriceData 1 i maxval 1 5 ChartSupport GetRandomDouble high stockPriceData 2 i minval 1 5 ChartSupport GetRandomDouble low currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode Next i Dim Datasetl As New TimeGroupDataset Stock Data xValues stockPriceData Example of creating a simple time datasets from a CSV file C CSV csvDataFile new CSV TimeGroupDataset Datasetl new TimeGroupDataset csvDataFile TimeGroupDataset csv 0 0 Write out dataset as a CSV file under a different file name Datasetl WriteTimeGroupDataset csvDataFile TimeGroupDataset2 csv Chart Datasets 104 Visual Basic Default time date format is M dd yyyy Dim csvDataFile As CSV New CSV Create a dataset based on a previously saved csv file Dim Datasetl As TimeGroupDataset _ New TimeGroupDataset csvDataFile TimeGroupDataset csv 0 0 Write out dataset as a CVS file Datasetl WriteTimeGroupDataset csvDataFile TimeGroupDatasetl csv Read it back in just as a test Datasetl R
131. 0 71 xValues 1 New ChartCalendar 1999 ChartObj JANUARY groupBarData 0 1 40 groupBarData 1 1 81 xValues 2 New ChartCalendar 2000 ChartObj JANUARY groupBarData 0 2 54 groupBarData 1 2 48 xValues 3 New ChartCalendar 2001 ChartObj JANUARY 1 groupBarData 0 3 56 groupBarData 1 3 44 xValues 4 New ChartCalendar 2002 ChartObj JANUARY 1 groupBarData 0 4 58 groupBarData 1 4 40 Dim Datasetl As New TimeGroupDataset GroupTimeData xValues groupBarData Dim pTransforml As New TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 1 0 95 0 8 Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND _ Color FromRgb 0 120 70 Color FromRgb 0 40 30 ChartObj Y AXIS chartVu AddChartObject background Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Black 1 DashStyles Solid Colors Red attribl SetFillFlag True attribl SetLineFlag False Dim thePlotl As New LineGapPlot pTransforml Datasetl attribl chartVu AddChartObject thePlotl Multi Line Plots Class MultiLinePlot GraphObj ChartPlot GroupPlot MultiLinePlot Simple Plot Objects 296 The MultiLinePlot class extends the GroupPlot class and displays group data in multi line format A group dataset with eight groups will display eight separate line
132. 0 281 282 284 286 289 290 291 294 295 296 298 300 301 380 454 455 460 469 Appendix GroupPlot 27 42 43 44 45 46 47 48 49 50 51 66 161 265 266 268 272 274 276 278 279 280 283 284 286 288 291 293 294 296 298 300 GroupVersaPlot sese 44 48 66 Group cersaPlot sse 44 48 66 Histogram plots 5 pt ie Eee nentes HistogramPlot 44 49 66 265 288 289 290 291 HistogramPlot 44 49 66 265 288 289 290 291 Image obiects eeens 60 66 176 387 390 chartImage 60 66 176 387 390 391 Legend classes 577 58 66 162 358 367 legend 5 23 26 27 57 58 61 66 110 160 162 316 358 359 360 361 362 363 364 365 366 367 371 Legend Items 5 52 d ded eade adeo LegendlItem 57 58 66 358 359 360 361 362 363 364 365 366 L pgend Iteti ino Hs Line gap plots LineGapPlot 44 49 66 265 291 292 293 Line marker plot SimpleLineMarkerPlot 55 56 66 92 249 258 259 260 261 262 316 Line plots rds is eere cere te t eee ESA erg deca SimpleLinePlot 19 55 56 66 92 169 170 176 249 250 251 252 257 313 314 316 333 361 362 371 413 422 446 447 449 450 452 Linear auto scaling sss LinearAutoScale Linear EE LinearAxis 34 36 41 58 66 148 160 161 162 178 179 180 181 182 184 185 189 190 197 198 199 202 206 210
133. 00 00100 00200 00300 0 04 00 10103 5 Second Second a 0 00 00 00005 0 00 10 0 00 15 0 00 20 101 There are more than 40 different time date axes types appropriate for scales ranging from 1 second to 100 years TimeAxis Class Architecture 40 Time Date Axes with Custom Hour Range 8 30 AM to 4 00 PM Dayf2 Hour 4 HouriHour ff htop EECH ar TEES EEGA LLE ME 10103 10203 4 03 03 40403 830 12 00 8 30 12 00 10103 10203 2 HourHour Heu Minute FT FG LI RA LE T 830 1000 em 1400 830 1000 830900 1000 1100 12 00 13 00 1400 uos 10205 10105 A Hour Minute 15 Minute Minute Mmorp tirrr irit tii 30 om 10 00 1100 230 8 45 9 00 9 15 930 10103 4 103 5 Minute Minute Minute 1 Seconds Poet terrieri T ary 830 835 840 845 850 855 83000 83100 83200 983300 983400 1 0103 10103 Minute 5 Second 5 Second Second TrTTTTTTITTTTITITTTITTTTTITTITTITTT RU 8 30 00 8 31 00 8 32 00 8 3300 83000 83005 3040 83045 8 30 20 10103 10103 Atime axis can be customized for non 24 hour range This class is the most complex of the axis classes It supports time scales ranging from 1 milliseond to hundreds of years Dates and times are specified using the Net ChartCalendar class The major and minor tick marks can fall on any time base where a time base represents seconds minutes hours days weeks months or years The scale can exclude weekends for example Friday October 20 2000 is immediately followed by Monday Oct
134. 1 2 x 11 printed page printable area about 6 5 x 9 assuming the 1 inch default margins Assuming portrait mode a ChartView sized to 650W x 900H will fill the page as will other ChartView sizes with the same proportions 500W x 692H 400W x 554H 300W x 415 etc If you are printing in landscape mode then the chart width and height values would be swapped ChartPrint example printing a ChartView extracted from the example program WpfChartApplication1 class Windowl ChartPrint cp null private void PrinterDialog object sender RoutedEventArgs e ChartView currentChart chartViewl if currentChart null cp new ChartPrint currentChart ecp DoPrintDislog 0 private void PrintGraph object sender RoutedEventArgs e ChartView currentChart chartViewl if currentChart null if cp null cp new ChartPrint currentChart ep DoPrintDialoq else ep DoPrintPage Visual Basic Dim cp As ChartPrint Nothing Private Sub PrinterDialog ByVal sender As Object ByVal e As RoutedEventArgs Dim currentChart As ChartView chartViewl If currentChart IsNot Nothing Then cp New ChartPrint currentChart ep DoPrintDialog End If End Sub Private Sub PrintGraph ByVal sender As Object ByVal e As RoutedEventArgs Dim currentChart As ChartView chartViewl If currentChart IsNot Nothing Then If cp Is Nothing Then cp New ChartPrint currentChart cp DoPrintDialog Else File and Prin
135. 10 impleScatterPlot thePlotl new SimpleScatterPlot pTransforml Datasetl ChartObj SQUARE attribl hePlotl SetSegmentAttributesMode true hartAttribute segmentAttrib new ChartAttribute Colors Red 1 DashStyles Solid Colors Red segmentAttrib SetSymbolSize 20 thePlotl SetSegmentAttributes 8 segmentAttrib thePlotl SetSegmentAttributes 9 segmentAttrib thePlotl SetSegmentAttributes 10 segmentAttrib E o wo 6 QS Cx 3 vt hePlotl SetSegmentAttributes 11 segmentAttrib hartVu AddChartObject thePlotl Visual Basic Dim attribl As New ChartAttribute Colors Blue 1 DashStyles Solid attribl SetFillColor Colors Blue ttribl SetLineFlag True ttribl SetSymbolSize 10 im thePlotl As New SimpleScatterPlot pTransforml Datasetl ChartObj SQUARE attribl hePlotl SetSegmentAttributesMode True im segmentAttrib As New ChartAttribute Colors Red 1 DashStyles Solid olors Red egmentAttrib SetSymbolSize 20 hePlotl SetSegmentAttributes 8 segmentAttrib hePlotl SetSegmentAttributes 9 segmentAttrib hePlotl SetSegmentAttributes 10 segmentAttrib hePlotl SetSegmentAttributes 11 segmentAttrib hartVu AddChartObject thePlotl D D o Gg cube d pe Simple Line Marker Plots Class SimpleLineMarkerPlot GraphObj 261 Simple Plot Objects ChartPlot SimplePlot SimpleLineMarkerPlot The SimpleLineMarkerPlot class is a concrete implementation of the SimplePlot c
136. 154 205 206 236 Appendix 468 EventGroupDataset esee EventGroupDataset 7 29 30 33 65 72 88 92 105 106 108 139 145 EventS alesis se em eere en eer rr ed EventScale 9 30 31 65 110 EventSimpleDat set 2 rad eio ee Dnm NE SEG EventSimpleDataset9 29 33 65 72 87 88 92 93 94 95 105 106 108 139 145 147 205 206 236 Finding graph objects sse FindObj 60 61 65 167 449 450 452 FindOb 60 61 65 167 449 450 452 Floating bar plots esee FloatingBarPlot 44 47 66 265 2779 280 282 283 FloatingBarPlot 44 47 66 265 2779 280 282 283 Graph object class see be rte emen GraphObj 1 32 34 52 66 113 160 161 162 163 165 166 167 169 175 179 180 185 190 199 202 206 210 215 216 220 223 229 232 237 240 242 243 245 247 249 252 255 258 261 266 268 272 274 276 278 280 283 286 288 291 293 296 298 300 303 308 310 316 317 318 341 347 349 350 352 353 355 358 360 361 362 367 387 390 449 450 451 457 GraphObj32 34 52 66 113 160 161 162 163 165 166 167 169 175 179 180 185 190 199 202 206 210 215 216 220 223 229 232 237 240 242 243 245 247 249 252 255 258 261 266 268 272 274 276 278 280 283 286 288 291 293 296 298 300 30
137. 18 11 16 6 Name chartView3 Height 1200 Width 1400 gt lt ScrollViewer gt lt Grid gt lt Tabltem gt There are many more variations Just remember that the ChartView class is a UserControl derived class and it can be used anywhere a UserControl object can be used utilizing standard or specialized WPF layout managers Finding Chart Objects The ChartView class is the central container class of the chart library It keeps track of all of the objects in the chart It includes a routine that can compare a test point against all of the objects in the chart and return an instance of an object that intersects the test point The search can be restricted to a class and all subclasses of the specified class FindObj method Visual Basic Overloads Public Function FindObj3 ByVal testpoint As Point2D _ ByVal classname As String As GraphObj Ct public GraphObj FindObj Point2D testpoint string classname M Parameters If the graph has multiple overlapping objects of the same type you can return the n object intersecting the test point Visual Basic Overloads Public Function FindObj ByVal testpoint As Point2D _ ByVal classname As String _ ByVal nthhit As Integer _ As GraphObj Ct public GraphObj FindObj Point2D testpoint string classname int nthhit LE testpoint classname nthhit The Chart View 170 The current position of the mouse in WPF device coordinates The class
138. 2006 Bar plots can have the values of the bars displayed above or inside each bar SimpleBarPlot This class is a concrete implementation of the SimplePlot class and displays data in a bar format Individual bars the maximum value of which corresponds to the y values of the dataset are justified with respect to the x values Class Architecture 58 History Test Results Test Score 0 5 10 15 20 Student Individual data points can be automatically labeled SimpleLineMarkerPlot This class is a concrete implementation of the SimplePlot class and it displays simple datasets in a line plot format where scatter plot symbols highlight individual data points Sales Volume is Rising Faster than Forecast 2005 2008 1999 2000 2001 2002 2003 2004 Presentation quality graphs with background gradients semi transparent colors legends and titles This class is a concrete implementation of the SimplePlot class it displays simple datasets in a line plot format Adjacent data points are connected using a straight or a step line SimpleLinePlot 59 Class Architecture Theoretical vs Experimental Data Measurable work output 0 20 40 60 80 100 MBAs 1000 employees Energy Companies e Software Companies Predicted Scatter plots usually display some form of sampled data SimpleScatterPlot This class is a concrete implementation of the SimplePlot class and it displays simple datasets in a scatter plot form
139. 214 215 216 219 220 227 228 231 232 236 237 242 244 288 305 306 372 373 412 413 422 430 438 444 445 446 447 449 453 454 TEMG ar SCALE ye acere eerte e REESE CAREER IRSE PES EinearScale geet edict ener eov 30 65 110 112 LinearAUutOSRCale see 33 65 LinearAxis34 36 41 58 66 160 161 162 178 179 180 181 182 184 185 189 190 197 198 199 202 206 210 214 215 216 219 220 227 228 231 232 242 244 288 305 306 372 373 444 445 446 447 449 453 454 Eu a einem ees 30 65 110 112 LineGapPlot 44 49 66 265 291 292 293 L og scale casio tar a etate LogScale Logarithmic auto scaling essere LogAutoScale sese 33 65 Logarithmic axis sects ea ee oe pe tere LogAxis 34 37 41 58 66 178 179 185 186 187 189 214 215 216 242 454 455 LogAutoSc le eiie ere eene 33 65 LogAxis 34 37 41 58 66 178 179 185 186 187 189 214 215 216 242 454 455 LogScale irae prete ides 30 65 110 112 MagniView 61 62 65 323 329 330 347 MagniView 61 62 65 323 329 330 331 332 347 Markers 60 61 66 258 308 310 311 313 448 marker 3 5 7 17 19 23 26 27 42 52 53 55 56 57 60 61 66 92 113 249 258 259 260 261 262 263 296 308 309 310 311 312 313 314 315 316 320 346 351 353 354 355 448 MouseListeners
140. 265 266 268 272 274 276 278 280 283 286 288 291 293 296 298 300 303 338 339 341 347 349 350 352 353 360 361 367 451 457 461 10 11 D er 63 64 65 83 84 85 86 Polat GRT 5 cce A ERA ete ers PolarAxes 34 39 40 42 59 66 178 179 206 207 208 209 214 215 237 238 239 242 245 246 247 346 348 349 Polar ag Tobes age ree ebrei PolarAxesLabels 40 42 66 214 215 237 238 239 346 348 349 Polat coorditiates 4o tot St etre et PolarCoordinates 31 32 65 110 112 155 156 163 207 208 209 239 246 346 347 348 349 350 456 Polat grids eed ehe diete ee PolarGrid 58 59 66 242 245 246 247 346 348 349 Polar line plots emot poter PolarLinePlot 51 52 66 346 347 348 349 Polar plot classes eee A ren teens PolarPlot 42 51 52 66 161 346 347 349 Polar Scatter e ette MUN P PolarScatterPlot 51 52 66 346 348 349 350 PolarAxes 34 39 42 59 66 178 179 206 207 208 209 215 238 239 245 246 346 348 349 PolarAxesLabels 40 42 66 214 215 237 238 239 346 348 349 PolarCoordinates 31 32 65 110 112 155 156 163 207 208 209 239 246 346 347 348 349 350 456 PolarGrid 58 59 66 242 245 246 348 349 PolarLinePlot 51 52 66 346 347 348 349 PolarPlot 42 51 52 66 161 346 347
141. 297 299 322 368 378 430 438 453 454 455 456 Tame label neci netyethe eB DS TimeLabel 59 60 66 333 335 336 338 340 367 373 375 376 431 439 Tifrie scale otto teretes OT TimeScale 30 65 110 112 125 126 127 128 129 131 133 134 135 153 154 158 197 198 227 228 254 287 299 430 438 453 Time Date group T iine e TimeGroupDataset 29 30 33 65 72 98 99 100 101 102 103 104 105 127 273 275 276 281 282 283 285 287 292 293 297 380 384 460 Time Date simple datasets see SimpleDataset A neret 93 TimeSimpleDataset29 33 65 72 76 77 78 79 80 81 82 83 127 128 129 131 134 137 138 231 232 251 252 254 322 380 430 438 453 454 460 461 TmeAutOScale 33 65 TimeAxis 34 38 41 42 58 66 178 179 190 195 196 197 198 215 223 225 227 228 232 234 242 288 443 444 449 453 454 TimeAxisLabels 40 41 42 66 214 215 223 225 227 228 229 232 234 288 TimeCoordinates 31 32 65 110 112 124 125 126 127 128 129 130 131 132 133 134 157 158 159 163 164 176 177 190 191 195 196 197 198 227 228 250 251 252 254 273 281 282 283 285 287 292 293 297 299 322 368 378 453 454 455 456 TimeGroupDataset 29 30 33 65 72 98 99 100 101 102 127 273 275 276 281 282 283 285 287 292 293 297 384 460 TimeLabel 59 66 333 335 336 338 340 367 3
142. 3 308 310 316 317 318 341 347 349 350 352 353 355 358 360 361 362 367 387 390 450 451 457 Grids 58 66 161 162 242 244 245 247 288 305 306 446 447 450 457 grid 3 11 23 26 27 28 58 59 66 69 83 84 85 86 87 161 162 163 166 167 242 243 244 245 246 247 248 251 252 254 257 260 267 273 274 275 276 277 278 282 283 287 288 290 292 293 295 297 299 301 302 305 306 307 346 348 349 351 352 380 381 382 383 384 385 386 395 398 402 407 409 410 413 415 417 419 420 422 424 426 427 431 434 435 436 439 443 446 447 449 450 457 Group bar plots ae ete tiere ge ede GroupBarPlot A4 48 66 163 265 280 286 287 288 334 Group datasets xc dene eet m ocean GroupDataset 7 29 30 33 65 72 74 88 92 95 96 97 98 99 100 101 102 103 104 105 106 108 127 139 145 266 267 268 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 289 290 291 292 293 294 295 296 297 298 300 301 380 384 451 454 455 460 Group plot classes s nre eet teen GroupPlot 27 42 43 44 45 46 47 48 49 50 51 66 161 265 266 268 272 274 276 278 279 280 283 284 286 288 291 293 294 296 298 300 GroupBarPlot 44 48 66 280 286 287 288 334 GroupDataset 29 30 33 65 72 95 96 97 98 102 105 266 267 268 272 274 215 276 277 278 279 28
143. 3 254 255 316 333 SimpleDataset 29 33 65 72 73 74 75 76 80 83 88 119 120 122 156 157 159 160 161 250 253 256 259 260 262 327 328 341 342 343 344 346 347 348 349 350 351 352 353 354 380 460 SimpleLineMarkerPlot 55 56 66 249 258 259 260 261 262 316 SimpleLinePlot 55 56 66 169 170 249 250 251 252 257 313 316 333 361 362 446 447 450 SimplePlot 27 42 55 56 57 60 61 66 161 249 253 255 256 259 261 267 273 275 277 279 281 289 292 297 341 SimpleScatterPlot 55 57 66 249 255 256 257 258 260 316 SimpleVersaPlot 57 66 261 262 263 264 SimpleVersaPlot 57 66 249 261 262 263 264 Stacked bar plots ette etre eee StackedBarPlot 44 47 48 66 265 283 284 285 297 298 299 334 Stacked line 0 1 eee StackedLinePlot 44 51 66 265 300 301 302 334 StackedBarPlot 44 48 66 265 284 297 298 299 334 StackedLinePlot 44 51 66 265 300 301 302 334 Standard legenda essen StandardLegend 57 58 66 358 359 362 StandardLegend 57 58 66 358 359 362 String axis labels raserer edet debate StringAxisLabels 40 41 66 214 220 221 222 223 455 String labels a ente ne Bene te CREARE stringlabel 59 60 66 367 373 375 377 378 455 StringAxisLabels 40 41 66 214 220 221 222 223 455 StringLabel 59
144. 3 5 v E S Visual C Visual Studio installed templates G Windows Forms Application Z Ces Library s WPF Application Pea WPF Browser Application E Console Application e Empty Project ZH WPF Custom Control Library WE WPF User Control Library Egi Windows Forms Control Library Other Languages Visual Basic My Templates Windows Web Search Online Templates DocProject LO Miel C A3 M Windows Presentation Foundation dient application NET Framework 3 5 Name WpfApplication1 E Quinn Curtis WPF Development DotNet QCChart2D Visual CSharp examples wpf Create new Solution v Create directory for solution WpfApplication1 o Ice S The XAML portion of the project looks like Window x Class WpfApplicationl Window1 xmins http schemas microsoft com winfx 2006 xaml presentation xmins x http schemas microsoft com winfx 2006 xaml Title Window1 Height 300 Width 300 gt lt Grid gt lt Grid gt lt Window gt The window does not yet have any content First define a default size for the window and add a reference to the QCChart2D namespace In this case the namespace is com quinncurtis chart2dwpf and it is located in the assembly DLL with the name QCChart2DWPF3 So add the following line under the other xmlns namespace tags Title Windowl Height 631 Width 878 xmlns my clr namespace com quinncurtis char
145. 3 CalcAutoAxis yAxisLab3 CalcAutoAxisLabels yAxis3 SetAxisIntercept pTransform3 GetStopX yAxis3 SetAxisTickDir ChartObj AXIS MAX this UpdateDraw VB Public Sub UpdateScaleAndAxesUsingDates ByVal startindex As Integer Dim startdate As ChartCalendar DirectCast datastartdate Clone ChartCalendar Dim stopdate As New ChartCalendar Startdate Add ChartCalendar DAY OF YEAR startindex Stopdate DirectCast startdate Clone ChartCalendar stopdate Add ChartObj MONTH 1 pTransforml TimeScaleStart startdate pTransforml TimeScaleStop stopdate pTransform2 TimeScaleStart startdate pTransform2 TimeScaleStop stopdate pTransform3 TimeScaleStart startdate pTransform3 TimeScaleStop stopdate xAxisl CalcAutoAxis yAxisl CalcAutoAxis xAxisLabl CalcAutoAxisLabels yAxisLabl CalcAutoAxisLabels xAxis2 CalcAutoAxis xAxis2 SetAxisIntercept pTransform2 GetStopY XAxis2 SetAxisTickDir ChartObj AXIS MAX yAxis2 CalcAutoAxis yAxisLab2 CalcAutoAxisLabels yAxis3 CalcAutoAxis yAxisLab3 CalcAutoAxisLabels yAxis3 SetAxisIntercept pTransform3 GetStopX yAxis3 SetAxisTickDir ChartObj AXIS MAX Me UpdateDraw End Sub If you specify a date time value which is an exact match for one of the date values of a ChartEvent then the ChartEvent Position property becomes the scale value If it is not an exact match then the binary search for the closest date time rounds down to the ne
146. 35 178 179 190 199 200 201 202 203 204 214 215 229 231 232 ElapsedTimeAxisLabels 41 42 66 135 190 214 215 229 231 232 ElapsedTimeAxisLabels 40 42 66 135 190 214 215 229 231 232 ElapsedTimeGroupDataset 29 30 33 65 72 98 102 103 104 105 380 ElapsedTimeGroupDataset 29 30 33 65 72 98 102 103 104 105 380 ElapsedTimeLabel 59 60 66 367 373 375 376 ElapsedTimeLabel 59 60 66 367 373 375 376 ElapsedTimeScale see 30 31 ElapsedTimesScale sess 30 65 110 ElapsedTimeSimpleDataset 29 33 65 72 76 80 81 82 83 87 88 92 93 106 137 138 231 232 380 ElapsedTimeSimpleDataset 29 33 65 72 76 80 81 82 83 137 138 231 232 380 SimpleDat set 5 osten dest dedita 93 Error bar plots geet seele ec ota eoe E tate ErrorBarPlot 44 46 66 265 278 279 Errorbarbiot 44 46 66 265 278 279 EventAutoScale eese nnne EventAutoScale EventAxis EventAxis 7 34 39 41 42 66 92 142 145 146 148 149 178 179 202 203 205 206 214 215 232 234 236 237 EventAxisLabels aee deesse eit EventAxisLabels 7 41 42 66 92 142 145 146 148 214 215 232 234 236 237 EventCoordinates esses enne EventCoordinates 7 31 32 88 90 94 95 108 109 110 112 139 140 145 147 148 151 153
147. 37 138 156 157 158 160 161 162 169 170 176 177 184 189 190 197 198 201 202 209 212 213 219 220 222 223 227 228 231 232 237 239 241 244 245 246 250 251 252 254 255 257 258 260 261 263 264 267 271 272 273 274 276 277 278 282 283 285 287 288 290 291 292 293 295 297 299 300 301 302 305 306 307 310 312 317 318 320 322 325 326 327 328 329 335 336 337 338 339 340 344 345 348 349 351 352 355 362 365 366 369 370 371 372 373 378 391 393 395 398 444 445 446 447 450 452 453 454 455 456 457 460 461 ChartObj 34 65 69 73 76 79 80 83 87 94 95 98 100 101 102 105 107 108 119 121 122 125 126 127 128 129 130 131 132 133 134 135 137 138 143 144 145 146 148 149 152 153 154 156 157 158 160 161 162 163 166 169 170 176 177 184 189 190 197 198 199 201 202 203 205 206 208 209 212 213 219 220 222 223 227 228 231 232 236 237 239 241 244 245 246 247 248 250 251 252 254 255 256 257 258 260 261 263 264 267 268 271 272 273 274 276 277 278 282 283 285 287 288 290 291 292 293 295 297 299 300 301 302 305 306 307 310 312 313 314 315 317 318 320 322 325 326 327 328 329 331 332 335 336 337 338 339 340 344 345 348 349 351 352 355 360 361 362 364 365 366 369 370 371 372 373 378 379 385 386 389 391
148. 40 42 66 178 179 210 211 212 213 214 215 240 241 247 248 346 351 352 AntennaAxesLabels 40 42 66 214 215 240 241 346 351 352 AntennaAxesLabels 40 42 66 214 215 240 241 346 351 352 AntennaCoordinates 31 32 65 110 112 156 157 163 210 212 213 241 346 350 351 352 353 354 356 AntennaCoordinates 31 32 65 110 112 156 157 163 210 212 213 241 346 350 351 352 353 354 356 AntennaGrid 58 59 66 242 247 248 351 352 AntennaGrid 58 59 66 242 247 248 346 351 352 AntennaLineMarkerPlot 52 53 66 346 353 354 355 AntennaLineMarkerPlot 52 53 66 346 353 354 355 AntennaLinePlot 52 53 66 346 350 351 352 AntennaLinePlot 52 53 66 346 350 351 352 AntennaPlot 42 52 53 66 161 346 350 353 354 AntennaPlot 42 52 53 66 161 346 350 353 354 AntennaScatterPlot 52 53 66 346 352 353 354 356 AntennaScatterPlot 52 53 66 346 352 353 354 356 AOW PloS c EE ArrowPlot 43 44 66 265 266 267 268 274 387 392 ArrowPlot 43 44 66 265 266 267 268 274 387 392 Armtows 65 266 267 268 387 391 392 393 arrow 3 5 19 23 43 44 65 66 123 265 266 267 268 274 387 391 392 393 ASP NET ersten ota tee NOS 25 Auto scaling classes 33 65 119 120 121 122 127 128 129 131 134 135 137 138 156 157 159 160 161 176 177 250 251 252 254 257 260 267
149. 5 Dim background As New Background pAntennaTransform ChartObj GRAPH BACKGROUND Colors White chartVu AddChartObject background Dim pAntennaAxis As AntennaAxes pAntennaTransform GetCompatibleAxes pAntennaAxis LineColor Colors Black chartVu AddChartObject pAntennaAxis Dim pAntennaGrid As New AntennaGrid pAntennaAxis AntennaGrid GRID ALL pAntennaGrid ChartObjAttributes New ChartAttribute Colors LightBlue 1 DashStyles Solid chartVu AddChartObject pAntennaGrid Dim pAntennaAxisLabels As AntennaAxesLabels DirectCast pAntennaAxis GetCompatibleAxesLabels AntennaAxesLabels chartVu AddChartObject pAntennaAxisLabels Dim transparentRed As Color Color FromArgb 180 255 0 0 Dim transparentBlue As Color Color FromArgb 180 0 0 255 Dim attribl As New ChartAttribute transparentRed 1 DashStyles Solid attribl SymbolSize 7 Dim attrib2 As New ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue attrib2 SymbolSize 7 Dim thePlotl As New AntennaLinePlot pAntennaTransform thePlotl InitAntennaLinePlot Datasetl attribl chartVu AddChartObject thePlotl D E G im thePlot2 As New AntennaScatterPlot pAntennaTransform hePlot2 InitAntennaScatterPlot Datasetl ChartObj SQUARE attrib2 hartVu AddChartObject thePlot2 Class AntennaScatterPlot GraphObj ChartPlot 355 Polar and Antenna Charts AntennaPlot AntennaScatterPlot The AntennaScatterPlot class
150. 5 pTransform4 SetGraphBorderDiagonal 0 35 15 9 0 565 pTransform5 SetGraphBorderDiagonal 0 35 15 9 0 65 F ChartAttribute attribl new ChartAttribute Colors Blue 2 DashStyles Solid ChartAttribute attrib2 new ChartAttribute Colors Red 2 DashStyles Solid ChartAttribute attrib3 new ChartAttribute Colors Green 2 DashStyles Solid a a ChartAttribute attrib4 new ChartAttribute Colors Orange 2 DashStyles Solid ChartAttribute attrib5 new ChartAttribute Colors Magenta 2 DashStyles Solid xAxis new LinearAxis pTransforml ChartObj X AXIS xAxis SetLineWidth 2 chartVu AddChartObject xAxis yAxisl new LinearAxis pTransforml ChartObj Y AXIS yAxisl SetAxisIntercept 0 0 yAxisl SetChartObjAttributes attribl axis color matches line color chartVu AddChartObject yAxis1 yAxis2 new LinearAxis pTransform2 ChartObj Y AXIS yAxis2 SetAxisIntercept 18 yAxis2 SetChartObjAttributes attrib2 axis color matches line color chartVu AddChartObject yAxis2 yAxis3 new LinearAxis pTransform3 ChartObj Y AXIS yAxis3 SetAxisIntercept 35 yAxis3 SetChartObjAttributes attrib3 axis color matches line color chartVu AddChartObject yAxis3 yAxis4 new LinearAxis pTransform4 ChartObj Y AXIS yAxis4 SetAxisIntercept 52 yAxis4 SetChartObjAttributes attrib4 axis color matches line color chartVu AddChartObject yAxis4 yAxis5 new LinearAxis pTransform5 ChartObj Y
151. 5 6 groupBarData 2 4 4 3 groupBarData 3 4 3 3 ElapsedTimeGroupDataset Datasetl new ElapsedTimeGroupDataset ElapsedTimeGroupData xValues groupBarData VB Dim nNumPnts As Integer 5 nNumGroups As Integer 4 107 Chart Datasets Dim xValues As TimeSpan New TimeSpan nNumPnts 1 Dim groupBarData As Double New Double nNumGroups 1 nNumPnts 1 xValues 0 TimeSpan FromMinutes 1 groupBarData 0 0 58 3 groupBarData 1 0 3 1 groupBarData 2 0 2 2 groupBarData 3 0 1 8 xValues 1 TimeSpan FromMinutes 2 groupBarData 0 1 5 8 groupBarData 1 1 4 3 groupBarData 2 1 2 8 groupBarData 3 1 1 5 xValues 2 TimeSpan FromMinutes 3 groupBarData 0 2 5 5 groupBarData 1 2 4 5 groupBarData 2 2 2 5 groupBarData 3 2 2 1 xValues 3 TimeSpan FromMinutes 4 groupBarData 0 3 4 1 groupBarData 1 3 5 4 groupBarData 2 3 4 1 groupBarData 3 3 3 2 xValues 4 TimeSpan FromMinutes 5 groupBarData 0 4 3 8 groupBarData 1 4 5 6 groupBarData 2 4 4 3 groupBarData 3 4 3 3 Dim Datasetl As New ElapsedTimeGroupDataset ElapsedTimeGroupData xValues groupBarData Event Group Dataset Class EventGroupDataset ChartObj ChartDataset GroupDataset EventGroupDataset The EventGroupDataset class is the group dataset version of EventSimpleDataset See the background information under the EventSimpleDat
152. 6 The following code would be in the code handling the rescale event Rescale chart based on a modified Datasetl datset simpleTimeCoordinates AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR xAxis CalcAutoAxis yAxis CalcAutoAxis Redraw the chart using the rescaled coordinate system and axes chartVu UpdateDraw Visual Basic Dim Datasetl As TimeSimpleDataset New TimeSimpleDataset Sales xl yl Dim simpleTimeCoordinates As TimeCoordinates New TimeCoordinates simpleTimeCoordinates AutoScale Datasetl ChartObj AUTOAXES FAR _ ChartObj AUTOAXES FAR Dim chartVu As ChartView New ChartView Create the time axis x axis is assumed Dim xAxis As TimeAxis New TimeAxis simpleTimeCoordinates Create the linear y axis Dim yAxis As LinearAxis New LinearAxis simpleTimeCoordinates ChartObj Y AXIS The following code would be in the code handling the rescale event Rescale chart based on a modified Datasetl datset simpleTimeCoordinates AutoScale Datasetl ChartObj AUTOAXES FAR _ ChartObj AUTOAXES FAR xAxis CalcAutoAxis yAxis CalcAutoAxis Redraw the chart using the rescaled coordinate system and axes chartVu UpdateDraw 12 When I use the auto scale and auto axis routines my semi log chart has the log axis scaled using powers of 10 1 10 100 1000 etc as the starting and ending values or as the major tick interval for labeling How do I make my log graphs start at
153. 6 hartObj NOVEMBER 5 Dim yData As Double 10 22 33 44 55 46 33 25 14 9 hartObj APRIL 5 _ ha amp rtObg MAY Siy _ hartObj JUNE 5 _ hartObj JULY 5 _ hnartObj AUGUST 5 hartObj SEPTEMBER 5 _ C C C C C C C C Dim dataset As TimeSimpleDataset New TimeSimpleDataset Sales xData yData Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale AutoScale dataset Using similar logic you can define a TimeSimpleDataset with numeric x values and ChartCalendar y values If you auto scale the coordinate system using that dataset you will end up with a numeric x axis and a time y axis You can control the tightness of the auto scale values about the dataset values using other versions of the TimeCoordinates AutoScale method that take rounding mode parameters Example of auto scaling a TimeCoordinates object using a single dataset and explicit rounding mode parameters simpleTimeScale AutoScale dataset ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR You can auto scale the coordinate bounds using a dataset and then explicitly modify the range the auto scale selected There are methods for setting the minimum and maximum values of the Scaling and Coordinate Systems 130 x and y scales This way you can use the auto scale methods for the values of one scale the y scale in the example below but explicitly set the values for the other scale the x scale in the exampl
154. 60 66 367 373 375 377 378 Symbols sene 60 66 335 336 337 ChartSymbol sess 60 66 335 336 337 Text classes 59 66 161 215 216 220 223 229 232 237 240 305 306 317 318 335 336 337 338 339 343 344 367 368 369 370 372 373 450 452 ChartText 59 66 161 215 216 220 223 229 232 237 240 305 306 315 317 318 335 336 337 338 339 343 344 367 368 369 370 372 373 449 450 452 Tick Mark Class js ge Ee Seo oe BP pro dea ES TickMark urere 63 64 66 195 196 198 TickMark 63 64 66 Time auto scaling ree o teo epe eere acne TimeAutoScale 33 65 231 232 TIME AXIS cutie OE ete PERROS TimeAxis 34 38 40 41 42 58 66 132 135 148 178 179 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 214 215 223 225 227 228 229 231 232 234 242 288 430 438 443 444 449 453 454 Time axis labels eere ertet eene Ge URS UNT TimeAxisLabels40 41 42 66 135 190 214 215 223 225 2271 228 229 231 232 234 288 430 438 471 Appendix Time coordindtes oe eer err et roe Rea e E edd TimeCoordinates 31 32 65 76 88 89 98 110 112 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 157 158 159 163 164 176 177 190 191 195 196 197 198 201 202 2277 228 231 232 250 251 252 254 273 281 282 283 285 287 292 293
155. 7 06 12 7 09 12 7 10 12 71 12 The Open Close box is filled if the open price is greater than the close price Zoom in again and you can see the smooth transition from one day to the next even though the working hours are only a 9 30 to 16 00 subset of the 24 hours of a day Chart Datasets 94 EB Form EuroDollar CandlestickChart FinLogPict OHLCChart OpeninaScreen FinancialOptions TechnicalAnalysis Candlestick Plots in Technical Analysis 12 00 00 13 00 00 14 00 00 15 00 00 9 30 00 11 00 00 12 00 00 13 00 00 14 00 00 15 00 00 7 03 12 The Open Close box is filled if the open price is greater than the close price This is accomplished because of the dual positioning values Position and TimeStamp of the ChartEvent class Each element of a plot object one of the candlestick objects in the plot above is positioned in a simple linear coordinate system starting at 0 and incrementing by 1 for each ChartEvent object In the previous example the first ChartEvent object is has a Position value of 0 0 and the last ChartEvent object has a position of 199 because there are 200 data points in the chart This is what keeps the individual elements of a plot o bject evenly spaced because the plot elements are positioned in the chart using the Position value not the TimeStamp value But the associated x axis EventAxis and x axis labels objects EventAxisLabels look to the TimeStamp property for their values not the Position
156. 73 375 376 RE 30 65 110 112 TimeSimpleDataset 29 33 65 72 76 77 78 79 80 127 128 129 131 134 251 252 254 322 380 453 454 460 461 ToolTips 60 61 65 333 334 335 336 337 338 339 452 datatooltip 17 60 61 65 333 334 335 336 337 338 339 431 439 452 User coordimates nennen User oordinates 31 65 110 112 UserControl 26 277 28 29 65 160 167 381 406 455 UserCoordinates 1 ineditis 31 65 110 112 Visual Basic 19 25 73 74 75 76 77 79 80 81 82 83 84 85 86 87 92 93 94 96 97 98 99 101 102 103 106 114 115 116 117 118 119 120 121 122 125 126 127 128 129 130 131 132 133 134 136 137 138 144 156 157 158 159 160 161 162 164 167 169 170 173 174 175 176 177 179 180 182 183 184 186 187 189 190 195 196 197 198 199 200 202 203 204 206 207 208 209 211 212 218 219 220 221 223 225 226 227 228 229 230 231 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 250 252 253 254 255 256 257 258 259 260 261 262 264 266 267 268 269 271 272 273 274 276 278 279 280 281 282 283 284 285 286 287 289 290 291 293 294 295 296 297 298 299 300 301 303 306 308 310 312 314 317 318 319 320 321 322 324 326 329 330 331 334 335 336 339 341 342 344 347 348 349 350 352 353 354 356 359 362 363 364 365 367 369 370 371 372
157. 8 footer SetColor Colors Black chartVu AddChartObject footer chartVu SetResizeMode ChartObj AUTO RESIZE OBJECTS DataToolTip datatooltip new DataToolTip chartVu TimeLabel xValueTemplate new TimeLabel ChartObj TIMEDATEFORMAT MDY NumericLabel yValueTemplate new NumericLabel ChartObj CURRENCYFORMAT datatooltip SetXValueTemplate xValueTemplate datatooltip SetYValueTemplate yValueTemplate datatooltip SetDataToolTipFormat ChartObj DATA TOOLTIP XY TWOLINE datatooltip GetToolTipSymbol SetColor Colors Red datatooltip SetEnable true chartVu SetCurrentMouseListener datatooltip 0 Reference and initialize the newly created Simple Bars class in the Pagel xaml cs behind code file using using using sing using using using using using using using using using System System System System System System System System System System System System System Using QCChart2D for WPF to Create Collections Generio Ling Text Windows Windows Windows Windows Windows Windows Windows Windows Windows Controls Data Documents Input Media Media Imaging Navigation Shapes namespace WpfBrowserApplicationl summary Interaction logic for Pagel xaml lt summary gt public partial class Pagel Page public Pagel InitializeComponent SimpleBars sb new SimpleBars chartViewl chartViewl Preferre
158. 8 299 300 301 302 303 304 305 306 331 332 336 337 341 342 343 344 347 348 349 350 351 352 353 354 355 356 357 359 360 361 362 363 364 365 366 382 389 392 393 413 422 430 431 438 439 445 446 447 Chart 51 in aer neisit e te o opi Fer reu av ChartTitle 59 66 318 365 367 370 371 372 431 439 ChartAttribute 32 34 65 169 170 174 248 249 250 251 252 253 254 255 256 257 258 259 260 262 263 264 266 267 268 271 272 273 274 275 276 277 278 279 280 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 300 301 302 303 304 305 306 336 337 341 342 343 344 347 348 349 350 351 352 353 354 355 356 359 360 361 362 363 364 365 366 392 393 445 446 ChartCalendar 29 30 33 38 59 63 65 72 76 77 78 79 93 98 99 100 101 106 122 123 124 125 126 127 128 129 130 131 132 133 134 158 191 195 196 197 198 227 228 254 255 263 264 276 281 282 283 285 287 288 292 293 297 299 329 338 339 375 376 452 453 ChartByent x ose ees PORRO chartevent7 9 17 29 30 32 39 65 72 88 89 92 93 94 95 105 106 107 108 139 142 143 144 145 146 148 149 151 153 154 155 202 205 206 236 ChartLabel o enel eei 59 60 66 367 373 ChartObj 65 73 76 79 80 83 87 95 98 100 101 102 105 119 121 122 125 126 127 128 129 131 132 133 134 135 1
159. 9 0 9 Background backgroundl new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 0 120 70 Color FromRgb 0 40 30 ChartObj Y AXIS chartVu AddChartObject backgroundl PieChart thePlotl thePlotl SetStartPieSliceAngle 45 NumericLabel labeltemplate new NumericLabel labeltemplate SetNumericFormat ChartObj CURRENCYFORMAT labeltemplate SetDecimalPos 1 labeltemplate SetTextFont theFont thePlotl SetPlotLabelTemplate labeltemplate thePlotl SetLabelInOut 0 ChartObj PIELABEL INSLICE thePlot1 SetLabelInOut 1 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 2 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 3 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 4 ChartObj PIELABEL INSLICE chartVu AddChartObject thePlotl Visual Basic Dim numPoints As Integer 5 new PieChart pTransforml Datasetl sPieStrings attribs ChartObj PIELABE L OUTSLICE C hartObj PIELABEL STRINGNUMVAL Dim sPieStrings As String Technology Retail Banking Automotive Aerospace Dim attribs 5 As ChartAttribute Dim theFont As ChartFont Dim colorArray As Color Colors Bed Colors Blue Colors Cyan Colors Yellow Colors Green Colors DarkGray Colors LightGray Colors Magenta Colors Orange Colors Pink Dim techLabel As ChartText Dim retailLabel As ChartText Dim bankLabel As ChartText Dim aeroLabel As ChartText Dim autoLabel As Ch
160. 9 66 255 261 263 264 290 291 299 306 307 333 335 336 337 343 344 345 367 373 374 378 448 Open High Low Close plots44 50 66 169 265 296 297 334 OHLCPlot 44 50 66 169 265 284 296 297 334 Physical coordumates seen PhysicalCoordinates 30 31 32 34 65 110 112 113 117 124 135 139 155 156 173 175 176 178 180 182 185 186 187 199 200 203 204 250 253 256 259 262 266 268 272 275 276 277 2 70 280 284 286 289 291 294 296 298 300 303 304 308 311 319 321 324 326 327 330 338 339 341 342 367 368 370 374 375 376 377 381 387 388 390 PhysicalCoordinates 30 31 32 34 65 110 112 113 117 124 135 139 155 156 173 175 176 178 180 182 185 186 187 199 200 203 204 250 253 256 259 262 266 268 272 275 276 277 279 280 284 286 289 291 294 296 298 300 303 304 308 311 319 321 324 326 327 330 338 339 341 342 367 368 370 374 375 376 377 381 387 388 390 Pie El CEET PieChart 19 42 54 66 163 315 341 343 344 345 367 456 PieChart 42 54 66 341 343 344 345 367 Plot object classes 42 43 66 72 161 162 168 249 253 255 259 261 266 268 272 274 276 278 280 283 286 288 291 293 296 298 300 303 338 339 341 3477 349 350 352 353 360 361 367 451 457 461 ChartPlot 42 43 66 72 161 162 168 249 253 255 259 261
161. ARD TIMEDATEFORMAT MDY TIMEDATEFORMAT DMY TIMEDATEFORMAT MY TIMEDATEFORMAT Q TIMEDATEFORMAT MMMM TIMEDATEFORMAT MMM TIMEDATEFORMAT M TIMEDATEFORMAT DDDD TIMEDATEFORMAT DDD TIMEDATEFORMAT D TIMEDATEFORMAT Y TIMEDATEFORMAT MDY2000 TIMEDATEFORMAT DMY2000 TIMEDATEFORMAT MY 2000 TIMEDATEFORMAT Y2000 TIMEDATEFORMAT MDY HMS TIMEDATEFORMAT DMY HMS TIMEDATEFORMAT MDY HM TIMEDATEFORMAT DMY HM Simple time axis labels example C Define a Time coordinate system ChartCalendar xMin new ChartCalendar 1996 ChartObj FEBRUARY 5 ChartCalendar xMax new ChartCalendar 2002 ChartObj JANUARY 5 double yMin 0 double yMax 105 LinearAxis yAxis TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed TimeAxis xAxis new TimeAxis simpleTimeScale Create the linear y axis new LinearAxis simpleTimeScale ChartObj Y AXIS TimeAxisLabels xAxisLabels new TimeAxisLabels xAxis umericAxisLabels yAxisLabels new NumericAxisLabels yAxis Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis chartVu AddChartObject xAxisLabels chartVu AddChartObject yAxisLabels Visual Basic Axis Labels Define a Time coordinate system Dim xMin As ChartCa
162. AT NEXTTODAYSTRING chartVu AddChartObject xAxisLab NumericAxisLabels yAxisLab new NumericAxisLabels yAxis yAxisLab SetTextFont theFont chartVu AddChartObject yAxisLab Visual Basic Dim x1 As TimeSpan New TimeSpan numPoints 1 Dim yl As Double New Double numPoints 1 Dim y2 As Double New Double numPoints 1 Dim i As Integer For i 0 To numPoints 1 Axis Labels 234 Next theFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal FontWeights Bold Dim Datasetl As New ElapsedTimeSimpleDataset First xl yl Dim Dataset2 As New ElapsedTimeSimpleDataset Second x1 y2 Dim pTransforml As New ElapsedTimeCoordinates ChartObj ELAPSEDTIME SCALE _ ChartObj LINEAR SCALE pTransforml ElapsedTimeAutoScale Dataset2 ChartObj X AXIS _ ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 7R Dim xAxis As New ElapsedTimeAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS chartVu AddChartObject yAxis Dim xAxisLab As New ElapsedTimeAxisLabels xAxis xAxisLab SetTextFont theFont xAxisLab AxisLabelsDayFormat ChartObj ELAPSEDTIMEFORMAT NEXTTODAYSTRING chartVu AddChartObject xAxisLab Dim yAxisLab As New NumericAxisLabels yAxis yAxisLab SetTextFont theFont chartVu AddChartObject yAxisLab Event Axis Labels Class EventAxisLabels
163. AddLegendItem ByVal stext As String ByVal symbolshape As PathGeometry ByVal chartobj As GraphObj ByVal thefont As C As Integer Overloads Public Func hartFont tion AddLegendItem ByVal stext As String ByVal nsymbol As Integer ByVal chartobj As ChartPlot ByVal ngroup As Integer ByVal thefont As C As Integer C public int AddLegendI string stext int nsymbol ChartAttribute att ChartFont thefont E public int AddLegendI string stext PathGeometry symbo ChartAttribute att ChartFont thefont public int AddLegendI LegendItem legendi E public int AddLegendI string stext int nsymbol GraphObj chartobj ChartFont thefont hartFont tem rib tem lshape FLD tem tem tem Legends 362 363 Legends public int AddLegendItem string stext PathGeometry symbolshape GraphObj chartobj ChartFont thefont public int AddLegendItem string stext int nsymbol ChartPlot echartobTj int ngroup ChartFont thefont stext Specifies the text string for the legend item nsymbol Specifies the symbol for the legend item Use one of the chart symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR or CIRCLE chartobj The color and fill attributes for the legend item are copied from the attributes of this ChartPlot object symbolshape Specifies a user defined shape to use as the legend item sym
164. AddPopulation SanFrancisco 3 thePlotl AddPopulation Boston 4 thePlotl AddPopulation Pittsburgh 5 thePlotl BWFormat 1 thePlotl BarDatapointLabelPosition ChartObj CENTERED BAR thePlotl PlotLabelTemplate TextFont new ChartFont Microsoft Sans Serif FontStyles Normal thePlotl PlotLabelTemplate DecimalPos 1 thePlotl ShowDatapointValue true label outliers thePlotl ScatterPlot ShowDatapointValue true thePlotl AutoBWChart chartVu AddChartObject thePlot1 Visual Basic New York City Dim NYCity As Double 31 5 33 6 42 4 52 5 62 7 71 6 130 T98 215 5 bS 2 Oreby 4726 36 6 Houston Dim Houston As Double 50 4 53 9 60 6 68 3 74 5 80 4 _ Dy 100 BS 58 82 35 78 2 9 9 bl 53 5 San Francisco Dim SanFrancisco As Double 48 7 52 2 53 2 55 6 58 1 Top _ Elop Bost ETA 4 5 Bl 54 85 49 4 Boston Dim Boston As Double 32 4 53 9 44 6 58 3 64 5 70 4 tog 90 Taob Wiese SOs 948 41 33 5 Simple Plot Objects 274 Pittsburgh Dim Pittsburgh As Double 41 4 54 24 6 38 3 44 5 61 4 _ 63 105 72 89 72 23 68 2 49 5 _ 41 3345 Dim defaultattrib As New ChartAttribute Colors Black 1 DashStyles Solid Colors Red defaultattrib SetFillFlag True Dim fillattrib As New ChartAttribute Colors Black 3 DashStyles Solid Colors Red fillattrib SetFillFlag Tr e thePlotl New BoxWhiskerPlot pTransforml 0 25 fillattrib hePlotl AddPopulation NYCity 1 heP
165. Angle method The PieChart CalcNearestPoint method can find the pie ring wedge nearest a specified point usually the result of a mouse click See the PieCharts SimplePieChart example program Simple pie chart extracted from the example program PieCharts class SimplePieChart A simlar example for a RingChart is found in the example program NewDemosRev2 SimpleRingChart C int numPoints 5 String ePieStrings Technology Retail Banking Automotive Aerospace hartAttribute attribs new ChartAttribute 5 hartFont theFont Color colorArray Colors Red Colors Blue Colors CyanD Colors Yellow Colors Green Colors DarkGray Colors LightGray Colors Magenta Colors Orange Colors Pink ChartText techLabel ChartText retailLabel ChartText bankLabel Q e PES hartText aeroLabel hartText autoLabel theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold double x1 double yl i e i new double numPoints new double numPoints for i20 i lt numPoints i attribs i new ChartAttribute Colors Black 1 0 attribs 1 SetFillColot colorA rray i xl 0 5 8 vi 0 Q27 xl pi 2 27 wett 0 07 xl 2 3 5 yl 2 0 0 x1 3 4 2 y1 3 0 0 x1 4 3 7 y1 4 0 0 SimpleDataset Datasetl new SimpleDataset First x1l yl CartesianCoordinates pTransforml new CartesianCoordinates plransforml SetGraphBorderDiagonal 0 1 2
166. As ChartAttribute Ct public StackedLinePlot PhysicalCoordinates transform GroupDataset dataset ChartAttribute attribs L transform The coordinate system for the new StackedLinePlot object dataset The stacked line plot represents the values in this group dataset attribs An array of ChartAttribute objects sized the same as the number of groups in the dataset specify the attributes line color and line style for each group of the stacked line graph The attributes for each group can set or modified using the SetSegment methods where the segment number parameter corresponds to the group number These methods include SetSegmentAttributes SetSegmentFillColor SetSegmentLineColor and SetSegmentColors 303 Simple Plot Objects Stacked line plot example extracted from the example program MultiLinePlots class Stacked Lines C int numPoints 100 int numGroups 7 double xl new double numPoints double yl new double numGroups numPoints Initialize data theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold GroupDataset Datasetl new GroupDataset First x1 y1 Datasetl SetStackMode ChartObj AUTOAXES STACKED CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartX 0 pTransforml SetScaleStartY
167. As LinearAxis New LinearAxis logYScale ChartObj X AXIS Dim yAxis As LogAxis New LogAxis logYScale ChartObj Y AXIS Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Should want to customize the axis you can add the following lines after the yAxis object is created Custom logarithmic axis example C Place the y axis on the right side of the graph with tick marks point towards the right double yAxisIntercept 1000 Major tick marks at 0 2 2 20 200 and 2000 double yAxisOrigin 0 2 In addition to major tick marks labels flagged for some minor tick marks int yAxisLogFormat 1 double yAxisMinorTickLength 5 double yAxisMajorTickLength 10 Axes 192 int yAxisTickDirection ChartObj AXIS MAX yAxis SetAxisIntercept yAxisIntercept yAxis SetAxisTicks yAxisOrigin yAxisLogFormat yAxisMinorTickLength yAxisMajorTickLength yAxisTickDirection Visual Basic Place the y axis on the right side of the graph with tick marks point towards the right Dim yAxisIntercept As Double 1000 yAxisOrigin Major tick marks at 0 2 2 20 200 and 2000 Dim yAxisOrigin As Double 0 2 In addition to major tick marks labels flagged for some minor tick marks Dim yAxisLogFormat As Integer 1 Dim yAxisMinorTickLength As Double E Dim yAxi
168. As TimeSimpleDataset _ Chart Datasets 82 New TimeSimpleDataset csvDataFile LineFill Datasetl csv 0 0 Write out dataset as a CVS file Datasetl WriteTimeSimpleDataset csvDataFile LineFill Datasetl csv Read it back in just as a test Datasetl ReadTimeSimpleDataset csvDataFile LineFill Datasetl csv 0 0 Simple Elapsed Time Dataset Class ElapsedTimeSimpleDataset ChartObj ChartDataset SimpleDataset ElapsedTimeSimpleDataset The ElapsedTimeSimpleDataset class uses TimeSpan values as one set of the x or y values and floating point values as the other TimeSpan values are actually stored internally as their equivalent millisecond values It has two main constructors The following constructor creates a time dataset using the x and y values stored in arrays ElapsedTimeSimpleDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As TimeSpan _ ByVal y As Double Overloads Public Sub New _ ByVal sname As String ByVal x As Double ByVal y As TimeSpan _ Cf public ElapsedTimeSimpleDataset string sname TimeSpan 3 double y LE public ElapsedTimeSimpleDataset string sname double x TimeSpan Fi sname Specifies the name of the dataset 83 Chart Datasets x An array that specifies the x values either doubles or TimeSpan objects of a dataset y An array that specifies the y values of a dataset eithe
169. AxesLabels SetAxisLabelsDecimalPos 2 chartVu AddChartObject antennaAxesLabels Visual Basic Dim minvalue As Double 40 Dim maxvalue As Double 20 Dim antennascale As AntennaCoordinates _ New AntennaCoordinates minvalue maxvalue Dim antennaAxes As AntennaAxes New AntennaAxes antennascale chartVu AddChartObject antennaAxes Dim antennaAxesLabels As AntennaAxesLabels New AntennaAxesLabels antennaAxes antennaAxesLabels SetAxisLabelsFormat ChartObj DECIMALFORMAT antennaAxesLabels SetAxisLabelsDecimalPos 2 chartVu AddChartObject antennaAxesLabels 9 Axis Grids ChartGrid PolarAxesGrid AntennaGrid Axis grids are solid dotted or dashed lines aligned with the axis tick marks and which extend across the plot area of a graph Axis grids are a separate class from the axis classes An axis class i e any class derived from Axis can exist independent of a grid Many graphs use axes that do not have grids For example the y axis may have a grid while the x axis may not The axis grid classes are not independent and they require valid references to both an x and y axis The three axis grid classes are ChartGrid PolarGrid and AntennaGrid Linear Logarithmic and Time Axis Grids Class ChartGrid GraphObj ChartGrid The ChartGrid class defines a grid for LinearAxis LogAxis and TimeAxis classes A grid object needs a reference to both an x and y axis The grid aligns with the tick marks of one ax
170. Axis Labels Elapsed Time Vertical Event Axis Numeric Multiline Event Based Charting for Time Stamped Applications 3 000 Millions 13 00 00 14 00 00 15 00 00 9 30 00 11 00 00 12 00 00 7 11 12 7 12 12 All plot types will cross time discontinuities without gaps Note how the plot still captures the crossover between 16 00 7 12 12 and 9 30 7 13 12 without a gap The same would be true if there was a weekend or holiday or even a lunch break between adjacent data points Below is an example of how multiple datasets are attached to an EventCoordinates system C EventSimpleDataset Datasetl new EventSimpleDataset Actual Sales cevl EventSimpleDataset Dataset2 new EventSimpleDataset Forecast Sales cev2 EventSimpleDataset Dataset3 new EventSimpleDataset Actual Sales cev3 EventSimpleDataset Dataset4 new EventSimpleDataset Forecast Sales cev4 EventSimpleDataset DatasetArray Datasetl Dataset2 Dataset3 Dataset4 EventCoordinates pTransforml new EventCoordinates DatasetArray VB Dim Datasetl As new EventSimpleDataset Actual Sales cevl Dim Dataset2 new EventSimpleDataset Forecast Sales cev2 Dim Dataset3 new EventSimpleDataset Actual Sales cev3 Dim Dataset4 new EventSimpleDataset Forecast Sales cev4 Dim DatasetArray As EventSimpleDataset Datasetl Dataset2 Dataset3 Dataset4 Dim EventCoordinates pTransforml new EventCoordinates D
171. Axis simpleScale ChartObj X AXIS LinearAxis yAxis new LinearAxis simpleScale ChartObj Y AXIS Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Visual Basic Define the coordinate system Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax As Double 15 Dim simpleScale As CartesianCoordinates _ New CartesianCoordinates xMin yMin xMax yMax Create the x and y axes Dim xAxis As LinearAxis New LinearAxis simpleScale ChartObj X AXIS Dim yAxis As LinearAxis New LinearAxis simpleScale ChartObj Y AXIS chartVu Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Customize the axis by adding the following lines after the creation of the xAxis object Custom linear axis example C double xAxisIntercept 5 double xAxisOrigin 0 0 double xAxisMinorTickSpace 1 0 int xAxisMinorTicksPerMajor 5 double xAxisMinorTickLength 5 double xAxisMajorTickLength 10 int xAxisTickDirection ChartObj AXIS MIN xAxis SetAxisIntercept xAxisIntercept xAxis SetAxisTicks xAxisOrigin xAxisMinorTickSpace xAxisMinorTicksPerMajor xAxisMinorTickLength xAxisMajorTickL
172. COND 1 minute major tick mark spacing 1 second minor tick mark spacing TIMEAXIS 30SECONDSECOND 30 second major tick mark spacing 1 second minor tick mark spacing TIMEAXIS ISSECONDSECOND 15 second major tick mark spacing 1 second minor tick mark spacing TIMEAXIS IOSECONDSECOND 10 second major tick mark spacing 1 second minor tick mark spacing TIMEAXIS SSECONDSECOND 5 second major tick mark spacing 1 second minor tick mark spacing TIMEAXIS 2SECONDSECOND 2 second major tick mark spacing 1 second minor tick mark spacing TIMEAXIS SECOND 1 second major tick mark spacing Sunday is the first day of the week for 7 day weeks while Monday is the first day of the week for 5 day weeks It may not be immediately obvious but the major tick marks for date time scales do not necessarily fall on equal intervals If the tick marks are set to the TIMEAXIS MONTHDAY value there may be 28 29 30 or 31 days between each months major tick mark In most cases the major tick mark coincides with a minor tick mark For example if the TIMEAXIS MONTHDAY setting is used the major tick mark for a month falls at the first day of the month coinciding with the minor tick mark for that day If the TIMEAXIS WEEKDAY setting is used the major tick mark for a WEEK falls at the first day of the week coinciding with the minor tick mark for that day Situations where the major and minor tick marks do not coincide involve weeks as minor tick marks If the TIMEAXIS
173. Chart Axes There are five concrete axis types supported by the QCChart2D for WPF library Axis Type Class Linear LinearAxis Logarithmic LogAxis Date time TimeAxis ElapsedTime ElapsedTimeAxis Event EventAxis Polar PolarAxes Antenna AntennaAxes The seven axis types derive directly or indirectly from the Axis abstract base class that provides a core set of properties and methods All axis objects use the same set of methods found in the base GraphObj class to set the drawing properties of the lines used to draw the axis line and tick marks The default values use a black solid line of thickness 1 0 Change the default values using the GraphObj methods below SetColor method Visual Basic Overridable Public Sub SetColor ByVal rgbcolor As Color Ct public virtual void SetColor Color rebcoior LE SetLineWidth method Visual Basic Overridable Public Sub SetLineWidth ByVal linewidth As Double Ct public virtual void SetLineWidth Axes 182 double linewidth SetLineStyle method Visual Basic Overridable Public Sub SetLineStyle _ ByVal linestyle As DashStyle C public virtual void SetLineStyle DashStyle linestyle LE rgbcolor Sets the primary line color for the chart object linewidth Sets the line width in device coordinates for the chart object linestyle Sets the line style for the chart object Use one of the Net DashStyles enumerated constants Dash DashDot Das
174. Chart OB Iectss EE E 318 Moving Simple Plot Object Data Poms eebe ER 320 Moving the Chart Coordinate Eege te pue tet pH ed ien e 322 15 Zooming and NEST TIGA ION eae dede rp otra pis er 325 Simple Zooming of a single physical coordinate system 325 Super Zooming of multiple physical coordinate systems essen 328 Limiting theZoom Range utes E URN eb ru et titulus een DNUS sede c ea E Op iUd e Line 331 Magnifying a portion of a chart in a separate wimdow sess 331 16 Data E EE 335 Simple D ta ET 335 Custom Tooltip displays EE 339 VASE GIOCO SIR MER ege eege 343 Usine th Pre Chart RR 343 IS Polar and Antenna Plots 3 29 atio i Dav ae ite residue med e vt ENEE deck 348 Pol gl 00 Se se Mm RM M dE d 349 Antenna PIOS eec oc hose as Se sts OR Ra Macte RUM M oe e ttu ne Ed Sd 352 E ENEE 360 e ENER 360 Bubble Plot El cessere Ee 364 DO Re TASS t bt dE UE e M ui 369 Simple Text MCI T westavuceteendsdaaedabh 369 Chart Title C 888684 ca terea e oar hod waa decane tra e Este Pad E Ger E e dic n ena Bev ess o sepe e uS 372 Numeric Time Elapsed Time and String Label Classes 375 DMS Da taset VI WTS sion e eek uter eee td alta Beets cn ccc aM MED 382 22 Adding Lines Shapes Images and Arrows to a Chat 389 Genere SADE BL T HN 389 Chart Image CASS vedas sda Pate c Aquis ale at NER ee NS Ld uf lt aul Deu EA 392 Genen Arrow CASS odd eu a rbi at toe B s Er Md LEE M Aq 393 23 File and Printer Rend
175. ChartAttribute attribl new ChartAttribute Colors Red 1 ChartObj DashStyles Solid Colors Red attribl SetFillFlag true OHLCPlot thePlotl new OHLCPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj DAY OF YEAR 0 75 attribl chartVu AddChartObject thePlotl1 Visual Basic Dim Datasetl As New TimeGroupDataset Stock Data xValues stockPriceData pTransforml New TimeCoordinates pTransforml SetWeekType weekmode pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Red 1 DashStyles Solid Colors Red attribl SetFillFlag True thePlotl New OHLCPlot pTransforml Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj DAY_OF_YEAR 0 75 _ attribl thePlotl SetFastClipMode ChartObj FASTCLIP X chartVu AddChartObject thePlotl Note how the ChartCalendar GetCalendarWidthValue method calculates the width of the bars as a function of time in this case a width of 0 75 days Stacked Bar Plots Class StackedBarPlot Simple Plot Objects 200 GraphObj ChartPlot GroupPlot StackedBarPlot The StackedBarPlot class extends the GroupPlot class and displays data in stacked bar format In a stacked bar plot each group is stacked on top of one another each group bar a cumulative sum of the related group items before it StackedBarPlot constructor Visual Bas
176. ChartText PhysicalCoordinates transform ChartFont tfont string tstring double x double y int npostype int iust int yjust int rotation Ve public ChartText PhysicalCoordinates transform Chartkont tfont String tstring double x double y int npostype transform tfont Tstring X y npostype xjust yjust rotation Places the text in the coordinate system defined by transform A reference to a ChartFont object A reference to a string object Specifies the x value of the text position Specifies the y value of the text position Specifies the if the position of the text is specified in physical coordinates normalized coordinates or WPF device coordinates Use one of the position constants DEN POS PHYS POS NORM GRAPH POS NORM PLOT POS Specifies the horizontal justification of the text Use one of the text justification constants JUSTIFY MIN JUSTIFY CENTER or JUSTIFY MAX Specifies the vertical justification of the text Use one of the text justification constants JUSTIFY MIN JUSTIFY CENTER or JUSTIFY MAX The rotation 360 to 360 degrees of the text in the normal viewing plane Place text in is a time coordinate system TimeCoordinates by converting the time x position to milliseconds and using the milliseconds as the x position value ChartText example extracted from the example program MultiLinePlots class Multilines 371 Text Classes
177. D 9 33 0 For i 0 To nNumPnts 1 Dim position As Double i 1 xValues i DirectCast currentdate Clone ChartCalendar If i gt 0 Then stockPriceData 3 2 0 5 ChartSupport GetRandomDouble close StockPriceData 0 2 0 5 ChartSupport GetRandomDouble open minval Math Min stockPriceData 3 stockPriceData 0 maxval Math Max stockPriceData 3 stockPriceData 0 StockPriceData 1 maxval 1 5 ChartSupport GetRandomDouble T high low stockPriceData 2 minval 1 5 ChartSupport GetRandomDouble End If currentEvent New ChartEvent xValues i position stockPriceData currentEvent AxisLabel XXX amp position ToString currentEvent ToolTip ToolTip amp position ToString eventArray i currentEvent currentdate Add incrementbase increment If currentdate Get ChartObj HOUR OF DAY gt 16 Then currentdate Add ChartObj DAY OF YEAR 1 currentdate SetTOD 9 30 0 End If Next Dim Datasetl As New EventGroupDataset Stock Data eventArray 4 Dim Dataset2 As EventSimpleDataset Datasetl ConvertToEventSimpleDataset 1 111 Chart Datasets Dim pTransforml As New EventCoordinates Datasetl 4 Scaling and Coordinate Systems ChartScale LinearScale LogScale TimeScale ElapsedTimeScale EventScale UserCoordinates WorldCoordinates WorkingCoordinates PhysicalCoordinates CartesianCoordinates PolarCoordinates AntennaCoordinates EventCoordinate
178. FloatingStackedBarPlot object have the same width FloatingStackedBarPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal rbarwidth As Double _ ByVal attrib As ChartAttribute _ ByVal nbarjust As Integer _ C4 public FloatingStackedBarPlot PhysicalCoordinates transform GroupDataset dataset double rbarwidth ChartAttribute attrib int nbarjust transform The coordinate system for the new FloatingStackedBarPlot object dataset The starting value for each stacked bar is Y 0 Each bar after that is defined by the succeeding value in the group value array Y 1 Y 2 rbarwidth The width of the floating bars in units of the independent axis attrib An array of ChartAttribute specifying the color for each bar The number of colors and the length of the array should be one less than the number of groups in the source dataset nbarjust Specifies the justification with respect to the independent data value Use one of the justification constants JUSTIFY MIN JUSTIFY CENTER JUSTIFY MAX FloatingStackedBarPlot plots can be used in place of OHLCPlots or CandlestickPlots for the display of financial information See the example below Floating stacked bar plot example for displaying stock data Extracted from the NewDemosRev2 FloatingStackedBars example 287 Simple Plot Objects C TimeGroupDataset Datasetl ne
179. GER 459 FAQs 17 How do I change the order the chart objects are drawn For example I want one of my grid objects to be drawn under the charts line plot objects and another grid object to be drawn top of the charts line plot objects There are two ordering methods used to render chart objects The first method renders the objects in order as added to the ChartView object Objects added to the view last are drawn on top of objects added first The second method renders the objects according to their z order Objects with the lowest z order values are rendered first Objects with equal z order values are rendered in the ordered they are added to the ChartView object The second method z order rendering is the default method of object rendering used by the ChartView class This default behavior can be changed by call the ChartView SetZOrderSortEnable false method You can change the default z order value on an object by object basis Call the GraphObj SetZOrder method to change the z order for any given object See the section in the manual titled Rendering Order of GraphObj Objects for information about the default z values for all chart objects The example below sets the z order value of grid1 to something less than the default value 50 of ChartPlot objects and the z order value of grid2 to something greater than the default value C ChartView chartVu new ChartView ChartGrid gridl new ChartGrid xAxis yAxis ChartOb
180. GetRect rectpath AddGeometry recgeo Dim linearRegionShape As New ChartShape pTransforml rectpath ChartObj PHYS POS 0 0 0 0 ChartObj PHYS POS 0 linearRegionShape SetChartObjAttributes attrib2 chartVu AddChartObject linearRegionShape ChartShape example extracted from the example program ScatterPlots class LabeledDatapoints C PathGeometry linepath new PathGeometry Point startp new Polnt 0 l 0 1 Point stopp new Point 0 9 0 1 LineGeometry linegeo new LineGeometry startp stopp linepath AddGeometry linegeo ChartShape titleLineShape new ChartShape pTransforml linepath ChartObj NORM GRAPH POS 0 0 0 0 ChartObj NORM GRAPH POS 0 titleLineShape SetLineWidth 3 chartVu AddChartObject titleLineShape Visual Basic Dim linepath As New PathGeometry Dim startp As New Point 0 1 0 1 Dim stopp As New Point 0 9 0 1 Dim linegeo As New LineGeometry startp stopp linepath AddGeometry linegeo Dim titleLineShape As New ChartShape pTransforml linepath ChartObj NORM GRAPH POS 0 0 0 0 ChartObj NORM GRAPH POS 0 titleLineShape SetLineWidth 3 chartVu AddChartObject titleLineShape Lines Shapes Images and Arrows 392 Chart Image Class Class ChartImage GraphObj ChartImage The ChartImage class will place a System Windows Image object anywhere in a chart It can be a small element of the chart inside or outside of the plot area or it can be sized
181. Grid GraphObj ChartGrid PolarGrid The PolarGrid class defines a grid for polar axes The polar grid consists of two parts the magnitude grid and the polar angle grid The magnitude grid consists of a group of concentric circles centered on the origin and aligned with the x and y axis tick marks The polar angle grid consists of a group of radial lines aligned with the angle tick marks and starting at the origin extending to the outer polar angle circle PolarGrid constructors There are two PolarGrid constructors Visual Basic Overloads Public Sub New _ ByVal polaraxis As PolarAxes _ ByVal gridtype As Integer _ Overloads Public Sub New _ ByVal polaraxis As PolarAxes _ ByVal gridmagtype As Integer _ ByVal gridangletype As Integer Axis Grids 248 Ct public PolarGrid PolarAxes polaraxis int gridtype public PolarGrid PolarAxes polaraxis int gridmagtype int gridangletype polaraxis The polar axes associated with the grid gridtype Specifies if the magnitude and angular grid aligns with the major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID ALL of the reference polar axis gridmagtype Specifies if the magnitude grid aligns with the major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID_ALL of the reference polar axis gridangletype Specifies if the angular grid aligns with the
182. HART SUBHEAD or CHART FOOTER ntitlepos The title can be centered with respect to the entire graph area or the plot area Use one of the title position constants CENTER GRAPH or CENTER PLOT ChartTitle example extracted from the example program SimpleLinePlots class LineFill C ChartFont theTitleFont new ChartFont SansSerif 16 FontStyles Normal FontWeights Bold mainTitle new ChartTitle pTransforml theTitleFont Profits are Expected to Rise mainTitle SetTitleType ChartObj CHART HEADER mainTitle SetTitlePosition ChartObj CENTER GRAPH mainTitle SetColor Colors White chartVu AddChartObject mainTitle ChartFont theFooterFont new ChartFont SansSerif 9 FontStyles Normal FontWeights Bold footer new ChartTitle pTransforml theFooterFont Graphs can have background gradients semi transparent colors legends titles and data tooltips footer SetTitleType ChartObj CHART FOOTER footer SetTitlePosition ChartObj CENTER GRAFH footer SetTitleOffset 8 footer SetColor Colors White chartVu AddChartObject footer Visual Basic Dim theTitleFont As New ChartFont SansSerif 16 FontStyles Normal FontWeights Bold mainTitle New ChartTitle pTransforml theTitleFont _ Profits are Expected to Rise mainTitle SetTitleType ChartObj CHART HEADER mainTitle SetTitlePosition ChartObj CENTER GRAPH mainTitle SetColor Colors White chartVu AddChartObject mainTitle Dim theFooterFont As
183. HeaderFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal da da tasetviewer GridCellFont New ChartFont Microsoft Sans Serif 9 FontStyles Normal tasetviewer SyncChart True Vertical Orientation DatasetViewer example extracted from the example program NewDemosRev2 VerticalDatasetViewerChart lt TabItem Header Vertical DatasetViewerChart Name tabItem7 gt lt Grid gt lt Grid ColumnDefinitions gt lt ColumnDefinition Width 3 gt lt ColumnDefinition Width gt lt Grid ColumnDefinitions gt lt my ChartView Grid Column 0 Margin 18 11 16 6 Name chartView7 gt lt my DatasetViewer Grid Column 1 Margin 18 11 16 6 Name datasetViewer3 gt lt Grid gt lt TablItem gt Text Classes 388 C Rectangle2D posrect new Rectangle2D 0 0 0 0 1 0 1 0 int rows 10 columns 2 startindex 0 datasetviewer InitDatasetViewer chartVu pTransforml posrect Datasetl rows columns startindex ChartObj VERT DIR datasetviewer EnableEdit true datasetviewer DatasetTable TableBackgroundMode ChartGeneralizedTableDisplay TABLE SINGLE COLOR BACKGROUND GRIDCELL datasetviewer UseStripedGridBackground true Visual Basic Dim posrect As New Rectangle2D 0 0 0 0 1 0 1 0 Dim rows As Integer 10 columns As Integer 2 startindex As Integer 0 datasetviewer InitDatasetViewer chartVu 2 pTransforml posrect Datasetl rows columns _ startindex ChartObj
184. Image graph imageencoder Dim bitmap As RenderTargetBitmap bufimage GetRenderedBitmap imagel is defined in XAML code as an Image control and placed in fourth tab imagel Source bitmap End Sub 24 Using QCChart2D for WPF to Create Windows Applications The primary view class of the QCChart2D library is the ChartView class The ChartView class is derived from the WPF System Windows Controls UserControl class It has the properties and methods of the underlying UserControl class Follow the following steps in order to incorporate the QCChart2D classes into your program This is not the only way to add charts to an application In general any technique that works with UserControl derived classes will work We found the technique described below this to be the most flexible Visual CZ for Net Ifyou do not already have an application program project create one using the Visual Studio project wizard File New Project Visual C Projects WPF Application On the left select a project type of Visual C Windows Give the project a unique name In our examples wpf folder this example is the WPFChartApplicationl so give your example a different name succ as WPFApplicationl You will end with a basic WPF based application For purposes of this example the chart will placed in the initial default window 409 Using QCChart2D for WPF to Create Windows Applications New Project Ie Project types Templates NET Framework
185. Is the QCChart2D for WPF software backward compatible with the Mei Forms version of QCChart2D Yes the QCChart2D for WPF software is generally source code compatible with earlier Forms based QCChart2D for Net There is a comprehensive list of changes you will need to make to your source at the end of Chapter 2 You should have no problems recreating any charts that you created using our older Net forms software 2 How do you create a chart with multiple coordinate systems and axes A chart can have as many coordinate systems and axes as you want A single coordinate system can have one or more x and or y axes The most common use for multiple axes in a single coordinate system is to place y axes on both the left and the right sides of a chart and x axes above and below The left and bottom axes usually have numeric or date labels and the top and right axes just tick marks This does not have to be the case though every axis can have axis labels if you want In general the axis position in the chart is determined by its intercept The default value of the intercept is set to the minimums of the coordinate system that the axis is placed in Adjusting the intercept using the SetAxisIntercept method changes the position of the axis in the chart The axis intercept value is set using units of the coordinate system at right angles to the axis The example below extracted from the LineFill example places y axes on both the left and right of the cha
186. KER ALLPOINTS option unless you are working with a very small number of data points otherwise the labels will all overlap one another Box and whisker plot example extracted from the example program NewDemosRev2 BoxAndWhiskerChart C New York City double NYCity 31 5 33 060 42 4 52 5 02 7 71 0 130 76 8 75 5 68 2 57 5 47 5 35 5 ka Houston 273 Simple Plot Objects double Houston 50 4 53 9 b U b 589 2 74 5 90 4 Sp LOU BZ2 b 82 2 Terap b9 b 61 52 5 ks San Francisco double SanFrancisco D 40 7 S 5373r 55 8 BO l WE Blaby 2 7 3 7 4 5 Bl 54 8 49 4 Bouston double Boston 32 4 53 9 44 6 580 3 64 5 70 4 73 90 72 6 72 3 58 2 49 95 Al 33 5 FF Pittsburgh double Pittsburgh 41 4 54 24 b 308 32 44 5 bl 4 b3 105p 172 5 72 2 59 2 49 6 41 33 5 As double minval 0 0 maxval 0 0 ine i gt int numpnts NYCity Length Houston Length SanFrancisco Length Boston Length Pittsburgh Length DashStyles Solid 8 ChartAttribute defaultattrib new ChartAttribute Colors Black 1 Colors Red defaultattrib SetFillFlag true ChartAttribute fillattrib new ChartAttribute Colors Black 3 DashStyles Solid Colors Red fillattrib SetFillFlag true BoxWhiskerPlot thePlotl new BoxWhiskerPlot pTransforml 0 25 fillattrib thePlotl AddPopulation NYCity 1 thePlotl AddPopulation Houston 2 thePlotl
187. LinearAxis yAxis new LinearAxis simpleTimeScale ChartObj Y AXIS Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Visual Basic Define a Time coordinate system Dim xMin As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 Dim xMax As ChartCalendar New ChartCalendar 2002 ChartObj JANUARY 5 Dim yMin As Double 0 Dim yMax As Double 105 Dim xAxisTickMarkFormat As Integer ChartObj TIMEAXIS MONTHWEEK Dim xAxisMinorTickLength As Double 2 Dim xAxisMajorTickLength As Double 10 Dim xAxisTickDirection As Integer ChartObj AXIS MIN Dim simpleTimeScale As TimeCoordinates simpleTimeScale New TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed Dim xAxis As TimeAxis New TimeAxis simpleTimeScale xAxisTickMarkFormat xAxis SetAxisTicksAttributes xAxisMinorTickLength _ xAxisMajorTickLength xAxisTickDirection Create the linear y axis Dim yAxis As LinearAxis New LinearAxis simpleTimeScale ChartObj Y AXIS Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView 201 Axes Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Elapsed Time Axes Class ElapsedTimeAxis GraphObj Axis LinearAxis t
188. MONTHWEEK setting is used the first day of the month may or may not correspond to the first day of the week Sunday or Monday Major tick marks fall on the first day of each month and minor tick marks fall on the first day of each week Combine these irregularities with a 5 or 7 day workweek option and the non 24 hour day option and you can see that a generalized algorithm to define the positions of tick marks is a difficult task For example you are a stock trader and you want to track the price volume characteristics of a stock from the last 5 minutes of the regular trading day to the first 5 minutes of the next regular trading day specifically from 3 55 PM Friday Sept 29 2000 to 9 35 AM Monday Oct 2 2000 The time range under consideration is only 10 minutes since the market closes Friday at 4 00 PM and opens Monday at 9 30 PM The resulting axis should reflect this 197 Axes 10 minute range even though the actual time elapsed is 3 930 minutes You should be able to specify the axis minimum and maximum values using the actual dates and times You also need to set a 5 day workweek mode and establish a day that has a time range of 9 30 AM to 4 00 PM Date Time Axis Intercept A date time axis has an intercept value the same as a linear axis Since the intercept value is specified using the scale of the perpendicular axis if the perpendicular axis is linear the intercept value can be positive negative or 0 0 If the perpendicular a
189. MouseButton Left magnifyObj SetEnable True magnifyObj UpdateDuringDrag True magniViewl SetCurrentMouseListener magnifyObj magniViewl PreferredSize New Size 600 300 magniView2 PreferredSize New Size 600 300 End Sub tasetl Dataset2 tasetl Dataset2 magnify icon is displayed full scale in the bottom graph L Click and drag on the top graph The area bounded by the mouse Dn True target classes magniView2 magniViewChartl pTransforml DashStyles Solid 16 Data Tooltips DataToolTip Tooltip is a catchall phrase for a popup window that displays useful information about an object A data tooltip is a popup box that displays the value of a data point in a chart The data value can consist of the x value the y value or both values for a given point in a chart The tooltip values are displayed using the numeric and time formats supported by the NumericLabel and TimeLabel classes Simple Data Tooltips Class DataToolTip MouseListener t DataToolTip The DataToolTip class implements Net mouse event delegates The ChartView class hooks into the its drawing surface MouseDown MouseUp and MouseMove events The default operation of the DataToolTip class traps the mouse pressed event It calculates which chart object intersects the mouse cursor and which data points for the intersecting object are closest Next it pops up a window and displays the x value and or y value representing the data p
190. New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold footer New ChartTitle pTransforml theFooterFont _ Graphs can have background gradients semi transparent colors legends titles and data tooltips footer SetTitleType ChartObj CHART FOOTER Text Classes 374 footer SetTitlePosition ChartObj CENTER GRAPH footer SetTitleOffset 8 footer SetColor Colors White chartVu AddChartObject footer Class AxisTitle ChartText AxisTitle The AxisTitle class creates a title for an axis The text is horizontal for x axis titles and vertical for y axis titles The most common constructor 1s AxisTitle Constructor Visual Basic Overloads Public Sub New _ ByVal axis As Axis _ ByVal thefont As ChartFont _ ByVal s As String _ Ct public AxisTitle Axis axis ChartFont thefont string s i axis The base axis this title is associated with thefont The font object used to display the axis title s Sets the title string ChartTitle example extracted from the example program ScatterPlots class LabeledDatapoints C LinearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS chartVu AddChartObject yAxis NumericAxisLabels xAxisLab new NumericAxisLabels xAxis xAxisLab SetTextFont theFont chartVu AddChartObject xAxisLab NumericAxisLabels yAxisLab new NumericAxisLabels yAxis yAxisLab SetTextFont theFont 375 Text Classes chartVu AddChartObject yAxisLab
191. NumPnts 1 stockPriceData 3 25 5 close StockPriceData 0 24 5 open StockPriceData 1 26 high StockPriceData 2 24 low Dim currentEvent As New ChartEvent currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode currentdate SetTOD 9 33 0 For i 0 To nNumPnts 1 Dim position As Double i 1 xValues i DirectCast currentdate Clone ChartCalendar If i gt 0 Then stockPriceData 3 2 0 5 ChartSupport GetRandomDouble close a tockPriceData 0 2 0 5 ChartSupport GetRandomDouble open minval Math Min stockPriceData 3 stockPriceData 0 maxval Math Max stockPriceData 3 stockPriceData 0 S X tockPriceData 1 maxval 1 5 ChartSupport GetRandomDouble high low stockPriceData 2 minval 1 5 ChartSupport GetRandomDouble End If currentEvent New ChartEvent xValues i position stockPriceData currentEvent AxisLabel XXX amp position ToString currentEvent ToolTip ToolTip amp position ToString eventArray i currentEvent currentdate Add incrementbase increment If currentdate Get ChartObj HOUR OF DAY gt 16 Then currentdate Add ChartObj DAY OF YEAR 1 currentdate SetTOD 9 30 0 End If Next 146 147 Scaling and Coordinate Systems Create an EventSimpleDataset or EventGroupDataset using the source data EventGroupDataset Datasetl new EventGroupDataset Stock Data eventAr
192. Obj derived objects displayed in the current graph just go ahead and change them using the appropriate Get and Set methods or properties Once you change all of the properties that you want call the ChartView UpdateDraw method This will force the ChartView object to update redrawing every object in its draw list See the example below C ChartView chartVu new ChartView LinearAxis xAxis new LinearAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis xAxis SetColor Colors Red chartVu UpdateDraw Visual Basic Dim chartVu As ChartView New ChartView Dim xAxis As LinearAxis New LinearAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis 165 The Chart View xAxis SetColor Colors Red chartVu UpdateDraw You can change the values of a dataset or even change the complete dataset of a chart plot object Changing the values of the dataset will not show in the current graph until the ChartView redraws itself Call the ChartView UpdateDraw method to force a redraw See the example program DynamicCharts The auto scale methods are not automatically invoked if you change the values of dataset If you want the graph to rescale taking into account the new data values you must call the appropriate autoscale methods of the coordinate system and of the related axes objects The chart classes that are NOT subclasses of GraphObj do not have a physical representation in a graph so do not try to a
193. PF References to Font are replaced with the QCChart2D class ChartFont Since the WPF FontStyle type does not include bold options an additional constructor is added which has a FontWeight parameter Specify the font weight using one of the FontWeights enumerated constants CH ChartFont theFont ChartFont theFont FontWeights Bold VB new ChartFont Microsoft Sans Serif 10 FontStyles Normal new ChartFont Microsoft Sans Serif 10 FontStyles Normal Dim theFont As New ChartFont Microsoft Sans Serif 10 FontStyles Normal Dim theFont As New ChartFont Microsoft Sans Serif 10 FontStyles Normal FontWeights Bold Font Style Constants The System Drawing FontStyle enumerated constants are different than the WPF FontStyles constants Net Forms WPF Bold Italic Oblique Regular Normal Strikeout Underline 71 Class Architecture Font Weight Constants The WPF FontWeights enumerated constants include Bold DemiBold ExtraBlack ExtraBold ExtraLight Heavy Light Medium Normal Regular SemiBold Thin UltraBlack UltraThin and UltraBold Grid Grid is a panel class used everywhere in WPF programs for the layout of visual objects Rather than force programmers to fully qualify the QCChart2D Grid class which does something entirely different than the WPF Grid class we changed the name of our grid to ChartGrid Otherwise the parameters remain the same as our original QCChart2D Grid class WPF CH Ch
194. Plot Objects heights specified using the values of the associated group dataset The number of groups must be two The X values of the group dataset represent the x position of the lower left corner of each histogram bar the Y 0 values set the height of each histogram bar and the Y 1 values set the width of each histogram bar The histogram bars share a common base value Histogram constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As GroupDataset _ ByVal rbarbase As Double _ ByVal attrib As ChartAttribute _ C public HistogramPlot PhysicalCoordinates transform GroupDataset dataset double rbarbase ChartAttribute attrib transform The coordinate system for the new HistogramPlot object dataset The histogram plot represents the values in this group dataset The number of groups must be two The X values of the group dataset represent the x position of the lower left corner of each histogram bar the Y 0 values set the height of each histogram bar and the Y 1 values set the width of each histogram bar rbarbase The histogram bars start at the value rbarbase and extend to the histogram bar values represented by the dataset attrib Specifies the attributes line color and line style for the histogram bars An individual histogram bar in the histogram plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentA
195. Points methods ChartPlot derived objects that use datasets will update to reflect the new values when the ChartView UpdateDraw method is called If the coordinates of the new data points are outside of the x and y limits of the current coordinate system it may be necessary to rescale the coordinate system so that the new points show up otherwise the new data points will be clipped The new scale values can be set explicitly or calculated using one of the auto scale methods The example program DynamicCharts demonstrates various ways to update charts in real time If you want to change points in an existing dataset but not the size of the dataset call the datasets appropriate SetXDataValue SetYDataValue or SetDataPoint methods The dataset has its own copy of the data so you must change these values not the original values you used to initialize the dataset If you plan to change every value in the dataset you can do that point by point or create a new dataset and swap that in for the old dataset using the plot objects SetDataset or SetGroupDataset method Call the ChartView UpdateDraw method to force the chart to update using the new values 8 How do I prevent flicker when updating my charts on real time In general the retained graphics system of WPF is always doubled buffered does not produce flicker 9 How do you implement drill down or data tool tips in a chart Implementing drill down or tool tips consists of three major parts
196. QCChart2D Charting Tools for WPF Price Volume NASDAQ 40 4 e LE tee H 1840 NE E EE es AREA EAE OEE AA Fet X 4820 5 18 03 5 26 03 6 02 03 6 09 03 6 16 03 8 23 03 6 30 03 7 07 03 7 14 03 On inspecting any one of these Charts attentively a sufficiently distinct impression will be made to remain unimparied for a considerable time and the idea which does remain will be simple and complete at once including the duration and the amount William Playfair the father of statistical graphics in 7 786 Contact Information Company Web Site http www quinn curtis com Electronic mail General Information info quinn curtis com Sales sales quinn curtis com Technical Support Forum http www quinn curtis com ForumFrame htm Revision Date 12 29 2013 Rev 2 3 QCChart2D WPF Documentation and Software Copyright Quinn Curtis Inc 2014 Quinn Curtis Inc Tools for WPF END USER LICENSE AGREEMENT IMPORTANT READ CAREFULLY This Software End User License Agreement EULA is a legal agreement between you either an individual or a single entity and Quinn Curtis Inc for the Quinn Curtis Inc SOFTWARE identified above which includes all Quinn Curtis Inc Net software on any media and related documentation on any media By installing copying or otherwise using the SOFTWARE you agree to be bound by the terms of this EULA If you do not agree to the terms of this EULA do not install or use the SOFTWARE If the SOFTWARE
197. SetColor Colors Black chartVu AddChartObject yAxis TimeAxisLabels xAxisLab new TimeAxisLabels xAxis LinearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS xAxisLab SetAxisLabelsFormat ChartObj TIMEDATEFORMAT Y2000 xAxisLab SetColor Colors Black xAxisLab TextRotation 90 chartVu AddChartObject xAxisLab NumericAxisLabels yAxisLab new NumericAxisLabels yAxis yAxisLab SetColor Colors Black yAxisLab SetAxisLabelsFormat ChartObj CURRENCYFORMAT chartVu AddChartObject yAxisLab AxisTitle yaxistitle new AxisTitle yAxis theFont Millions yaxistitle SetColor Colors Black chartVu AddChartObject yaxistitle ChartAttribute attribl new ChartAttribute Colors Green 1 DashStyles Solid Colors Yellow Color barcolors Colors Red Colors Orange Colors Yellow Colors White di double barbreakpoints 0 0 33 660 1 00 433 d Using QCChart2D for WPF to Create Web Applications int gradmode ChartGradient GRADIENT MAPTO OBJECT double barbreakpoints 0 0 80 160 240 int gradmode ChartGradient GRADIENT MAPTO PLOT PHYSICAL COORDINATES ChartGradient cg new ChartGradient pTransforml1 gradmode barcolors barbreakpoints 90 attribl Gradient cg attribl SetFillFlag true SimpleBarPlot thePlotl new SimpleBarPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 0 0 FontWe
198. Simple Water bmme D e o sere apo rack oc aeaa e E EaR AEA EE EE va aa Ea E OTEN ASS 78 Simple Elapsed Time Dataset ceca etidm Ue eode en dg ae EE E E ved Gaiden s ador 82 Contour Elot Dataset tuae ot em due dagli e ist qum da o sera Man Meses ta ea E c an 85 STTS RT EE 89 Numeric Oroup ER 97 Date Pine e DENE d tad o eL Gus utes if D ELE MD EA ue 100 Elapsed Lime Dataset 22b coget pese etico s ona ve e reed doe a CANNE Qe thea cU caretes ste e S DO UE di 104 Event Group R cuoi arses teat vend dra san pvp beni ves Masi Can a eas ese ucc eir eire pe EV do en 107 G Scalms anmbCDordinate SV Stews ses CA os idoneo M No A nto dead o EM epit EORR URN ORI Cut DOR NISUS 112 Blot area and E E 112 CODE SVS moa o d de d o DS E aa m NR LE EA 113 Important Or E 115 Positioning the Plot Area in Graph ATO irri aie r e EIER e axi oe e da Rd eei pit s 116 Linear and Logarithmic Coordinate Scaling sss sese esse eee 119 Coordinate Systems using times and dates ao tn bic Pre tret aci o dpa ot a 124 Polar Coordinate Systemes ea es te tesi a et eis ue eub en ts ubt E ta da uA NE RON Ru ODIN SPP uer eos 157 Antenna Coordinate Systems esinen iseni tyke senses deht ege deene ed te a boe s 158 Miscellaneous Coordinate System TOM 159 SSMUS T irc MEMENTO ER E 162 Rendering Order of GraphObj Ob Cte gece eet eebe ee 163 Dynamic or Real Time Updates of Chart Objects nennen 164 Placing Multiple Charts in a Chart EE Ese ED Rue 165 Multiple Coordinate Systems in the Sa
199. SimpleDataset Datasetl new TimeSimpleDataset Sales x1 yl TimeSimpleDataset Dataset2 new TimeSimpleDataset Expenses x1 y2 Visual Basic Dim nnumpnts As Integer 32 Dim x1 nnumpnts 1 As ChartCalendar Dim yl nnumpnts 1 As Double Dim y2 nnumpnts 1 As Double Dim currentdate As New ChartCalendar 1998 ChartObj JANUARY 1 y1 0 100 SZ 0 30 x1 0 currentdate Clone currentdate Add ChartObj MONTH 3 For i To nnumpnts 1 xl i currentdate Clone yl i yl i 1 5 i 0 75 ChartSupport GetRandomDouble y2 4 y2 i 1 15 i1 0 95 ChartS upport GetRandomDouble currentdate Add ChartObj MONTH 3 Next i Dim Datasetl As New TimeSimpleDataset Sales xl yl Dim Dataset2 As New TimeSimpleDataset Expenses xl y2 Example of creating a simple time datasets from a CSV file C Default time date format is M dd yyyy CSV csvDataFile new CSV Create a dataset based on a previously saved csv file TimeSimpleDataset Datasetl new TimeSimpleDataset csvDataFile LineFill Datasetl csv 0 0 Write out dataset as a CVS file Datasetl WriteTimeSimpleDataset csv LineFill Datasetl csv Read it back in just as a test Datasetl ReadTimeSimpleDataset csv LineFill Datasetl csv 0 0 Visual Basic Default time date format is M dd yyyy Dim csvDataFile As CSV New CSV Create a dataset based on a previously saved csv file Dim Datasetl
200. Sub SetAxisTicks ByVal tickorigin As Double _ ByVal nlogtickformat As Integer _ Visual Basic Overloads Public Sub SetAxisTicks _ ByVal origin As Double _ ByVal nlogtickformat As Integer _ ByVal minorticklength As Double _ ByVal majorticklength As Double _ ByVal tickdir As Integer _ Ct public void SetAxisTicks double tickorigin Axes 190 int nlogtickformat ii public void SetAxisTicks double origin int nlogtickformat double minorticklength double majorticklength int tickdir E intercept Sets the intercept of this axis with the perpendicular axis in physical coordinates nlogtickformat This parameter specifies which minor tick marks are flagged for labels Logarithmic axis minor tick mark labels can become very crowded It is possible to choose values that may overlap or not display Valid nlogtickformat values are 0 No minor tick mark labels 1 Place a label at tick mark 0 in each decade 2 Place a label at minor tick marks 1 3 and 5 in each decade 3 Place a label at minor tick marks 0 1 2 3 and 5 in each decade 4 Place a label at minor tick marks 0 1 2 3 4 and 5 in each decade 5 Place a label at minor tick marks 0 1 2 3 4 5 and 6 in each decade 6 Place a label at minor tick marks 0 1 2 3 4 5 6 and 7 in each decade 7 Place a label at minor tick marks 0 1 2 3 4 5 6 7 and 8 in each decade 8 Place a label at minor tick marks 0 1 2 3 4 5 6 7 8 a
201. True chartVu SetCurrentMouseListener mouselistener Moving the Chart Coordinate System Class MoveCoordinates MouseListener DataCursor MoveCoordinates The MoveCoordinates mouse listener traps a mouse pressed event While the mouse is button is held down the underlying coordinate system will track the move movements 323 Moving Chart Objects and Data Points Release the mouse button and the chart redraws one final time using the extents of the final coordinate system MoveCoordinates constructors Visual Basic Declaration Public Sub New _ component As ChartView _ transform As PhysicalCoordinates buttonmask As MouseButton C public MoveCoordinates ChartView component PhysicalCoordinates transform MouseButton buttonmask component A reference to the ChartView object that the chart is placed in transform The coordinate system underlying the chart buttonmask Specifies the mouse button that is trapped to invoke a move Create the MoveCoordinates object and then install it using the ChartView SetCurrentMouseListener method This adds the MoveCoordinates object as a MouseListener to the ChartView object Enable Disable the function using MoveCoordinates SetEnable method Call MoveCoordinates SetCurrentMouseListener null to remove the object as a mouse listener for the chart view You can restrict the movement of the coordinate system to the x dimension MOVE_X or the y dimension vovE v
202. UTEMINUTE TIMEAXIS 15MINUTEMINUTE TIMEAXIS 10MINUTEMINUTE TIMEAXIS SMINUTEMINUTE TIMEAXIS 2MINUTEMINUTE TIMEAXIS MINUTE TIMEAXIS MINUTE30SECOND TIMEAXIS MINUTEISSECOND TIMEAXIS MINUTEIOSECOND TIMEAXIS MINUTESSECOND 1 hour major tick mark spacing 1 hour major tick mark spacing 30 minute minor tick mark spacing 1 hour major tick mark spacing 15 minute minor tick mark spacing 1 hour major tick mark spacing 10 minute minor tick mark spacing 1 hour major tick mark spacing 5 minute minor tick mark spacing 1 hour major tick mark spacing 2 minute minor tick mark spacing 1 hour major tick mark spacing 1 minute minor tick mark spacing 30 minute major tick mark spacing 1 minute minor tick mark spacing 15 minute major tick mark spacing 1 minute minor tick mark spacing 10 minute major tick mark spacing 1 minute minor tick mark spacing 5 minute major tick mark spacing 1 minute minor tick mark spacing 2 minute major tick mark spacing 1 minute minor tick mark spacing 1 minute major tick mark spacing 1 minute major tick mark spacing 30 second minor tick mark spacing minute major tick mark spacing 15 second minor tick mark spacing minute major tick mark spacing 10 second minor tick mark spacing 1 minute major tick mark spacing 5 second minor tick mark spacing Axes 196 TIMEAXIS MINUTE2SECOND 1 minute major tick mark spacing 2 second minor tick mark spacing TIMEAXIS MINUTESE
203. Use this constructor to fill the background with the gradient defined using the startcolor and stopcolor arguments Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal bgtype As Integer _ ByVal startcolor As Color _ ByVal stopcolor As Color _ Colors Gradients and Backgrounds 178 ByVal dir As Integer Ct public Background PhysicalCoordinates transform int bgtype Color startecolor Color Stopcolor ant dir Use this constructor to fill the background with a custom background a your own LinearGradientBrush or ImageBrush for example Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal bgtype As Integer _ ByVal gradient As Brush Ct public Background PhysicalCoordinates transform int bgtype Brush gradient transform The coordinate system associated with the chart background The transform defines where the plot area fits in the graph area bgtype The chart background type Use one of the chart background type constants PLOT BACKGROUND or GRAPH BACKGROUND Specifying the PLOT BACKGROUND type fills the plot area of the chart while specifying the GRAPH BACKGROUND type fills the entire graph area of the chart gradient The user defined background brush startcolor Specifies the starting color value of the gradient stopcolor Specifies the ending color value of the gradient dir Specifies the direction of the
204. Val filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ C4 public EventGroupDataset CSV csv string filename int rowskip int columnskip CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before starting this read operation A DateTimeFormatInfo object and a date time format string in the CSV class control the interpretation of the ChartCalendar values The format in the file must match the format 109 Chart Datasets specified for the CSV class The underlying conversion mechanism calls the DateTime ToString String formatstring DateTimeFormatInfo info method for the conversion The default format for the date time formatstring object is M dd yy Call the SetDateTimeFomatString method to change the default date time format See the documentation for the Net DateTime ToString method to figure out the various formatting options for the date time format string If you are into internationalization and difficult to understand Net documentation you can also create your own DateTimeFormatInfo object installing it in the CSV object using CSV SetTimeDateFormat method The date time format string and the DateTimeFormatInfo object apply to both CSV files used for input and CSV files used for output If an attempt is made to read date time values that do not match the desire
205. Val weektype As Integer _ C4 public void SetWeekType int weektype If you use the auto scale routines set the week type before you call the TimeCoordinates AutoScale method because the auto scale routines need to take into account the week type For example C TimeSimpleDataset dataset new TimeSimpleDataset Sales xData yData TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale SetWeekType ChartObj WEEK 5D simpleTimeScale AutoScale dataset Visual Basic Dim dataset As TimeSimpleDataset New TimeSimpleDataset Sales xData yData Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale SetWeekType ChartObj WEEK 5D simpleTimeScale AutoScale dataset In addition to the week type the other major way to customize a TimeCoordinates coordinate system is not to use a 24 hour day There are methods that set the starting and ending time of Scaling and Coordinate Systems 134 day For example if you are interested in plotting stock market data trading during the regular trading day of 9 30 AM to 4 00 PM you can setup the coordinate system to only include these hours and to treat any data outside of these hours as invalid and not to be plotted A day can have only one continuous range You are not able to define a day to with a valid range of 9 30 AM to 4 00 PM and 6 00 PM to 9 00 PM Only one of these ranges is valid or a combined range of 9 30 AM to 9 00 PM w
206. View object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis chartVu AddChartObject gridX chartVu AddChartObject gridY Visual Basic Define the coordinate system Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleScale As CartesianCoordinates _ New CartesianCoordinates xMin yMin xMax yMax Create the x and y axes Dim xAxis As LinearAxis _ New LinearAxis simpleScale ChartObj X AXIS Dim yAxis As LinearAxis _ New LinearAxis simpleScale ChartObj Y AXIS Create the grids Dim gridX As ChartGrid New ChartGrid xAxis yAxis ChartObj X AXIS ChartObj GRID MAJOR Change default grid line properties 247 Axis Grids gridX SetLineWidth 2 0 gridX SetLineStyle DashStyles Dot gridX SetColor Colors Gray Dim gridY As ChartGrid New ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR Change default grid line properties gridY SetLineWidth 1 0 gridY SetLineStyle DashStyles Solid gridY SetColor Colors Black Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis chartVu AddChartObject gridX chartVu AddChartObject gridY Polar Grids Class Polar
207. Windows form saving the charts as image files Printing a Chart Class ChartPrint ChartObj ChartPrint The ChartPrint class uses uses the System Windows Controls PrintDialog component to implement printing The class selects setups and outputs a chart to a printer There are two constructors you can use depending on whether you want to print one or multiple charts In the case of the first constructor a ChartView object is passed in and the chart defined in that chart view will be printed In the second constructor a Panel object is passed in this allows multiple ChartView objects positioned using a Panel layout object Grid WrapPanel DockPanel UniformGrid or StackPanel to be printed ChartPrint constructor Visual Basic Overloads Public Sub New _ ByVal component As ChartView _ ByVal nsizemode As Integer _ File and Printer Rendering 398 Overloads Public Sub New _ ByVal component As Panel _ ByVal nsizemode As Integer _ Ct public ChartPrint ChartView component int nsizemode E public ChartPrint Panel component int nsizemode LE component Specifies the ChartView or WPF Panel object to be printed nsizemode Specifies the printer mapping mode Use one of the mapping mode constants PRT MAX Print the view so that paper is used maximally Text prints proportional to other objects aspect ratio is maintained PRT EXACT Print the view at the same size as the screen at least as far
208. XIS MONTHWEEK TIMEAXIS MONTHDAY TIMEAXIS WEEK TIMEAXIS WEEKDAY TIMEAXIS DAY TIMEAXIS DAYI2HOUR TIMEAXIS DAYSHOUR TIMEAXIS DAY4HOUR TIMEAXIS DAY2HOUR TIMEAXIS DAYHOUR TIMEAXIS 12HOURHOUR TIMEAXIS SHOURHOUR TIMEAXIS 4HOURHOUR TIMEAXIS 2HOURHOUR Axes 194 1 quarter major tick mark spacing 1 quarter major tick mark spacing 1 month minor tick mark spacing 1 month major tick mark spacing 1 month major tick mark spacing 1 week minor tick mark spacing 1 month major tick mark spacing 1 day minor tick mark spacing 1 week major tick mark spacing 1 week major tick mark spacing 1 day minor tick mark spacing 1 day major tick mark spacing 1 day major tick mark spacing 12 hour minor tick mark spacing 1 day major tick mark spacing 8 hour minor tick mark spacing 1 day major tick mark spacing 4 hour minor tick mark spacing 1 day major tick mark spacing 2 hour minor tick mark spacing 1 day major tick mark spacing 1 hour minor tick mark spacing 12 hour major tick mark spacing 1 hour minor tick mark spacing 8 hour major tick mark spacing 1 hour minor tick mark spacing 4 hour major tick mark spacing 1 hour minor tick mark spacing 2 hour major tick mark spacing 1 hour minor tick mark spacing 195 Axes TIMEAXIS HOUR TIMEAXIS HOUR30MINUTE TIMEAXIS HOURISMINUTE TIMEAXIS HOURIOMINUTE TIMEAXIS HOURSMINUTE TIMEAXIS HOUR2MINUTE TIMEAXIS HOURMINUTE TIMEAXIS 30MIN
209. Y43 XY44 Bar plots can have the values of the bars displayed above or inside each bar If you plan to implement scrolling panning along the x axis using a scroll bar or some other method you need to know how to re scale the x scale EventCoordinate system First understand that the underlying coordinate system is a Cartesian coordinate system with the x axis scaled from 0 to the number of ChartEvent objects with unique time stamps Because a simple linear scale is used for the x axis you can scale the x axis using simple linear values 0 to number of ChartEvent objects In that case you use the EventCoordinates ScaleStartX and EventCoordinates ScaleStopX properties The code below is extracted from the ChartEventExamples OHLCEventChart example program C public void UpdateScaleAndAxesUsingEventIndex int startindex pTransforml ScaleStartX startindex pTransforml ScaleStopX startindex numberEventsInView 1 pTransform2 ScaleStartX startindex pTransform2 S8caleStopX startindex numberEventsInView 1 pTransform3 ScaleStartX startindex pTransform3 ScaleStopX startindex numberEventsInView 1 xAxisl CalcAutoAxis yAxisl CalcAutoAxis xAxisLabl CalcAutoAxisLabels yAxisLabl CalcAutoAxisLabels xAxis2 CalcAutoAxis xAxis2 SetAxisIntercep xAxis2 SetAxisTickDir yAxis2 CalcAutoAxis yAxisLab2 CalcAutoAxis yAxis3 CalcAutoAxis yAxisLab3 CalcAutoAxis yAxis3 SetAxisInter
210. _ ByVal angletickspace As Double _ ByVal anglentickspermajor As Integer _ ByVal minorticklength As Double _ ByVal majorticklength As Double _ ByVal tickdir As Integer Ct public void SetAntennaAxesTicks double axestickspace int axesntickspermajor double angletickspace int anglentickspermajor public void SetAntennaAxesTicks double axestickspace int axesntickspermajor double angletickspace int anglentickspermajor double minorticklength double majorticklength int tickdir axestickspace Specifies the spacing between minor tick marks for the x and y axes axesntickspermajor Specifies the number of minor tick marks per major tick mark for the x and y axes angletickspace Specifies the spacing in degrees between minor tick marks for the radial axis anglentickspermajor Specifies the number of minor tick marks per major tick mark for the radial axis minorticlength The length of minor tick marks in WPF device coordinates Axes 214 majorticlength The length of major tick marks in WPF device coordinates tickdir The direction of the tick marks Use one of the tick mark direction constants AXIS MIN AXIS CENTER or AXIS MAX Use the SetLineWidth SetLineStyle and SetColor methods to customize the drawing properties of the lines used to draw the axes lines and tick marks Simple antenna axes example double minvalue 40 maxvalue 20 AntennaCoordinates antennascale new AntennaC
211. a concrete implementation of the GroupPlot class It displays a collection of arrows as defined by the data in a group dataset The position size and rotation of each arrow in the collection is independently controlled The numer of groups of the group dataset must be three ArrowPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal basearrow As Arrow _ ByVal attrib As ChartAttribute C4 public ArrowPlot PhysicalCoordinates transform GroupDataset dataset Arrow basearrow ChartAttribute attrib transform The coordinate system for the new ArrowPlot object dataset The group dataset sets the position size and rotation of individual arrows The numer of groups must be three Orgainize the data in the dataset in the following manner X x position of the arrow point Y 0 y position of the arrow point 269 Simple Plot Objects Y 1 Size ofthe arrow A size of 0 05 creates an arrow with a length equal to 0 05 in NORM PLOT POS coordinates Y 2 The rotation of the arrow using the point of the arrow as the rotation origin in degrees basearrow An instance of an Arrow object used to draw the arrows in this ArrowPlot object attrib Sets the color line and fill characteristics for the arrows in this ArrowPlot object An individual arrow in an arrow plot object can have unique attributes Use the objects SetSegmentAttribu
212. ackground Define axes axes labels and grids 293 Simple Plot Objects Dim attribl As New ChartAttribute Colors Black 0 DashStyles Solid _ Colors Green attribl SetFillFlag True Dim thePlotl As New HistogramPlot pTransforml Datasetl 0 0 attribl Dim bardatavalue As NumericLabel thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj PERCENTFORMAT bardatavalue SetColor Colors Black thePlotl SetBarDatapointLabelPosition ChartObj INSIDE BAR thePlotl SetPlotLabelTemplate bardatavalue thePloti SetShowDatapointValue True hePlotl SetSegmentAttributesMode True hePlotl SetSegmentFillColor 0 Colors Red hePlotl SetSegmentFillColor 1 Colors Magenta hePlotl SetSegmentFillColor 2 Colors Blue hePlotl SetSegmentFillColor 3 Colors Green hePlotl SetSegmentFillColor 4 Colors Yellow hePlotl SetSegmentFillColor 5 Colors Pink hartVu AddChartObject thePlotl O pt cb vt pocket oct Line Gap Plots Class LineGapPlot GraphObj ChartPlot GroupPlot LineGapPlot The LineGapPlot class extends the GroupPlot class and displays a line gap chart The number of groups must be two A line gap chart consists of two line plots where a contrasting color fills and highlights the area between the two lines The X Y 0 values of the group dataset represent the first of the bounding lines and the X Y 1 values of the group dataset represent the seco
213. act class representing plot types that use data organized as arrays of x and y values where there is one or more y value for each x value Group plot types include multi line plots stacked line plots stacked bar plots group bar plots error bar plots floating bar plots open high low close plots candlestick plots arrow plots histogram plots cell plots and bubble plots The number of x values in a group plot is referred to as the number of columns or as NumberDatapoints and the number of y values for each x value is referred to as the number of rows or NumberGroups Think of spreadsheet that looks like x values x 0 x 1 x 2 x 3 x 4 x 5 y values group 0 y 0 0 y 0 1 y 0 2 y 0 3 y 0 4 y 0 5 y values group 71 y 1 0 y L1 y 1 2 y l 3 wll Al y l 5 y values group 2 y 2 0 y 2 1 y 2 2 y 2 3 Al y 2 5 number of x values NumberDatapoints NumberColumns 6 number of y values for each x value NumberGroups NumberRows 3 Simple Plot Objects 268 This would be the ROW_MAJOR format if the data were stored in a CSV file Example program segments presented in this documentation are not complete programs and contain uninitialized and or undefined objects and variables Do not attempt to copy them into your own program Refer to the referenced example program that the code is extracted from Arrow Plots Class ArrowPlot GraphObj ChartPlot GroupPlot ArrowPlot The ArrowPlot class is
214. age null if aImage null ChartImage chartImage new ChartImage pTransforml aImage 0 0 ChartObj NORM GRAPH POS 0 chartImage SetSizeMode ChartObj COORD SIZE chartImage SetlImageSize new Dimension 1 1 chartVu AddChartObject chartImage Visual Basic Dim filename As String Images ChartClouds jpg Dim almage As BitmapImage Nothing Try almage New BitmapImage New Uri filename UriKind Relative Catch generatedExceptionName As System ArgumentException filename Images ChartClouds jpg almage Nothing End Try If almage Is Nothing Then Try almage New BitmapImage New Uri filename UriKind Relative Catch generatedExceptionName As System ArgumentException almage Nothing End Try End If If almage IsNot Nothing Then Dim chartImage As New ChartImage pTransforml alImage 0 O0 ChartObj NORM GRAPH POS 0 chartImage SetSizeMode ChartObj COORD SIZE chartImage SetImageSize New Dimension 1 1 chartvu AddChartObject chartImage End If Generic Arrow Class Class Arrow ChartObj Lines Shapes Images and Arrows 394 Arrow The Arrow defines an arrow shape useable with the ChartShape class The Arrow class creates the arrows in the ArrowPlot class and it can also place individual arrows in a chart The class creates a base arrow with a custom arrowhead and shaft size Scale rotate and position the arrow in a chart The arrow is defined using device coordinates Arrow const
215. akpoint GRADIENT MAPTO PLOT PHYSICAL COORDINATES applied to a simple bar graph Colors Gradients and Backgrounds 174 SERI E ni x Production of Green Bars is Up 148 v o E 2 1999 2000 2001 2002 2003 2004 Bar plots can have the values of the bars displayed above or inside each bar Note how in this example the range of colors in each bar red orange yellow and white depends on the bar height GRADIENT MAPTO PLOT NORMALIZED COORDINATES In this mapping mode the breakpoints are expected to be in the range of 0 0 to 1 0 The break points are applied as percentages to the plot area The value 0 0 corresponds to the start of the plot area and the value 1 0 corresponds to the end of the plot area Unlike the GRADIENT MAPTO OBJECT mapping mode a small area fill object will not show all of the colors of the gradient Only an area fill object the size of the plot area would show all of the colors Otherwise it can be used much the same as the GRADIENT MAPTO PLOT PHYSICAL COORDINATES mapping mode except in this case you are using normalized coordinates 0 0 1 0 instead of physical coordinates GRADIENT MAPTO GRAPH NORMALIZED COORDINATES Much the same as the GRADIENT MAPTO PLOT PHYSICAL COORDINATES except that in this case the breakpoints are applied to the entire graph area not the plot area ChartGradient constructors Use the constructor below for simple line and fill attributes There are similar
216. al grid The circular grid consists of a group of concentric circles centered on the origin and aligned with the y axis tick marks The antenna radial grid consists of a group of radial lines aligned with the angle tick marks and starting at the origin extending to the outer edge of the antenna coordinate system AntennaGrid constructors There are two AntennaGrid constructors Visual Basic Overloads Public Sub New _ ByVal baseaxis As AntennaAxes _ ByVal gridtype As Integer _ Overloads Public Sub New ByVal baseaxis As AntennaAxes _ ByVal gridmagtype As Integer _ ByVal gridangletype As Integer _ Ct public AntennaGrid AntennaAxes baseaxis int gridtype LE public AntennaGrid AntennaAxes baseaxis int gridmagtype int gridangletype Axis Grids 250 baseaxis The antenna axes associated with the grid gridtype Specifies if the radial and angular grid aligns with the major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID_ALL of the reference antenna axis gridmagtype Specifies if the radial grid aligns with the major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID_ALL of the reference antenna axis gridangletype Specifies if the angular grid aligns with the major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID_ALL of the reference antenna axis The SetLi
217. al of 3 to 30 will use a minor tick mark range of 3 with minor tick marks at 6 9 12 15 18 21 24 and 27 Logarithmic Axis Intercept A logarithmic axis has an intercept value the same as a linear axis Since the intercept value is specified using the scale of the perpendicular axis if the perpendicular axis is linear as in the case of semi log graphs the intercept value can be positive negative or 0 0 If the perpendicular axis is logarithmic the intercept value is restricted to a positive range Logarithmic Axis Tick Mark Origin The starting value for the major tick marks does not need to fall at the end of the axis range For example the axis may have a range of 0 175 to 195 It would not make sense to start the major tick mark placement at 0 175 The major tick marks would end up placed at 0 175 1 75 17 5 and 175 The minor tick marks would make even less sense A better major tick mark placement is 0 2 2 20 and 200 The minor tick marks will also fall on even values The logarithmic axis tick mark origin controls the placement of the first major tick mark The other major and minor tick mark positions are automatically calculated based on the initial position of the first major tick mark The tick mark origin must reside in the bounds defined by the axis minimum and maximum inclusive of the endpoints It does not need to be near an endpoint however LogAxis Constructors There are two constructors for LogAxis objects
218. alCoordinates SetGraphBorder methods SetGraphBorderDiagonal SetGraphBorderFrame or SetGraphBorderlInsets Typically the chart plot objects line plots bar plots scatter plots etc are clipped to the plot area Other chart objects axes axes labels titles etc need to reside outside of the plot area and these objects clip to the graph area The plot area can have a background different from that of the graph background Often a contrast between the graph area background and the plot area background produces a more visually pleasing chart GraphObj t Background The Background class paints the graph area background or the plot area background One instance of the class can only paint one area either the graph area or the plot area If you want unique fill properties for both you need to create two instances of the class The Background class uses one of the following techniques to fill the background solid color simple color gradient defined using two RGB colors e user defined gradient supplied as a WPF LinearGradientBrush object e user defined drawing brush supplied as a WPF Brush object Background constructors Use this constructor to fill the background with a single color Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal bgtype As Integer _ ByVal bgcolor As Color C public Background PhysicalCoordinates transform int bgtype Color bgcolor
219. already know the range for x and y for the plot area you can scale the plot area explicitly The example below uses a ElapsedTimeCoordinates constructor to initialize the coordinates to the proper values Scale for elapsed time using the ElapsedTimeCoordinates constructor with explicit scaling for a range of 30 seconds C double xMin double xMax double yMin 0 starting elapsed time is 0 30 1000 ending elpase time is 30 seconds OF Scaling and Coordinate Systems 138 double yMax 105 ElapsedTimeCoordinates simpleScale simpleScale new ElapsedTimeCoordinates xMin yMin xMax yMax TimeSpan xTSMin TimeSpan FromSeconds 0 starting elapsed time is 0 TimeSpan xTSMax TimeSpan FromSeconds 30 ending elpase time is 30 seconds simpleScale new ElapsedTimeCoordinates xTSMin yMin xTSMax yMax Visual Basic Dim xMin As Double 0 starting elapsed time is 0 Dim xMax As Double 30 1000 ending elpase time is 30 seconds Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleScale As ElapsedTimeCoordinates simpleScale New ElapsedTimeCoordinates xMin yMin xMax yMax or scale using TimeSpan values Dim xTSMin As TimeSpan TimeSpan FromSeconds 0 starting time is 0 Dim xTSMax As TimeSpan TimeSpan FromSeconds 30 ending time is 30 seconds simpleScale new ElapsedTimeCoordinates xTSMin yMin xTSMax yMax Another technique uses the default constructor and scales the coordinate
220. ame of the dataset grid An array size npoints or size rows columns of Point3D points that specifies the xyz values of a dataset Some of the constructors require the data points form a regular grid in the xy plane A regular grid is one where the x increment between adjacent x values is fixed as is the y increment The x increment and the y increment do not have to be the same rows Specifies the number of rows in the y direction in the regular grid Also specifies the number of rows or y values to evaluate the function over in the constructor that uses a SurfaceFunction argument columns Specifies the number of columns in the x direction in the regular grid Also specifies the number of columns or y values to evaluate the function over in the constructor that uses a SurfaceFunction argument npoints Specifies the number of xyz data point triplets in the grid array x An array size npoints of double that specifies the x values of the dataset The length of the y and z arrays must equal x Length y An array size npoints of double that specifies the y values of the dataset Z An array size npoints of double that specifies the z values of the dataset xl yl x2 y2 The SurfaceFunction sf is evaluated for the range x1 y1 to x2 y2 sf The dataset data points are created by evaluating the SurfaceFunction across the range x1 y1 to x2 y2 CSV An instance of a CSV object filename The name of the file rowskip Skip
221. ample program SimpleLinePlots class LineFill C TimeSimpleDataset DatasetArray Datasetl Dataset2 Dataset3 pTransforml new TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetoraphBorderDiagonal 0 15 l 92 0 75 2 Background background new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 100 50 255 Color FromRgb 40 25 120 ChartObj Y AXIS chartVu AddChartObject background Background plotbackground new Background pTransforml ChartObj PLOT BACKGROUND Colors Black chartVu AddChartObject plotbackground Define and add axes axes labels and grids to the chart ChartAttribute attribl new ChartAttribute Colors Blue 3 DashStyles Solid Datasetl SortByX true thePlotl new SimpleLinePlot pTransforml Datasetl attribl thePlotl SetLineStyle DashStyles DashDot chartVu AddChartObject thePlot1 ChartAttribute attrib2 new ChartAttribute Colors Yellow 3 DashStyles Solid Dataset2 SortByX true thePlot2 new SimpleLinePlot pTransforml Dataset2 attrib2 chartVu AddChartObject thePlot2 Color transparentRed Color FromArgb 200 255 0 0 Color transparentGreen Color FromArgb 200 0 255 0 ChartAttribute lossAttrib new ChartAttribute transparentRed 1 DashStyles Solicd transparentRed ChartAttribute profitAttrib new ChartAttribute transparentGreen 1 DashStyles Solid trans
222. ample program ContourPlots class ContourLinePlot C double contourlevels 1000 1200 1400 1600 1800 1900 2000 2100 2200 2400 2600 2800 3000 chartVu this int i theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold chartVu this CartesianCoordinates pTransforml new CartesianCoordinates 7 7 7 7 CreateRegularGridPolysurface prransforml SetGraphBorderDiagonal 0 10 10 85 0 85 Background background new Background pTransforml ChartObj GRAPH BACKGROUND Colors White chartVu AddChartObject background ChartText checkBoxCaption new ChartText pTransforml theFont Contour Level 560 35 ChartObj DEV POS hartVu AddChartObject checkBoxCaption Q inearAxis xAxis new LinearAxis pTransforml ChartObj X AXIS hartVu AddChartObject xAxis inearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS hartVu AddChartObject yAxis umericAxisLabels xAxisLab new NumericAxisLabels xAxis hartVu AddChartObject xAxisLab umericAxisLabels yAxisLab new NumericAxisLabels yAxis hartVu AddChartObject yAxisLab hartGrid xgrid new ChartGrid xAxis yAxis ChartObj X AXIS ChartObj GRID MAJOR hartVu AddChartObject xgrid OOO muU mot uo d P hartGrid ygrid new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR chartVu AddChartObject ygrid ChartAttribute attribs new ChartAttribute numcontourleve
223. anagement Instrumentation 5 0 v2 0 50727 System Messaging D D v2 0 50727 System Net 5 0 v2 0 50727 v2 0 50727 System Runtime Remoting D D v2 0 50727 System Runtime Serialization 0 0 v2 0 50727 System Runtime Serialization Formatters Soap 0 0 v2 0 50727 System Security 0 0 v2 0 50727 System ServiceModel 0 0 v2 0 50727 System ServiceModel Web 5 0 v2 0 50727 ZS View the Windowl xaml code and add the reference to ChartView in the Grid layout panel The Windowl xaml file now looks like Window x Class WpfApplication Window1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Window1 Height 631 Width 878 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 gt lt Grid gt lt my ChartView Margin 18 11 16 6 Name chartView gt lt Grid gt lt Window gt The actual WpfChartApplicationl example has a little more complicated XAML file because it also includes a simple menu for printing the chart and saving the chart as an image file That version of the XAML file looks like Window x Class WpfChartA pplication Window1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Window1 Height 631 Width 878 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 gt lt Grid gt lt Gr
224. ar coordinates to Cartesian coordinates X magnitude cos angle y magnitude sine angle magnitude Polar coordinate magnitude angle Plot coordinate angle x Cartesian x coordinate y Cartesian y coordinate The PolarCoordinates class is an extension of the CartesianCoordinates class and it automatically handles these conversions The only important parameter that needed for the creation of a PolarCoordinates object is the polar magnitude since the polar angle always has a range 0 to 2 pi radians 0 to 360 degrees PolarCoordinates constructors The first way to create a PolarCoordinates object is to use the constructor that specifies the polar magnitude directly Scaling and Coordinate Systems 158 C double polarmagnitude 5 0 PolarCoordinates polarscale new PolarCoordinates polarmagnitude Visual Basic Dim polarmagnitude As Double 5 0 Dim polarscale AS PolarCoordinates New PolarCoordinates polarmagnitude Or you can use an auto scale routine to analyze a dataset and select the appropriate polar magnitude C double JangleData 20 60 1 40 1 70 2 50 4 0 5 0 6 0 In Radians double magnitudeData 20 33 44 55 46 33 54 64 SimpleDataset dataset new SimpleDataset Control angleData magnitudeData PolarCoordinates pPolarTransform new PolarCoordinates pPolarTransform AutoScale dataset ChartObj AUTOAXES FAR Visual Basic Dim angleData As Double 0 2 0 6 1
225. arPlot GroupVersaPlot S Fr amp Class Architecture 50 Drug Sales The Group bar graph and the Stacked bar graph represent two different ways of displaying the same data This class is a concrete implementation of the GroupPlot class and displays group data in a group bar format Individual bars the height of which corresponds to the group y values of the dataset display side by side as a group justified with respect to the x position value for each group The group bars share a common base value This class is a concrete implementation of the GroupPlot class and displays data as stacked bars In a stacked bar plot each group is stacked on top of one another each group bar a cumulative sum of the related group items before it The GroupVersaPlot is a plot type that can be any of the eight group plot types GROUPBAR STACKEDBAR CANDLESTICK OHLC MULTILINE STACKEDLINE FLOATINGBAR and FLOATING STACKED BAR Use it when you want to be able to change from one plot type to another without deleting the instance of the old plot object and creating an instance of the new 51 Class Architecture HistogramPlot LineGapPlot F4 S 2 9 S Ej S 9 o z S a Millions Video Game Usage by Age Group 40 Age Group The height and width of the bars in a Histogram plot carries information This class is a concrete implementation of the GroupPlot class and displays histogram plots A histogram
226. arPlot HistogramBars GroupBargraphs and FloatingBars 10 I do not want to my graph to auto scale How do I setup the graph axes for a specific range Auto scaling has two parts The first is the auto scaling of the coordinate system based on one or more datasets The second part is the auto scaling of the axes that reside in the coordinate system Manually scale the coordinate system and axes by calling the appropriate constructors For example C new ChartCalendar 1996 ChartObj FEBRUARY 5 new ChartCalendar 2002 ChartObj JANUARY 5 ChartCalendar xMin ChartCalendar xMax double yMin 0 double yMax 1057 455 FAQs TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed TimeAxis xAxis new TimeAxis simpleTimeScale Create the linear y axis LinearAxis yAxis new LinearAxis simpleTimeScale ChartObj Y AXIS Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Visual Basic Dim xMin As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 Dim xMax As ChartCalendar New ChartCalendar 2002 ChartObj JANUARY 5 Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleTimeScale As TimeCoordinates simpleTimeScale New TimeCoordinates xMin yMin xMax yMax
227. area Use one of the gradient mode constants GRADIENT MAPTO OBJECT GRADIENT MAPTO PLOT PHYSICAL COORDINATES GRADIENT MAPTO PLOT NORMALIZED COORDINATES or GRADIENT MAPTO GRAPH NORMALIZED COORDINATES The physical coordinate system of the graph object The coordinate system is for the GRADIENT MAPTO PLOT PHYSICAL COORDINATES GRADIENT MAPTO PLOT NORMALIZED COORDINATES and GRADIENT MAPTO GRAPH NORMALIZED COORDINATES mapping modes Colors Gradients and Backgrounds 176 The example below uses the GRADIENT MAPTO PLOT PHYSICAL COORDINATES mapping mode to map four colors to the physical coordinates of the plot area C ChartAttribute attribl new ChartAttribute Colors Green 0 DashStyles Solid Colors Green Color barcolors Colors Red Colors Orange Colors Yellow Colors White double barbreakpoints 0 0 80 160 240 int gradmode ChartGradient GRADIENT MAPTO PLOT PHYSICAL COORDINATES ChartGradient cg new ChartGradient pTransforml gradmode barcolors barbreakpoints 9D Jg attribl Gradient cg Visual Basic Dim attribl As New ChartAttribute Colors Green 0 DashStyles Solid Colors Green Dim barcolors As Color Colors Red Colors Orange Colors Yellow Colors White Dim barbreakpoints As Double 0 0 80 160 240 Dim gradmode As Integer ChartGradient GRADIENT MAPTO PLOT PHYSICAL COORDINATES Dim cg As ChartGradient New ChartGradient pTransforml gradmode barcolors _ barbreakpoints
228. arest ChartEvent for the TimeScaleStart property and rounds up for the TimeScaleStop property When using the time date values for scaling an EventCoordinate system you cannot set a time date value not bounded by the range of values found in the attached datasets In other words you cannot create datasets using ChartEvents that use time date values in 2011 and try and scale the x axis for a range of 2011 to 2013 The largest value you can scale the x axis for is the time date value of the ChartEvent with the largest or latest time stamp value The only time date values which exist in a EventCoordinates based coordinate system are the time stamps 157 Scaling and Coordinate Systems of the ChartEvents in the datasets attached to the coordinate systems Other times and dates do not exist unless you add a ChartEvent containing the date time to one of the attached datasets Polar Coordinate Systems Class PolarCoordinates PhysicalCoordinates Cartesian Coordinates t PolarCoordinates The magnitude and the polar angle of a point define its position in a chart scaled for polar coordinates The magnitude can have any value greater than 0 0 and the polar angle any positive or negative value A polar angle range of 0 to 2 pi radians 0 to 360 degrees sweeps a complete circle in polar coordinates A polar coordinate system uses a Cartesian coordinate system scaled for plus minus the polar magnitude The following equations convert from pol
229. argin 18 11 16 6 Name datasetViewerl gt lt Grid gt lt TabItem gt DatasetViewer constructor Visual Basic Declaration Public Sub New _ chartvu As ChartView _ transform As PhysicalCoordinates posrect As Rectangle2D _ dataset As ChartDataset rows As Integer _ cols As Integer _ Start As Integer d Cz public DatasetViewer ChartView chartvu PhysicalCoordinates transform Rectangle2D posrect Text Classes 384 ChartDataset dataset int rows Int cols int start chartvu The ChartView object the DatasetViewer is associated with transform The coordinate system the DatasetViewer is placed in posrect A positioning rectangle using normalized chart coordinates for the dataset viewer use null if not used dataset A simple or group dataset to add to the dataset viewer rows Number of rows to display cols Number of columns to display start Starting column of the dataset viewer Set unique fonts for the column headers row headers and grid cells using the ColumnHeaderFont RowHearderFont and GridCellFont properties Turn on the edit feature of the grid cells using the EnableEdit property Turn on the striped background color of the grid cells using the UseStripedGridBackground property Foreground and background attributes of the column headers row headers and grid cells can be set using the ColumnHeaderAttribute RowHeaderAttribute GridAttribute and AltGridAttribute properties
230. arithmic plots for financial charts and engineering charts MiscCharts A line gap chart MouseListeners Data tooltips data cursors moving data points moving chart objects MultiLinePlots Group multi line plots stacked line plots multiple single line graphs MultipleAxes Multiple axes graphs NewDemosRev2 New examples for Revision 2 0 features PieCharts Simple pie charts and pie charts combined with line and bar plots PolarCharts Polar line line file and scatter plots Also includes an Antenna plot example ResizeExamples Fixed size frame resizeable frame with fixed sized objects resizeable frame with resizeable objects scrollable panel as a view into a much larger fixed size frame ScatterPlots Simple scatter line and line marker plots scatter plots with variable size and color symbols cell plots arrow plots Also labeling the data point values or a line marker plot SimpleLinePlots Simple line plots with linear and time date coordinate systems Also filled and step lines UserControlChartExamplel Placing a ChartView derived chart in a UserControl class and reference that class in the main window UserControlChartExample2 Derive a class directly from the ChartView class and reference that class in the main window UserControlChartExample3 Reference a ChartView class directly in the xaml file of the main window and initialize it in the main window s behind code file WpfChartAp
231. around the chart The size of the ChartView remains unchanged in both cases If you do not give the ChartView an explict size the WPF Grid layout panel will resize the ChartView to fit into the assigned grid element TablItem Header ResizeableObject Name tabItem4 gt lt Grid gt lt my ChartView Margin 18 11 16 6 Name chartView4 gt lt Grid gt lt TablItem gt In this case when the parent window is resized the ChartView will also resize Whether or not the text and line objects in the chart resize along with the chart depends on the value of the ResizeMode discussed in the previous section Another interesting technique is to place a fixed size ChartView object in a WPF ScrollViewer control The size of the ChartView window can much larger than the window size Place the chart in a ScrollViewer control and set the scrollbar options to Auto The auto scroll feature of the Scroll Viewer displays scroll bars when the chart object is larger than the containing form 169 The Chart View The scroll bars permit the user to pan left right up and down to view the portion of the ChartView window that is outside of the clipping limits of the window See the ResizeExamples ScrollPanelPolarLine tab of the ResizeExamples program for an example TablItem Header FixedSizeScrollable Name tabItem3 gt lt Grid gt lt ScrollViewer VerticalScrollBarVisibility Auto HorizontalScrollBarVisibility Auto gt lt my ChartView Margin
232. artAttribute attrib3 new ChartAttribute Colors Gray 1 DashStyles Dot ChartGrid ygrid new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR ygrid SetChartObjAttributes attrib3 chartVu AddChartObject ygrid VB Dim attrib3 As New ChartAttribute Colors Gray 1 DashStyles Dot Dim ygrid As New ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR ygrid SetChartObjAttributes attrib3 chartVu AddChartObject ygrid Mouse Button Constants WPF events use different mouse button constants than Net Forms based programming The Net Forms mouse event constants are found in System Windows Forms MouseButtons while the WPF mouse constants are found in System Windows Input Mouse Button Mouse Event Arguments In Net Forms programming the MouseDown MouseUp and MouseMove events use the System Windows Forms MouseEventArgs data type In WPF programming the MouseDown and MouseUp events use the System Windows Input MouseButtonEventArgs type and the MouseMove event uses the System Windows Input MouseEventArgs type Net Forms CH protected void OnMouseDown MouseEventArgs e protected void OnMouseUp MouseEventArgs e Class Architecture 72 protected void OnMouseMove MouseEventArgs e VB protected void OnMouseDown ByVal e As MouseEventArgs protected void OnMouseUp ByVal e As MouseEventArgs protected void OnMouseMove ByVal e As MouseEventArgs WPF protected void OnMouseDown MouseButtonEventArgs
233. artFont New ChartFont Helvetica 10 FontStyles Normal FontWeights Bold Dim xAxisLabelsRotation As Double 0 0 Dim xAxisLabelsDir As Integer ChartObj AXIS MIN Dim xAxisLabelsEnds As Integer ChartObj LABEL ALL Dim xAxisLabelsColor As Color Colors Black Dim xAxisNumericFormat As Integer ChartObj TIMEDATEFORMAT MY xAxisLabels SetAxisLabels labelfont xAxisLabelsRotation _ xAxisLabelsDir xAxisLabelsEnds xAxisLabelsColor xAxisLabels SetAxisLabelsFormat xAxisNumericFormat 230 231 Axis Labels Elapsed Time Axis Labels Class ElapsedTimeA xisLabels GraphObj t ChartText AxisLabels t ElapsedTimeAxisLabels The ElapsedTimeA xisLabels class extends the AxisLabels class and provides for elapsed time labels It adds extensive time formatting capability Use it to label axes created using the ElapsedTimeAxis class Elapsed Time Label formats A time axis label can take several forms The TimeFormat property controls the elapsed time format TimeFormat Format Constant Example String Result TIMEDATEFORMAT MS 12 33 TIMEDATEFORMAT 24HMS 23 12 33 TIMEDATEFORMAT 24HM 23 12 The TIMEDATEFORMAT MS and TIMEDATEFORMAT formats can also have a decimal precision appending a decimal point and the specified number of significant digits to the right of the time lable seconds 1 e 12 33 7432 This is set using the AxisLabelsDecimalPos property ElapsedTimeAxis Labels constructor There is only one main cons
234. artObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartY 0 pTransforml SetTimeScaleStart New ChartCalendar 1997 ChartObj JULY 1 pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 8 Dim background As New Background pTransforml _ ChartObj GRAPH BACKGROUND Color FromRgb 30 70 70 _ Color FromRgb 90 20 155 ChartObj Y AXIS chartVu AddChartObject background Define and add axes axes labels and grids to chart Dim attribl As New ChartAttribute Colors Green 0 DashStyles Solid Colors Green attribl SetFillFlag True Dim thePlotl As New SimpleBarPlot pTransforml Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 _ DIO attrib ChartObj JUSTIFY CENTER chartVu AddChartObject thePlotl Note how the ChartCalendar GetCalendarWidthValue method calculates the width of the bars as a function of time in this case a width of 8 months 257 Simple Plot Objects Simple bar plot example that displays numeric data values extracted from the example program Bargraphs class SimpleBars C ChartAttribute attribl new ChartAttribute Colors Green 0 DashStyles Solid Colors Green attribl SetFillFlag true SimpleBarPlot thePlotl new SimpleBarPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 0 0 attribl ChartObj JUSTIFY CENTER NumericLabel bardatavalue thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumer
235. artText theFont New ChartFont SansSerif 10 FontStyles Normal Dim x1 numPoints 1 As Double Dim yl numPoints 1 As Double Dim i As Integer For i 0 To numPoints 1 attribs i New ChartAttribute Colors Black 1 0 attribs i SetFillColor colorArray i Next i SILKE 5 9 SET 0 2 xl l 2 2 SZ 0 0 x1 2 3 5 yla 0 0 x1 3 4 2 yl ts 0 0 x1 4 3 7 yi 4 0 0 Dim Datasetl As New SimpleDataset First xl yl Dim pTransforml As New CartesianCoordinates pTransforml SetGraphBorderDiagonal 0 1 0 2 0 9 0 9 FontWeights Bold Pie Charts 346 347 Pie Charts Dim backgroundl As New Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 0 120 70 Color FromRgb 0 40 20 ChartObj Y AXIS chartVu AddChartObject backgroundl Dim thePlotl As New PieChart pTransforml Datasetl sPieStrings attribs ChartOobJ PIELABEL OUTSLICE ChartOobJ PIELABEL STRINGNUMVAL thePlotl SetStartPieSliceAngle 45 Dim labeltemplate As New NumericLabel labeltemplate SetNumericFormat ChartObj CURRENCYFORMAT labeltemplate SetDecimalPos 1 labeltemplate SetTextFont theFont thePlotl SetPlotLabelTemplate labeltemplate thePlotl SetLabelInOut 0 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 1 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 2 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 3 ChartObj PIELABEL INSLICE thePlotl SetLabelInOut 4 ChartObj PIELABEL INSLICE
236. artVu class CustomToolTip Redraws the chart using addChartObject DataToolTip ChartText stockpanel ChartCalendar xValues double stockPriceData double stockVolumeData double NASDAQData public CustomToolTip ChartView component ChartCalendar xvalues double stockpricedata double nasdaqdata double stockvolumedata base xValues xvalues stockPriceData stockpricedata stockVolumeData stockvolumedata NASDAQData nasdaqdata stockpanel GetTextTemplate Data ToolTips component public override void OnMouseUp MouseButtonEventArgs mouseevent base OnMouseUp mouseevent GetChartObjComponent UpdateDraw public override void OnMouseDown Point2D mousepos new Point2D mousepos SetLocation mouseevent X mouseevent Y base OnMouseDown mouseevent ChartPlot selectedPlot if selectedPlot null ChartPlot int selectedindex PhysicalCoordinates transform stockpanel SetChartObjScale transform Since the stockpanel object has not been added to the chart it will not be redrawn when the chart is redrawn MouseButtonEventArgs mouseevent GetSelectedPlotObj GetNearestPoint GetNearestPointIndex GetSelectedCoordinateSystem stockpanel SetLocation mousepos ChartObj DEV POS Stockpanel SetTextString Stock Data Looking to the original arrays because we just have the selectedindex yet
237. asdaqObj stockpanel SetChartObjEnable ChartObj OBJECT ENABLE Graphics oi GetToolTipGraphics Precalculates the text bounding box so that the size is known before it is drawn stockpanel PreCalcTextBoundingBox g2 Rectangle2D boundingbox stockpanel GetTextBox Reposition tooltip text box if top of box near top of graph window You can do the same thing for all four sides of the graph window if mousepos GetY boundingbox GetHeight lt 1 mousepos SetLocation mousepos GetX mousepos GetY boundingbox GetHeight stockpanel SetLocation mousepos ChartObj DEV POS Draws the tooltip text panel to the chart graphics context stockpanel Draw GetToolTipGraphics CustomToolTip stocktooltip new CustomToolTip chartVu xValues stockPriceData NASDAQData stockVolumeData stocktooltip SetDataToolTipFormat ChartObj DATA TOOLTIP CUSTOM Stocktooltip SetEnable true chartVu SetCurrentMouseListener stocktooltip Visual Basic Class CustomToolTip Inherits DataToolTip Private stockpanel As ChartText Private xValues As ChartCalendar Private stockPriceData As Double Private stockVolumeData As Double Private NASDAQData As Double Public Sub New ByVal component As ChartView ByVal xs As ChartCalendar ByVal stockprices As Double ByVal nasdaqs As Double ByVal stockvolumes As Double MyBase New component xValues xs stockPriceData stockprices
238. aset First x1 yl Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartX 0 pTransforml SetScaleStartY 0 Dim background As New Background pTransforml ChartObj PLOT BACKGROUND Color FromRgb 255 255 255 chartVu AddChartObject background Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Blue 3 DashStyles Solid Dim attribArray numGroups As ChartAttribute For i 0 To numGroups 1 attribArray i attribl Clone Next i Dim thePlotl As New MultiLinePlot pTransforml1 Datasetl attribArray chartVu AddChartObject thePlotl Simple Plot Objects 298 Open High Low Close Plots Class OHLCPlot GraphObj ChartPlot GroupPlot OHLCPlot The OHLCPlot class extends the GroupPlot class and displays stock market data in an open high low close format common in financial technical analysis Every item of the plot is a vertical line representing High and Low values with two small horizontal flags one left and one right extending from the vertical High Low line and representing the Open and Close values The number of groups must be four The Y 0 values of the group dataset represent the values for Open the Y 1 values for High the Y 2 values for Low and the Y 3 values for Close OHLCPlot constructor Visual Basic Overloa
239. aset It is used to supply data to the group plotting classes OHLC Candlestick GroupBar Stacked Bar etc A ChartEvent can have one or more y values In the case of an EventSimpleDataset usually it will have a single value as seen in the EventSimpleDataset programming example one y value for each x value In the EventGroupDataset each ChartEvent object can have multiple y values for each x value as seen in the programming example below Chart Datasets EventGroupDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal ev As ChartEvent_ Cf public EventGroupDataset string sname ChartEvent ev sname Specifies the name of the dataset ev An array of ChartEvent objects 108 Create an array of ChartEvent objects specifying the time stamp and y values for each ChartEvent object and use that to initialize a EventSimpleDataset The next constructor creates an EventGroupDataset using the x and y values stored in a file that uses the CSV Comma Separated Value format Only the COLUMN MAJOR format is supported where each row presents a ChartEvent object and the columns are organized as description short description x axis string label tool tip string position time stamp numeric time stamp y value index index for the y value to use when the ChartEvent contains multiple y values and the y values Visual Basic Overloads Public Sub New _ ByVal csv As CSV By
240. at where each data point is represented using a symbol SimpleVersaPlot The SimpleVersaPlot is a plot type that can be any of the four simple plot types LINE MARKER PLOT LINE PLOT BAR PLOT SCATTER PLOT It is used when you want to be able to change from one plot type to another without deleting the instance of the old plot object and creating an instance of the new Legend Classes LegendItem BubblePlotLegendItem Legend StandardLegend BubblePlotLegend Legends provide a key for interpreting the various plot objects in a graph It organizes a collection of legend items one for each plot objects in the graph and displays them in a rectangular frame Legend This class is the abstract base class for chart legends LegendItem This class is the legend item class for all plot objects except for bubble plots Each legend item manages one symbol and BubblePlotLegendItem StandardLegend BubblePlotLegend ChartGrid Classes ChartGrid PolarGrid AntennaGrid Class Architecture 60 descriptive text for that symbol The StandardLegend class uses objects of this type as legend items This class is the legend item class for bubble plots Each legend item manages a circle and descriptive text specifying the value of a bubble of this size The BubblePlotLegend class uses objects of this type as legend items This class is a concrete implementation of the Legend class and it is the legend class for all plot objects except for bubble
241. ataset x An array of ChartCalendar dates that specifies the x values of a dataset The length of the x array sets the number of columns for the group dataset y An array that specifies the y values of a group dataset where y has the dimensions number of rows number of columns The number of rows in the y array sets the number of groups in the group dataset The number of columns in the y array must match the length of the x array The number of columns in the group dataset is the value of x Length property The number of columns in the y array must match the length of the x array and every element must be initialized to a valid value All values in the arrays are plotted If the data is outside of the current chart scale the values will be clipped Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ Ct public TimeGroupDataset CSV csv string filename int rowskip int columnskip CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before reading the There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the time values and subsequent columns represent the y values where each column is a group If you use the ROW MAJOR for
242. atasetArray Scaling and Coordinate Systems 150 This method relies on the ability to detect when the time stamps of an event are equal In the case of pure time equality depends on the granularity you want in the display Events can be equal at the year month week day hour minute second and millisecond level So if you want events across multiple plots to line up by the minute not caring for differences in seconds or milliseconds you can do that Set the EventCoordinates property TimeStampResolution to ChartObj MINUTE The default value is ChartObj SECOND and if you want you can set the resolution to MILLISECOND SECOND MINUTE HOUR DAY OF YEAR WEEK OF YEAR MONTH or YEAR Make sure you set the resolution to a value below that what you want to see in your data If your data is sampled at 6 second intervals and you want to see each value at a unique position on the x axis set the TimeStampResolution to SECOND If you set it to MINUTE all of the samples within a minute interval will be grouped together at a single Position value Below is an example of a chart with multiple overlapping datasets sampled at different resolutions Candlestick Chart OHLC P o 2 Q 732 7 1852 7 232 7 282 All plot types will cross time discontinuities without gaps When the merged datasets have the Position values of their ChartEvent objects modified to repflect the true position of the ChartEvent in the graph the auto positio
243. ates Use one of the position constants DEV POS PHYS POS NORM GRAPH POS NORM PLOT POS The rotation in degrees of the shape in the normal viewing plane The rotation will take place about the objects 0 0 0 0 coordinate If the object is not defined with a center of 0 0 0 0 it may be rotated out of the current viewing plane ChartShape example extracted from the example program MultiLinePlots class MultiLines C ChartView chartVu new ChartView 391 Lines Shapes Images and Arrows Color alphaColor Color FromArgb 127 170 100 50 ChartAttribute attrib2 new ChartAttribute alphaColor 1 DashStyles Solid alphaColor attrib2 SetFillFlag true Rectangle2D linearRegionRect new Rectangle2D 0 1 0 1 1 5 50 PathGeometry rectpath new PathGeometry RectangleGeometry recgeo new RectangleGeometry linearRegionRect GetRect iz rectpath AddGeometry recgeo ChartShape linearRegionShape new ChartShape pTransforml rectpath ChartOb PHYS POS 0 0 0 0 GhartObj PHYS FOG 0 linearRegionShape SetChartObjAttributes attrib2 chartVu AddChartObject linearRegionShape Visual Basic Dim alphaColor As Color Color FromArgb 127 170 100 50 Dim attrib2 As New ChartAttribute alphaColor 1 DashStyles Solid alphaColor attrib2 SetFillFlag True Dim linearRegionRect As New Rectangle2D 0 1 0 1 1 5 50 Dim rectpath As New PathGeometry Dim recgeo As New RectangleGeometry linearRegionRect
244. ates _ ByVal dataset As SimpleDataset _ ByVal symtype As Integer _ ByVal lineattrib As ChartAttribute ByVal symbolattrib As ChartAttribute Ct public AntennaLineMarkerPlot AntennaCoordinates transform SimpleDataset dataset int symtype ChartAttribute lineattrib ChartAttribute symbolattrib transform The coordinate system for the new AntennaLineMarkerPlot object dataset The line marker plot represents the values in this dataset symtype The symbol used in the line marker plot Use one of the scatter plot symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR CIRCLE lineattrib Specifies the attributes line color and line style for the line part of the line marker plot symbolattrib Specifies the attributes line and fill color for the symbol part of the line marker plot Antenna line marker plot extracted from the example program PolarCharts AntennaLineMarkerChart C Color transparentRed Color FromArgb 180 255 0 0 Color transparentBlue Color FromArgb 180 0 0 255 ChartAttribute attribl new ChartAttribute transparentRed 1 DashStyles Solid attribl SymbolSize 7 357 Polar and Antenna Charts Q hartAttribute attrib2 olors Blue new ChartAttribute Colors Blue 1 CH attrib2 SymbolSize 7 ChartAttribute attrib3 new ChartAttribute Colors Yellow 3 DashStyles Solid Colors Yellow
245. atingBarPlot ChartTitle FloatingStackedBarPlot AxisTitle GroupBarPlot ChartLabel HistogramPlot NumericLabel LineGapPlot BarDatapointValue MultiLinePlot TimeLabel OHLCPlot ElapsedTimeLabel StackedBarPlot StringLabel StackedLinePlot AxisLabels BoxWhiskerPlot NumericAxisLabels GroupVersaPlot TimeAxisLabels PieChart ElapsedTimeAxisLabels RingChart StringAxisLabels PolarPlot PolarAxesLabels PolarLinePlot AntennaAxesLabels PolarScatterPlot EventAxisLabels AntennaPlot ChartGrid AntennaLinePlot PolarGrid AntennaScatterPlot AntennaGrid AntennaLineMarkerPlot LegendItem BubblePlotLegendItem Background Legend ChartImage StandardLegend ChartShape BubblePlotLegend ChartSymbol ChartPlot Marker SimplePlot ChartZoom Source Code Differences between the Net Forms version of QCChart2D QCRTGraph and the WPF version There are some minor difference in the names of classes between this and the original Net Forms based version of QCChart2D These differences are summarized below All of these changes are the result of changes in base types used by WPF or conflicts between the original QCChart2D software and base classes in WPF If you intend to translate applications from the original QCChart2D for Net software to the WPF version take special note of these differences It can be confusing because in WPF many classes have the same name as their Net Forms equivalents Color Timer Color FromArgb and MouseEventArgs are a few It is just that the
246. ationl summary Interaction logic for Windowl xaml summary public partial class Windowl Window SimpleScatter sp null ChartPrint cp null public Windowl InitializeComponent InitializeCharts 7 void InitializeCharts sp new SimpleScatter chartViewl chartViewl PreferredSize new Size 600 400 The reference to chartView1 PreferredSize tells the software that the font sizes specified in the graph are with respect to a chart window of size 600 400 If the chart is sized larger than this the fonts will be larger if it is sized smaller the fonts will be smaller Build the Solution Build Build Solution If the project fails to compile you need to go back and check the errors and the previous steps When it runs properly it the SimpleScatterPlot chart looks like 417 Using QCChart2D for WPF to Create Windows Applications Wi Window1 DAR Theoretical vs Experimental Data e Quinn Curtis 5 a gt o x G S z 2 2 L 2 o co o z 40 60 MBAs 1000 employees Energy Companies Software Companies Predicted Scatter plots usually display some form of sampled data There are other ways to incorporate charts into your application You can add a UserControl to your program Add UserControl and place the chart entirely in the UserControl The ChartView object is referenced in the Grid panel of the UserControl s xaml file and
247. ax width of cells Dim maxx As Double pTransforml GetScaleStopX 20 Add in max height of cells Dim maxy As Double pTransforml GetScaleStopY 10 pTransforml SetScaleStopX maxx pTransforml SetScaleStopY maxy Re auto scale to produce rounded axis values pTransforml AutoScale ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Blue 1 DashStyles Solid attribl SetFillColor Colors Blu e attribl SetFillFlag True Dim thePlotl As New CellPlot pTransforml Datasetl attribl For i 0 To numPoints 1 thePlotl SetSegmentColor i Color FromRgb CInt xl1 i _ IOS e ED LR SD Cink yl i L yl te 1 ZK Next i chartVu AddChartObject thePlotl Note the use of the GroupDataset method SetAutoScaleNumberGroups This forces the auto scale routine to look at just the first group of values Y 0 because those are the only absolute position values The maximum cell width and height are calculated and added to the initial scale The auto scale function is then rerun producing a coordinate system that takes into account the widths and heights of the cells Error Bar Plots Class ErrorBarPlot GraphObj ChartPlot GroupPlot ErrorBarPlot 281 Simple Plot Objects The ErrorBarPlot class extends the GroupPlot class and displays error bars Error bars are two lines positioned around a data point to signify the sta
248. axl 15 double yMinl 0 double yMaxl 105 CartesianCoordinates pTransforml new CartesianCoordinates xMinl yMinl xMaxl yMax1 pTransforml SetGraphBorderDiagonal 0 1 15 90 0 6 double xMin2 50 double xMax2 150 double yMin2 0 double yMax2 1050 CartesianCoordinates pTransform2 new CartesianCoordinates xMin2 yMin2 xMax2 yMax2 pTransform2 SetGraphBorderDiagonal 0 1 15 90 0 6 Visual Basic Dim xMinl As Double 5 Dim xMaxl As Double 15 Dim yMinl As Double 0 Dim yMax1 As Double 105 Dim pTransforml As CartesianCoordinates _ New CartesianCoordinates xMinl yMinl xMaxl yMax1 pTransforml SetGraphBorderDiagonal 0 1 15 90 0 6 167 The Chart View Dim xMin2 As Double 50 Dim xMax2 As Double 150 Dim yMin2 As Double 0 Dim yMax2 As Double 105 Dim pTransform2 As CartesianCoordinates _ New CartesianCoordinates xMin2 yMin2 xMax2 yMax2 pTransform2 SetGraphBorderDiagonal 0 1 15 90 0 6 ChartView Object Resize Modes Every GraphObj object has absolute size properties such as font size or line thickness Resize a window and these absolute size parameters are NOT changed No matter how you resize a chart if you set a text object to a font size of 10 the text object will always return a font size of 10 regardless if the text now appears larger or smaller Instead the value of the ResizeMultiplier adjusts to represent the proportional change in the window size
249. barbreakpoints 90 attribl Gradient cg attribl SetFillFlag True Dim thePlotl As New SimpleBarPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 0 0 attribl ChartObj JUSTIFY CENTER Dim bardatavalue As NumericLabel thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj CURRENCYFORMAT bardatavalue SetDecimalPos 0 bardatavalue SetColor Colors Black bardatavalue TextBgColor Colors White bardatavalue TextBgMode True thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue True chartVu AddChartObject thePlotl FontWeights Bold of the bars displayed above or inside each bar 441 Using QCChart2D for WPF to Create Web Applications Dim attrib3 As New ChartAttribute Colors Gray 1 DashStyles Dot Dim ygrid As New ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR ygrid SetChartObjAttributes attrib3 chartVu AddChartObject ygrid Dim theTitleFont As New ChartFont Microsoft Sans Serif 22 FontStyles Normal Dim mainTitle As New ChartTitle pTransforml theTitleFont Sales Are On Fire mainTitle SetTitleType ChartObj CHART HEADER mainTitle SetTitlePosition ChartObj CENTER GRAPH mainTitle SetColor Colors Black chartVu AddChartObject mainTitle Dim theFooterFont As New ChartFont Microsoft Sans Serif 10 FontStyles Normal Dim footer As New ChartTitle pTransforml th
250. belCntr nearestPoint GetX nearestPoint GetY PHYS POS _ DECIMALFORMAT 0 Nudge text to the right and up so that it does not write over marker pointLabel SetTextNudge 5 5 chartview AddChartObject pointLabel chartview UpdateDraw End If End If End Sub End Class Another common reason for locating a data point is to display information associated with that data point A good example is stock market data A typical stock market display is a one month chart of daily closing values for one or more stocks You want to be able to click on a point in the chart and have the open high low and closing value for that day displayed in a pop up box The example program FinancialExample OHLCFinPlot demonstrates how this can be done in a custom tool tip In another related example the program PieCharts SimplePieChart shows how to trap a click on a specific pie slice and display additional data for that slice using a ChartText object 14 Moving Chart Objects Data Points and Coordinate Systems MoveObj MoveData MoveCoordinates Many of the subclasses of GraphObj are moveable using the mouse This includes the axis legend text image shape classes If you add the necessary support to your program you can click and drag the object around in the chart This may or not be desirable since a user can ruin a carefully constructed chart by dragging objects around It is just an option though that you can add to the program It is also poss
251. bels Possible date labels Possible time labels Possible numeric labels for todays date for the current time for the value 12340 July 19 2002 15 15 11 24 Hour Mode 12340 0 Decimal 2002 15 115 24 Hour Mode 1 2340E4 Scientific 7 2002 15 11 Minute Second 12 340K Business 7119 2002 3 15 31 12 Hour Mode 123400096 Percent 19 07 2002 3 15 12 Hour Mode 1 2340x10 Exponent 02 6 12340 Currency 7102 A Ce 79 02 19 07 02 Nd Multi line and rotated 0 360 degrees July g axis labels are supported e Jul Cu J AO Friday HEET TE WR H 1 E TTT FEEF Western Eastern Southern Northern Sales Sales Sales Sales Region Region Region Region Fri F In addition to the predefined formats programmers can define custom time date and numeric formats AxisLabels This class is the abstract base class for all axis label objects It places numeric labels date time labels or arbitrary text labels at the major tick marks of the associated axis object In addition to the standard font options type size style color etc axis label text can be rotated 360 degrees in one degree increments NumericAxisLabels This class labels the major tick marks of the LinearAxis and LogAxis classes The class supports many predefined and user definable formats including numeric exponent percentage business and currency formats StringAxisLabels This class labels the major tick marks of the LinearAxis and LogAxis classes using user defined strings
252. bject Then a chart initialization routine is called which adds chart objects to the ChartView This defines the chart See the SimpleBars vb file of the WPFChartBrowserApplicationl example Imports com quinncurtis chart2dwpf Class SimpleBars Public Sub New ByVal chartVu As ChartView DefineSimpleBars chartVu End Sub Private Sub DefineSimpleBars ByVal chartVu As ChartView Dim theFont As ChartFont Dim nnumpnts As Integer 8 Dim x1 As ChartCalendar New ChartCalendar nnumpnts 1 Dim yl As Double New Double nnumpnts 1 Dim currentdate As New ChartCalendar 1998 ChartObj JANUARY 1 Dim i As Integer yl 0 100 x1 0 DirectCast currentdate Clone currentdate Add ChartObj MONTH 12 For i 1 To nnumpnts 1 i DirectCast currentdate Clone ChartCalendar i yl i 1 25 i 0 75 ChartSupport GetRandomDouble ChartCalendar x1 yl Using QCChart2D for WPF to Create Web Applications 440 currentdate Add ChartObj MONTH 12 Next theFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal Dim Datasetl As New TimeSimpleDataset Actual Sales xl yl Dim pTransforml As New TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleStartY 0 pTransforml SetTimeScaleStart New ChartCalendar 1997 ChartObj JULY 1 pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 8 Dim background As New Background pTran
253. bl SetFillFlag True attribl SetSymbolSize 10 Dim thePlotl As New SimpleScatterPlo chartVu AddChartObject thePlotl Dim attrib2 As New ChartAttribute Co chartVu AddChartObject thePlot2 Dim attrib3 As New ChartAttribute Co attrib3 SetFillColor Colors Red attrib3 SetFillFlag True attrib3 SetSymbolSize 6 Dim thePlot3 As New SimpleScatterPlo Dim background As New Background pTransforml Kn Ate ie qs Dim xAxis As New LinearAxis pTransforml ChartObj Dim yAxis As New LinearAxis pTransforml ChartObj Dim xAxisLab As New NumericAxisLabels xAxis Dim yAxisLab As New NumericAxisLabels yAxis Dim xaxistitle As New AxisTitle xAxis titleFont Dim xgrid As New ChartGrid xAxis yAxis ChartObj Dim ygrid As New ChartGrid xAxis yAxis ChartObj T rs Blue 1 t pTransforml lors Green 3 Dim thePlot2 As New SimpleLinePlot pTransforml Datasetl attrib2 lors Red 1 t pTransforml S Ue Se ChartObj PLOT BACKGROUND Colors White X AXIS X AXIS Dim titleFont As New ChartFont Microsoft Sans Serif 10 FontStyles Normal Dim yaxistitle As New AxisTitle yAxis titleFont Measurable work output 4 MBAs 1000 employees X AXIS ChartObj GRID MAJOR Y AXIS ChartObj GRID MAJOR DashStyles Solid Dataset2 ChartObj CROSS attribl DashStyles Solid DashStyles Solid e Datasets ChartObj CIRCLE attrib3 425 Using QCChart2D for WPF to Create W
254. blic PolarLinePlot PolarCoordinates transform SimpleDataset dataset ChartAttribute attrib transform The coordinate system for the new PolarLinePlot object dataset The polar line plot represents the polar coordinate values in this dataset The x values of the dataset represent the magnitudes of the points and the y values the polar angles in radians attrib Specifies the attributes line color and line style for the line plot Polar and Antenna Charts 350 The polar line plot class interpolates between adjacent data points in polar coordinates and not using straight lines as in the Cartesian coordinate plotting functions This gives the lines between adjacent data points in a polar plot a curved look Polar line plot and scatter plot chart extracted from the example program PolarCharts PolarLineAndScatterChart C int numpl 100 double magl new double numpl double Jangl new double numpl int i for i 07 i lt numpl i angl i ChartSupport ToRadians double i 360 0 double nump1 magl i Math Abs 30 Math Sin 2 angl i Math Cos 2 angl i theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold chartVu this SimpleDataset Datasetl new SimpleDataset First magl angl PolarCoordinates pPolarTransform new PolarCoordinates pPolarTransform SetGraphBorderDiagonal 0 25 20 75 0 8 Background background new Background pP
255. bol attrib Specifies the ChartAttribute object to get the color and fill attributes of the legend item thefont Specifies the text font for the legend item The AddLegendltem returns the current number of legend items Simple legend example extracted from the example program PolarCharts class PolarLineFillAndScatterChart C SimpleLinePlot thePlotl new SimpleLinePlot pTransforml1 Datasetl attribl chartVu AddChartObject thePlotl SimpleLinePlot thePlot2 new SimpleLinePlot pTransforml Dataset2 attrib2 chartVu AddChartObject thePlot2 Legends 364 SimpleLinePlot thePlot3 new SimpleLinePlot pTransforml Dataset3 profitAttrib ChartFont legendFont new ChartFont SansSerif 14 FontStyles Normal FontWeights Bold ChartAttribute legendAttributes new ChartAttribute Colors Gray 1 DashStyles Solid Color FromRgb l55 155 155 legendAttributes SetFillFlag true legendAttributes SetLineFlag true StandardLegend legend new StandardLegend 0 2 0 15 0 3 0 3 legendAttributes StandardLegend VERT DIR legend AddLegendItem Expenses ChartObj LINE thePlotl legendFont legend AddLegendItem Revenue ChartObj LINE thePlot2 legendFont legend AddLegendItem Profit ChartObj HBAR thePlot3 legendFont legend AddLegendItem Loss ChartObj HBAR lossAttrib legendFont chartVu AddChartObject legend Visual Basic Dim thePlotl As SimpleLinePlot New SimpleLinePlot pTransform
256. butes method Visual Basic Public Sub SetAxisTicksAttributes _ ByVal minorticklength As Double _ ByVal majorticklength As Double _ ByVal tickdir As Integer Ct public void SetAxisTicksAttributes double minorticklength double majorticklength Ant tiokdir intercept Sets the intercept of this axis with the perpendicular axis in physical coordinates minorticklength Specifies the length of a minor tick mark in WPF device coordinates majorticklength Specifies the length of a major tick mark in WPF device coordinates tickdir Specifies the direction of the tick marks with respect to axis line Use one of the following tick direction constants AXIS MIN AXIS CENTER AXIS MAX Customize the line and tick mark drawing properties of the axis using the SetLineWidth SetLineStyle and SetColor methods Simple time axis example C Define a Time coordinate system ChartCalendar xMin new ChartCalendar 1996 ChartObj FEBRUARY ChartCalendar xMax new ChartCalendar 2002 ChartObj JANUARY double yMin 0 double yMax 105 TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed TimeAxis xAxis new TimeAxis simpleTimeScale Create the linear y axis 5 5 LinearAxis yAxis new LinearAxis simpleTimeScale ChartObj Y AXIS Visual Basic Define a Time coordinate system Dim xMin As ChartCalendar
257. cale C TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale SetCoordinateBounds xMin yMax xMax yMin Visual Basic Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale SetCoordinateBounds Min yMax xMax yMin 161 Scaling and Coordinate Systems The auto scale functions always create scales that increase from left to right and bottom to top This does not exclude the use of the auto scale functions when creating inverted axes After an auto scale function creates the initial x and y scales either or both can be inverted by using the CartesianCoordinates or TimeCoordinates InvertScaleX or InvertScaleY methods Example of inverting a scale created using the auto scale methods C double xData 2 3 4 5 6 7 8 9 double yData 22 33 44 55 46 33 25 14 SimpleDataset dataset new SimpleDataset Sales xData yData CartesianCoordinates simpleScale new CartesianCoordinates simpleScale AutoScale dataset simpleScale InvertScaleY Visual Basic Dim xData As Double Dim yData As Double 2 3 4 5 6 7 8 9 22 33 44 55 46 33 25 14 Dim dataset As SimpleDataset New SimpleDataset Sales xData yData Dim simpleScale As CartesianCoordinates New CartesianCoordinates simpleScale AutoScale dataset simpleScale InvertScaleY 5 The Chart View ChartView The starting point of a chart is the ChartView class The ChartVi
258. can be positive or negative The maximum value should always be greater than the minimum value though The angular scale is always 360 degrees corresponding to a full circle The angular scale starts with 0 degrees at 12 00 and increases clockwise Antenna Axis Minor and Major Tick Mark Intervals Antenna axes use two sets of tick mark properties one set for the y axis and the other set for the circular axis The y axis has major and minor tick mark properties as does the circular axis Creating antenna axes There is only one constructor for AntennaAxes objects AntennaAxes AntennaCoordinates transform transform The transform coordinate system defines the axis extents of the antenna axes The AntennaAxes constructor assumes that the axis extents match the extents of the underlying coordinate system transform 213 Axes Other axis properties minor tick mark spacing number of minor tick marks per major tick mark tick mark direction and tick mark lengths are automatically calculated using an auto axis method These properties can be explicitly set if you need to override the automatically calculated values Visual Basic Overloads Public Sub SetAntennaAxesTicks ByVal axestickspace As Double _ ByVal axesntickspermajor As Integer _ ByVal angletickspace As Double _ ByVal anglentickspermajor As Integer Overloads Public Sub SetAntennaAxesTicks ByVal axestickspace As Double _ ByVal axesntickspermajor As Integer
259. can use an auto scale routine to analyze a dataset and select the appropriate antenna radius limits C double angleData 0 30 60 90 120 150 180 In degrees double lradiusData 35 31 5 12 14 14 30 SimpleDataset dataset new SimpleDataset Control angleData radiusData AntennaCoordinates antennacoords new AntennaCoordinates antennacoords AutoScale dataset ChartObj AUTOAXES FAR Visual Basic Dim angleData As Double 0 30 60 90 120 150 180 In degrees Dim radiusData As Double 35 31 5 12 14 14 30 Dim dataset As SimpleDataset _ New SimpleDataset Control angleData radiusData Dim antennacoords As AntennaCoordinates New AntennaCoordinates antennacoords AutoScale dataset ChartObj AUTOAXES FAR Miscellaneous Coordinate System Topics Inverted Coordinate Systems Charts that use linear logarithmic and time coordinate systems usually follow the convention that values increase as you move from left to right and from bottom to top This is not always the case though Many standard charts that users want to reproduce on the computer have the x scale the y scale or both increase as you move from right to left and from top to bottom Invert the x and or y scales by swapping the scale starting and ending vaues in the call to the CartesianCoordinates or the TimeCoordinates constructor Example of inverted x scale using the CartesianCoordinates constructor
260. cep yAxis3 SetAxisTickDir this UpdateDraw VB Public Sub UpdateScaleAndAx pTransforml ScaleStartX pTransforml ScaleStopX pTransform2 ScaleStartX pTransform2 ScaleStopX pTransform3 ScaleStartX pTransform3 ScaleStopX xAxisl CalcAutoAxis yAxisl CalcAutoAxis Scaling and Coordinate Systems t pTransform2 GetStopY ChartObj AXIS MAX Labels Labels t pTransform3 GetStopX ChartObj AXIS MAX esUsingEventIndex ByVal startindex As Integer startindex Startindex numberEventsInView 1 Startindex Startindex numberEventsInView 1 startindex Startindex numberEventsInView 1 xAxisLabl CalcAutoAxisLabels yAxisLabl CalcAutoAxisLabels xAxis2 CalcAutoAxis xAxis2 SetAxisIntercept pTransform2 GetStopY xAxis2 SetAxisTickDir Cha yAxis2 CalcAutoAxis rtObj AXIS MAX yAxisLab2 CalcAutoAxisLabels yAxis3 CalcAutoAxis yAxisLab3 CalcAutoAxisLabels yAxis3 SetAxisIntercept pTransform3 GetStopX yAxis3 SetAxisTickDir Cha Me UpdateDraw End Sub rtObj AXIS MAX 154 155 Scaling and Coordinate Systems S Form BAR Candlestick Chart Custom Axis Labels Elapsed Time Vertical Event Axis Numeric Multiline Daily Stock Price Price Volume NASDAQ 9 03 12 9 10 12 9 17 12 9 24 12 The classic stock price chart combines a open high low close plot line plot and bar plot Press and
261. cified in degrees If the raw data is in radians convert the data to degrees using the ChartSupport ToDegrees method If you plan to create polar charts you need to also familiarize yourself with the polar charting classes describe in the other chapters of this manual These are the chapters on coordinate systems PolarCoordinates in Chapter 4 axes PolarAxes in Chapter 7 axis labels PolarAxesLabels in Chapter 8 and grids PolarGrids in Chapter 9 The same is true if you plan to create antenna charts Refer to the documentation in the chapters on coordinate systems AntennaCoordinates in Chapter 4 axes AntennaAxes in Chapter 7 axis labels AntennaAxesLabels in Chapter 8 and grids AntennaGrids in Chapter 9 349 Polar and Antenna Charts The ChartZoom MagniView and MoveCoordinates classes require a rectangular coordinate system and will not work with polar and antenna charts The MoveData class does work with polar and antenna charts Polar Plots Class PolarLinePlot GraphObj ChartPlot PolarPlot PolarLinePlot The PolarLinePlot class is a concrete implementation of the PolarPlot class and displays data in a simple line plot format The lines drawn between adjacent data points use polar coordinate interpolation PolarLinePlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PolarCoordinates _ ByVal dataset As SimpleDataset ByVal attrib As ChartAttribute Ct pu
262. cing the space requirements Expressing a numeric value in scientific notation can reduce the amount of space a label requires if the numeric value requires eight or more digits If the label values end in a lot of zeros 10000000 9000000 8000000 a major reduction in space is achieved by using the business format which replaces all of the zeros with a letter 10M 9M 8M The axis numeric labels constants are listed below Numeric Format Constant Description DECIMALFORMAT Decimal format i e 1234 563 SCIENTIFICFORMAT Scientific or exponential format 1 23e3 BUSINESSFORMAT Business format where the letters K M B or T are appended on the end a truncated numeric value i e 1 23 14K 44M 32B 3 0T ENGINEERINGFORMAT Ifthe absolute value of the label is greater than 1 0e6 or less than 1 0e 6 the scientific format is used else the decimal format is used PERCENTFORMAT The value of a label is multiplied by 100 and the character is appended on the end of the label EXPONENTFORMAT The value of a label is multiplied by 100 and the character is appended on the end of the label CURRENCEYBUSINESSFORMAT A character is appended to the front of the label and the values are abbreviated the same as the BUSINESSFORMAT CURRENCEYFORMAT A character is appended to the front of the label Axis Labels 220 NumericAxisLabels constructor There is only one main constructor for NumericAxisLabels objects Visua
263. class displays numeric labels exclusively for the AntennaAxes class It uses labels in the same format as the NumericAxisLabels Class AxisLabels GraphObj ChartText AxisLabels Axis Labels 218 The AxisLabels class is the abstract base class for all axis label objects It contains the properties and methods common to subclasses implementing more specialized axis labels Axis Label Text The AxisLabels class includes a reference to a ChartFont object If a valid font is not supplied a default font is created and used Every axis labels object can have a unique font associated with it The ChartFont object defines the font typeface size and style The font for any of the axis labels can be set using the AxisLabels SetTextFont method The AxisLabels class manages other text attributes not directly associated with the font These include the text foreground color the text background color and the rotation of the text if it is different from the normal horizontal orientation It is common to rotate x axis labels 90 degrees so that they are vertical rather than horizontal in order to squeeze more tick mark labels in along the x axis Axis Labels Positioning The AxisLabels class manages the placement of the axis labels with respect to the underlying axis tick marks Labels can be place above or below the tick marks of a horizontal x axis and to the left or right of the tick marks for a vertical y axis The axis label justification
264. constructors with fewer parameters if all you want to do is set a line color or a line color with a line thickness 175 Colors Gradients and Backgrounds Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal gradmode As Integer ByVal gradcolors As Color ByVal gradbreak As Double _ ByVal graddir As Integer Overloads Public Sub New ByVal gradmode As Integer ByVal gradcolors As Color ByVal gradbreak As Double _ ByVal graddir As Integer C public ChartGradient PhysicalCoordinates transform int gradmode Color gradcolors double gradbreak int graddir public ChartGradient int gradmode Color gqgradscolors double gradbreak int graddir gradcolors gradbreak graddir gradmode transform An array of colors used to define the gradient An array of gradient breakpoints one for each color The range of values depends on the mapping mode For the GRADIENT MAPTO OBJECT GRADIENT MAPTO PLOT NORMALIZED COORDINATES and GRADIENT MAPTO GRAPH NORMALIZED COORDINATES modes the first value of the array should always be 0 0 and the last value should always be 1 0 The direction of the gradient in degrees At 0 degrees the direction is 3 00 Positive degrees rotate clockwise When used with the GRADIENT MAPTO PLOT PHYSICAL COORDINATES mapping mode always make degrees even divisible by 90 The mapping mode of the breakpoints to the gradient
265. cursor The data cursor tracks the mouse motion as long as the mouse button is pressed Release the button and the data cursor disappears This makes it easier to line up the mouse position with the tick marks of an axis This class selects and moves individual data points of an object derived from the SimplePlot class A data tooltip is a popup box that displays the value of a data point in a chart The data value can consist of the x value the y value x and y values group values and open high low close values for a given point in a chart This class implements mouse controlled zooming for one or more simultaneous axes The user starts zooming by holding down a MagniView MoveCoordinates MultiMouseListener Class Architecture 64 mouse button with the mouse cursor in the plot area of a graph The mouse is dragged and then released The rectangle established by mouse start and stop points defines the new zoomed scale of the associated axes Zooming has many different modes Some of the combinations are One x or one y axis One x and one y axes One x and multiple y axes One y and multiple x axes Multiple x and y axes 3 amp 9 amp 9 9 This class implements mouse controlled magnification for one or more simultaneous axes This class implements a chart magnify class based on the MouseListener class It uses two charts the source chart and the target chart The source chart displays the chart in its unmag
266. d 1 3 11 17 23 28 34 66 88 105 161 169 174 175 176 177 205 206 216 236 251 252 254 257 267 285 287 288 290 292 293 295 301 302 305 306 335 343 344 345 348 349 351 352 371 380 382 383 384 385 386 387 390 410 412 420 422 430 438 446 Bat plog 2 ote diete Ee SimpleBarPlot 55 66 92 249 252 253 254 255 316 333 431 438 Box and Whisker cene den Tees BoxWhiskerPlot43 45 66 268 269 270 271 272 BoxWhiskerPlot 43 45 66 268 269 270 271 272 BoxWhiskerPlot43 45 66 268 269 270 271 272 Bubble plot legend items ess BubblePlotLegendItem Bubble plot legends BubblePlotLegend 57 58 66 358 362 363 364 365 366 Bubble plots ives 5 2 n ih e cte rto cette BubblePlot 44 45 57 58 66 265 272 273 2714 358 362 363 364 365 366 BubblePlot 44 45 66 265 272 273 274 363 364 365 BubblePlotLegend57 58 66 358 362 363 364 365 366 BubblePlotLegendltem 57 58 66 363 Buffered IMA gessie eerdre ieai Eeer BufferedImage 62 63 65 395 398 399 400 401 402 403 404 405 456 461 BufferedImage 62 63 65 395 398 399 400 401 403 461 Calendar up lte ChartCalendar 29 30 33 38 59 63 65 72 76 77 78 79 93 94 95 98 99 100 101 106 107 108 122 123 124 125 126 127 128 129 130 131 132 133 134 143 144 153 154 467 Appendix
267. d C T ChartCalendar xMin new ChartCalendar 1996 ChartObj FEBRUARY 5 ChartCalendar xMax new ChartCalendar 2002 ChartObj JANUARY 5 double yMin 0 double yMax 105 TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale SetTimeCoordinateBounds xMin yMin xMax yMax Visual Basic Dim xMin As ChartCalendar Dim xMax As ChartCalendar Dim yMin As Double 0 Dim yMax As Double 105 New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 2002 ChartObj JANUARY 5 Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale SetTimeCoordinateBounds xMin yMin xMax yMax Example of explicit scaling of a TimeCoordinates object numeric x scale and time y scale using the TimeCoordinates SetTimeCoordinateBounds method C double xMin OF double xMax 105 ChartCalendar yMin new ChartCalendar 1996 ChartObj FEBRUARY 5 ChartCalendar yMax new ChartCalendar 2002 ChartObj JANUARY 5 TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale SetTimeCoordinateBounds xMin yMin xMax yMax Visual Basic Dim xMin As Double 0 Dim xMax As Double 105 Dim yMin As ChartCalendar Dim yMax As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 2002 ChartObj JANUARY 5 Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale SetTimeCoordinateBounds xMin yMin xMax
268. d format the data values are set to invalid date time values You can also modify a point at a time using SetEvent If you need to add new points to the dataset increasing its size use one of the AddEvent or InsertEvent methods Delete data points using the DeleteEvent method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a simple event datasets extracted from the ChartEventExamples CandlestickEventChart example program C double minval 0 0 maxval 0 0 int incrementbase ChartObj MINUTE int increment 10 ChartCalendar currentdate new ChartCalendar ChartEvent eventArray new ChartEvent nNumPnts ChartEvent currentEvent new ChartEvent for i 0 i lt nNumBPnts i double position i 1 if i 0 currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode currentdate SetTOD 9 33 0 xValues 0 ChartCalendar currentdate Clone currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode stockPriceData 3 25 close stockPriceData 0 25 open stockPriceData 1 26 high StockPriceData 2 24 low currentEvent new ChartEvent xValues 0 1 stockPriceData currentEvent AxisLabel XXX 1 eventArray 0 currentEvent j else xValues i ChartCalendar currentdate Clone stockPriceData 3 2 0 5 ChartSupport GetRandomDouble close stockPriceData 0
269. d hartVu AddC ChartObj CROSS ChartObj CIRCLE using using using using using using using using LinearAxis yAxis hartObject c NumericAxisLabels xAxisLab tTextFont theFont ect xAxisLab xAxis hartVu Addc c NumericAxisl yAxis hartVu AddC c c AxisTitle xaxistitl hartVu AddC c c c att Qarunuma ana ChartAttribute attrib2 leLinePlot thePlot2 chartVu AddChartObject t at oomon nm g nar Char AxisTitle yaxistitl hartVu Addc hartAttribu ttribl SetFillColor Simpl har ttrib3 SetFillColor impl rib3 hartVu AddChartObject thePlot3 tVu AddC Lab Se hartObj L Lab SetTex hartObj tFont titleFont hartObj hartObj hartObj hartObj ttriblSetFIillFlag ttribl SetSymbol Lttrib3 SetFillFlag ttrib3 SetSymbol ect te attribl lSize impleScatterPlot thePlot ibl hartVu AddChartObject t tAttribute attrib3 lSize leScatterPlot thePlot3 new LinearAxis pTransform yAxis Labels yAxisLab tFont theFont ect yAxisLab ne E YS ne xa new ChartGrid xAxis ect xgrid new ChartGrid xAxis ygrid Col true 10 n Col true 6 new ChartFont Microsoft Sans Serif titleFont w AxisTitle yAxis xistitle w AxisTitle xAxis xistitle yAxis ChartObj yAxis Charto new ChartAttribute ors Blue i Col hePlotl new ChartAtt
270. d it is the primary legend class for all plot objects except for bubble plots The legend items objects display in a row or column format Each legend item contains a symbol and descriptive string The symbol normally associates the legend item to a particular plot object and the descriptive string describes what the plot object represents The BubblePlotLegend is a concrete implementation of the Legend class and it is the legend class for bubble plots The legend items objects display as offset concentric circles with descriptive text giving the key for the value associated with a bubble of this size Standard Legends Class StandardLegend GraphObj t StandardLegend The StandardLegend is the primary legend class for all plot objects except for bubble plots The class manages a list of LegendItems that holds the symbols and descriptive text for the symbols 361 Legends StandardLegend constructors Visual Basic Overloads Public Sub New _ ByVal rx As Double ByVal ry As Double _ ByVal attrib As ChartAttribute ByVal nlayoutimode As Integer _ Overloads Public Sub New _ ByVal rx As Double ByVal ry As Double _ ByVal rwidth As Double _ ByVal rheight As Double _ ByVal attrib As ChartAttribute ByVal nlayoutimode As Integer _ Ct public StandardLegend double rx double ry ChartAttribute attrib int nlayoutimode LE public StandardLegend double rx double ry double
271. d largest observation display graphically in a chart Read the Wikipedia entry for more information concerning box and whisker plots http en wikipedia org wiki Box_plot BoxWhiskerPlot constructor Visual Basic Declaration Public Sub New _ transform As PhysicalCoordinates rwidth As Double _ attrib As ChartAttribute CH public BoxWhiskerPlot PhysicalCoordinates transform double rwidth ChartAttribute attrib transform The coordinate system for the new BoxWhiskerPlot object 271 Simple Plot Objects rwidth The width of the candlestick box in physical coordinates attrib Specifies the attributes line color and fill color of the candlestick lines when the close value is greater than the open value Once the initial BoxWhiskerPlot object is created populations are added to it one population at a time using the AddPopulation method Each population can have a different number of data points Once all of the population groups are added the software will calculate the quartile data for each population in response to the AutoBWChart method call Each population is summarized by a single box in the box and whisker plot Visual Basic Public Sub AddPopulation _ pop As Double _ xvalue As Double CH public void AddPopulation double pop double xvalue Parameters pop The source population of y values to add xvalue The x value of the of y values population There are several variants of
272. dSize new Size 800 600 Web Applications 434 The reference to chartView1 PreferredSize tells the software that the font sizes specified in the graph are with respect to a chart window of size 600 400 If the chart is sized larger than this the fonts will be larger if it is sized smaller the fonts will be smaller Build the Solution Build Build Solution If the project fails to compile you need to go back and check the errors and the previous steps When it runs properly it the SimpleBars chart looks like WpfChartBrowserApplication1 xbap application x ms xbap Object Mozilla Firefox Ele Edit View History Bookmarks Tools Help Ue Q X A DI fieilieiQun curts WPF Development DotNet QCChart2D Visual CSharp examples wpfWpfChe 7 Bj Most Visited Getting Started Latest Headlines Visual VB for Net Creating an WPF web application is almost identical to creating a WPF workstation applications If you do not already have an application program project create one using the Visual Studio project wizard File New Project Visual VB Projects WPF Browser Application On the left select a project type of Visual Basic Give the project a unique name In our examples wpf folder this example is the WPFChartBrowserApplication1 so give your example a different name such as WPFBrowserApplicationl You will end with a basic WPF based application For purposes of this example the chart will plac
273. dd them to the ChartView draw list This includes the coordinate conversion classes the dataset classes and all of the utility classes The GraphObj and ChartView classes use these utility classes for coordinate conversions data storage math calculations and I O Delete a specific chart object from the ChartView draw list using the ChartView DeleteChartObject method Clear the entire draw list using the ChartView ResetChartObjectList method You can leave an object in the ChartView draw list but disable its display by calling that objects GraphObj SetChartObjEnable method If you disable an object you will still need to call the ChartView UpdateDraw method to redraw the chart without that object Placing Multiple Charts in a ChartView One way to create multiple charts is to create multiple instances of the ChartView class and add each ChartView object to a WPF layout panel such as StackPanel WrapPanel DockPanel and Grid A WPF layout manager manages the position and size of each ChartView Another way is to place multiple charts in the same ChartView object This makes it easier to guarantee alignment between the axes of separate graphs The trick to doing this is to create separate coordinate system objects CartesianCoordinates TimeCoordinates PolarCoordinates or AntennaCoordinates for each chart and to position the plot area of each coordinate system so that they do not overlap Use one of the coordinate systems SetGraphBorder method
274. dden The event invokes the PopZoomStack method Otherwise the default operation of the ChartZoom class controls everything else C public class SuperZoom SimpleDataset Datasetl SimpleDataset Dataset2 SimpleDataset Dataset3 SimpleDataset Dataset4 SimpleDataset Dataset5 new SimpleDataset First x1 y1 new SimpleDataset Second x1 y2 new SimpleDataset Third x1 y3 new SimpleDataset Fourth x1 y4 new SimpleDataset Fifth x1 y5 CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR CartesianCoordinates pTransform2 new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE Zooming 330 S Aut EE a new faces pTransform3 AutoScale CartesianCoordinates pTransfc new qanbeitanceesd tage ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransform4 AutoScale Dataset4 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR CartesianCoordinates pTransform5 E 7 new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransform5 AutoScale Dataset5 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR ChartObj LINEAR SCALE ChartObj AUTOAXES FAR CartesianCoordinates transformArray pTransforml pTransform2 pTransform3 pTransform4 pTransform5 Chartzoom zB new ChartZoom chartVu transformArray true conMask
275. dil lasou es iS QcRTGraphWP Fie version 1 0 0 3 55 QCChart2DNet dll X QCsPCChartNe Date Created 4 27 2010 11 58 AM S QcsPCChartwr Size 228 KB QCChart3DNet dli 9 QCChart3DVisionAux dll 5 QcMatPackNet dll QCChart2DWPF3 dll Component Files dll tlb olb ocx exe manifest If you also want printing in the program you need to add a reference to the Net Printing assembly In this case in the Add Reference tab choose Net and scroll to the System Printing assembly 421 Using QCChart2D for WPF to Create Windows Applications Add Reference NET COM Projects Browse Recent Component Name j Runtime System EnterpriseServices D D v2 0 50727 System IdentityModel 0 0 v2 0 50727 System IdentityModel Selectors D D v2 0 50727 System IO Log 0 0 v2 0 50727 System Management 0 0 v2 0 50727 System Management Instrumentation 5 0 v2 0 50727 System Messaging D D v2 0 50727 System Net 5 0 v2 0 50727 v2 0 50727 System Runtime Remoting D D v2 0 50727 System Runtime Serialization 0 0 v2 0 50727 System Runtime Serialization Formatters Soap 0 0 v2 0 50727 System Security 0 0 v2 0 50727 System ServiceModel 0 0 v2 0 50727 System ServiceModel Web 5 0 v2 0 50727 ZS View the Windowl xaml code and add the reference to ChartView in the Grid layout panel The Windowl xaml file now looks like Window
276. dinate system Visual Basic Declaration Public Sub New _ source As ChartView _ target As ChartView _ transform As PhysicalCoordinates magnirect As Dimension _ CH public MagniView ChartView source ChartView target PhysicalCoordinates transform Dimension magnirect source A reference to the source ChartView object that the chart is placed in target A reference to the target ChartView object that the magnified view of the chart is placed in transform The source PhysicalCoordinates object associated with the scale being magnified magnirect The rectangle in physical coordinates of the magnify cursor Enable the magnify object after creation using the MagniView SetEnable true method Retrieve the physical coordinates of the magnify rectangle using the MagniView GetMagniMin and GetMagniMax methods Restrict magnification in the x or y direction using the SetMagniXEnable and SetMagniYEnable methods Set the rounding mode associated with rescale operations using the SetMagniXRoundMode and SetMagniY RoundMode methods In order to use the MagniView class you need two instances of the underlying chart Place one above or next to the other on a parent window as done in the example The first instance of the chart should be considered the source chart and the second instance of the chart should be considered the target This way you end up with two charts with an identical set of axes and plot ojects 333 Zoom
277. dinates _ New ElapsedTimeCoordinates xMin yMin xMax yMax ew Create the x and y axes Dim xAxis As ElapsedTimeAxis Dim yAxis As ElapsedTimeAxis New ElapsedTimeAxis simpleScale ChartObj X AXIS New ElapsedTimeAxis simpleScale ChartObj Y AXIS Y Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Event Axes Class EventAxis GraphObj Axis LinearAxis EventAxes The EventAxis is subclassed from the LinearAxis class and has much in common with it The major difference between the two is the way in which major and minor tick marks are calculated in the CalcAutoAxis method The EventAxis places tick marks at the x positions of the ChartEvent objects attached to the common EventCoordinate system It places major tick marks at the ChartEvent objects which correspond to where an axis label is expected to go and minor tick marks at events which fall between the major tick marks If the tick marks start to overlap tick marks are skipped in order to maintain the look of the chart Tick Rules The TickRule property controls the tick mark logic of the axis Use one ofthe TICK RULE enumeration constants NO TICKS do not display any tick marks No tick marks means no axis labels 205 Axes MINOREVENT MAJOREVENT display a minor tick mark every AxisMinorNthTick event and a major tick mark every AxisMinorTicksPerMajor MAJOREVENT display a major tick
278. ds Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As GroupDataset _ ByVal rflagwidth As Double _ ByVal attrib As ChartAttribute _ Ct public OHLCPLIot PhysicalCoordinates transform GroupDataset dataset double rflagwidth ChartAttribute attrib transform The coordinate system for the new OHLCPlot object dataset The OHLCPlot plot will represent the group open high low close values in this group dataset The number of groups must be four The Y 0 values of the group dataset represent the values for Open the Y 1 values for High the Y 2 values for Low and the Y 3 values for Close rflagwidth The width of the open and close markers in units of the independent axis attrib Specifies the attributes line color and line style for the open high low close plot 299 Simple Plot Objects An individual OHLC element in an OHLC plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects OHLC plot example extracted from the example program FinancialExamples class OHLCChart C TimeGroupDataset Datasetl new TimeGroupDataset Stock Data xValues stockPriceData TimeCoordinates pTransforml new TimeCoordinates pTransforml SetWeekType ChartObj WEEK 5D pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR Define axes axes labels and grids
279. ds to be drawn first ChartGrid 40 A z value of 40 places grids under most other graph objects If you want grids on top change the z value to 150 GraphObj 50 The default value for graph objects if not explicitly changed in the subclass ChartText 50 The default value for text objects ChartPlot 50 The default value for plot objects which includes SimplePlot GroupPlot ContourPlot PolarPlot and AntennaPlot objects Axis 100 Chart axes are drawn after data plots AxisLabels 100 Axes labels are drawn with same priority as axes The Chart View 164 Legend 150 Legend objects usually sit on top of all other graph objects and are drawn last You can change the default z order value on an object by object basis Call the GraphObj SetZOrder method to change the z order for any given object The example below sets the z order value of the x axis to 30 changing the drawing order so that the x axis draws before and is therefore underneath any ChartGrid and ChartPlot objects in the view ChartView chartVu new ChartView LinearAxis xAxis new LinearAxis pTransforml ChartObj X AXIS xAxis SetZOrder 30 chartVu AddChartObject xAxis Visual Basic Dim chartVu As ChartView New ChartView Dim xAxis As LinearAxis New LinearAxis pTransforml ChartObj X AXIS xAxis SetZOrder 30 chartVu AddChartObject xAxis Dynamic or Real Time Updates of Chart Objects If you want to change the properties of one or more Graph
280. e attrib2 SetFillFlag true attrib2 SetSymbolSize 10 SimpleLineMarkerPlot thePlotl new SimpleLineMarkerPlot pTransforml Datasetl Chart bj SQUARE ttribl ttribz D I chartVu AddChartObject thePlot1 Visual Basic Dim Datasetl As New SimpleDataset First xl yl Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE _ ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGoraphBorderDiagonal 0 15 0 15 0 9 0 7 Define and add axes axes labels and grids to chart Dim attribl As New ChartAttribute Colors Blue 1 DashStyles Solid Dim attrib2 As New ChartAttribute Colors Blue 1 DashStyles Solid attrib2 SetFilltolor Colors Bluse attrib2 SetFillFlag True attrib2 SetSymbolSize 10 263 Simple Plot Objects Dim thePlotl As New SimpleLineMarkerPlot pTransforml Datasetl _ ChartO0bj SQUARE attribl attrib2 0 1 chartVu AddChartObject thePlotl Add the following lines to the program segment above to add data point labeling to the line marker plot C thePlotl SetShowDatapointValue true NumericLabel modellabel new NumericLabel modellabel SetXJust ChartObj JUSTIFY CENTER modellabel SetYJust ChartObj JUSTIFY MIN ChartFont modellabelfont new ChartFont SansSerif 10 FontStyles Normal modellabel SetTextFont modellabelfont modellabel SetTextNudge 0 5 thePlotl SetPlotLabelTemplate modellab
281. e protected void OnMouseUp MouseButtonEventArgs e protected void OnMouseMove MouseEventArgs e VB protected void OnMouseDown ByVal e As MouseButtonEventArgs protected void OnMouseUp ByVal e As MouseButtonEventArgs protected void OnMouseMove ByVal e As MouseEventArgs Timers It your program does any real time updates it probably uses a timer class The Net Forms timer class is System Timers Timer while the WPF timer class is System Windows Threading DispatcherTimer They are similar in function with slightly different properties you must set CH System timerl timerl timerl VB Friend timerl timerl timerl CH System new timerl timerl Net Forms Timers Timer timerl new System Timers Timer Enabled true Interval 300 Elapsed new System Timers ElapsedEventHandler timerl Elapsed WithEvents timerl As System Timers Timer New System Timers Timer Enabled True Interval 300 WPF Windows Threading DispatcherTimer timerl System Windows Threading DispatcherTimer IsEnabled true Interval TimeSpan FromMilliseconds 2000 73 Class Architecture timerl Tick new EventHandler timerl Elapsed VB Private timerl As New System Windows Threading DispatcherTimer timerl IsEnabled True timerl Interval TimeSpan FromMilliseconds 2000 AddHandler timerl Tick New EventHandler AddressOf timerl Elapsed 3 Chart Datasets ChartDataset SimpleDataset TimeS
282. e and Ring Chart Classes It uses data organized as arrays of x and y values where an x value represents the numeric value of a pie wedge and a y value specifies the offset or explosion of a pie wedge with respect to the center of the pie Click on any pie wedge to see a detail Click again on the pie wedge to remove detail PieChart The pie chart plots data in a simple pie chart format It uses data organized as arrays of x and y values where an x value represents the numeric value of a pie wedge and a y value specifies the offset or explosion of a pie wedge with respect to the center of the pie 57 Class Architecture RingChart The ring chart plots data in a modified pie chart format known as a ring chartt It uses data organized as arrays of x and y values where an x value represents the numeric value of a ring segment and a y value specifies the offset or explosion of a ring segment with respect to the origin of the ring Simple Plot Classes SimplePlot SimpleBarPlot SimpleLineMarkerPlot SimpleLinePlot SimpleScatterPlot SimpleVeraPlot Simple plots use data organized as a simple array of xy points where there is one y for every x Simple plot types include line plots scatter plots bar graphs and line marker plots SimplePlot This class is an abstract base class for all simple plot classes Production of Green Bars is Up i US mucus peur sunu UEM rU T FETU SUE a puru E 2000 2001 2002 2003 2004 2005
283. e axes in the coordinate system defined by transform axtype Specifies if the axis is an x axis X AXIS ora y axis Y AXIS minval Sets the minimum value for the axis maxval Sets the maximum value for the axis Other axis properties minor tick mark spacing number of minor tick marks per major tick mark axis intercept tick mark lengths tick mark direction and axis tick mark origin are automatically calculated using an auto axis method Set these properties explicitly if you need to override the automatically calculated values SetAxisIntercept method Visual Basic Public Sub SetAxisIntercept ByVal intercept As Double Ct public void SetAxisIntercept double intercept SetAxisTicks method Visual Basic Overloads Public Sub SetAxisTicks ByVal tickorigin As Double _ ByVal tickspace As Double _ ByVal ntickspermajor As Integer _ Visual Basic Overloads Public Sub SetAxisTicks _ ByVal tickorigin As Double _ ByVal tickspace As Double _ ByVal nminortickspermajor As Integer ByVal minorticklength As Double _ ByVal majorticklength As Double _ 203 Axes ByVal tickdir As Integer Ct public void SetAxisTicks double tickorigin double tickspace int ntickspermajor E public void SetAxisTicks double tickorigin double tickspace int nminortickspermajor double minorticklength double majorticklength int tickdir intercept Sets the intercept of this axis with the pe
284. e below Example of modifying the minimum and maximum values selected by an auto scale method C ChartCalendar xData new ChartCalendar 1996 ChartObj FEBRUARY 5 new ChartCalendar 1996 ChartObj MARCH 5 new ChartCalendar 1996 ChartObj APRIL 5 new ChartCalendar 1996 ChartObj MAY 5 new ChartCalendar 1996 ChartObj JUNE 5 new ChartCalendar 1996 ChartObj JULY 5 new ChartCalendar 1996 ChartObj AUGUST 5 new ChartCalendar 1996 ChartObj SEPTEMBER 5 new ChartCalendar 1996 ChartObj OCTOBER 5 new ChartCalendar 1996 ChartObj NOVEMBER 5 double Data 10 22 323 44 55 45 32 25 14 Sl TimeSimpleDataset dataset new TimeSimpleDataset Sales xData yData TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale AutoScale dataset simpleTimeScale SetTimeScaleStart new ChartCalendar 1996 ChartObj JANUARY 5 simpleTimeScale SetTimeScaleStop new ChartCalendar 1997 ChartObj JANUARY 5 Visual Basic Dim xData As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 1996 ChartObj MARCH 5 _ New ChartCalendar 1996 ChartObj APRIL 5 New ChartCalendar 1996 ChartObj MAY 5 New ChartCalendar 1996 ChartObj JUNE 5 New ChartCalendar 1996 ChartObj JULY 5 _ New ChartCalendar 1996 C G 6 C hartObj AUGUST 5 New ChartCalendar 1996 hartObj SEPTEMBER 5 _ New ChartCalendar 1996 hnartObj OCTOBER 5
285. e file SimpleBars vb from our WPFChartBrowserApplicationl example folder If you do that make sure you change the declared namespace at the top of the file namespace WpfChartBrowserApplicationl to the one your project uses probably namespace WpfBrowserApplicationl If you are not using a project namespace delete the Namespace reference at the top and bottom of the source file 439 Using QCChart2D for WPF to Create Web Applications Add New Item WpfBrowserApplication 1 Categories Templates Common Items Code Data General Web Windows Forms Reporting Workflow WPF Visual Studio installed templates E About Box Ye Class Y Code File dj Component Class Custom Control WPF Dialog Explorer Form vg Interface LH LINQ to SQL Classes amp Local Database Cache MOI Parent Form s Page WPF Ga Report d ADO NET Entity Data Model S Class Diagram ziv COM Class Fal Custom Control Zu DataSet IB Dynamic Data Field 73 Flow Document WPF ss JScript File 9 Local Database E amp Login Form Module OO Page Function WPF i Report Wizard An empty class definition Name SimpleBars vb The resulting SimpleBars vb file will contain Public Class SimpleBars End Class L se IG Modify the SimpleBars file to create the desired chart Most all of our examples are structured the same way The constructor is changed to pass in a ChartView o
286. e five The software also needs to take into the variable number of days year due to leap years Date time axis tick marks and labels become even more complicated when the 5 day 7 day option and the working hours day options are used The QCChart2D for WPF library uses milliseconds as the underlying time base for all date time coordinate system When a scale is created using two ChartCalendar dates as end points the software calculates the number of milliseconds seconds between the starting date and the ending date If the coordinate system is based on a 5 day week the milliseconds associated with the missing weekends are not counted If the coordinate system does not use 24 hours a day the milliseconds associated with the missing part of the day are not counted A linear coordinate system is scaled using the range of calculated milliseconds Data points plotted in this coordinate system have their date time value converted to milliseconds seconds by subtracting the starting date of the scale from the data point date making sure to exclude the seconds associated with weekends and fractional days if necessary The data point is plotted in the milliseconds based linear coordinate system Since the QCChart2D for WPF library uses milliseconds as the underlying time base the minimum allowable displayable range is one millisecond For ranges smaller than one second the programmer needs to convert the ChartCalendar values to seconds or milliseconds and use t
287. e linear If the x and or y scale are to be logarithmic then use the CartesianCoordinates constructor that has scale mode parameters Example of explicit scaling of three different logarithmic CartesianCoordinates objects C double xMin EE double xMax 1000 double yMin 0 2 double yMax 2000 CartesianCoordinates logYScale new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LOG SCALE logYScale SetCoordinateBounds xMin yMin xMax yMax CartesianCoordinates logXScale new CartesianCoordinates ChartObj LOG SCALE ChartObj LINEAR SCALE logXScale SetCoordinateBounds xMin yMin xMax yMax CartesianCoordinates logXLogYScale new CartesianCoordinates ChartObj LOG SCALE ChartObj LOG SCALE logXLogYScale SetCoordinateBounds xMin yMin xMax yMax Visual Basic Dim xMin As Double 1 Dim xMax As Double 1000 Dim yMin As Double 0 2 Dim yMax As Double 2000 Dim logYScale As CartesianCoordinates _ New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LOG SCALE logYScale SetCoordinateBounds xMin yMin xMax yMax Dim logXScale As CartesianCoordinates _ New CartesianCoordinates ChartObj LOG SCALE ChartObj LINEAR SCALE logXScale SetCoordinateBounds xMin yMin xMax yMax Dim logXLogYScale As CartesianCoordinates _ New CartesianCoordinates ChartObj LOG SCALE ChartObj LOG SCALE logXLogYScale SetCoordinateBounds xMin yMin xMax yMax Note When you explicitly scale the minimum and maxi
288. e positioning information use 0 0 as the xy position parameters of the shape If the shape coordinates are relative coordinates with the object centered on 0 0 place the shape at the position you want using the xy position parameters The xy position parameters are the rotation origin of shape ChartShape constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal ByVal ByVal ByVal ByVal ByVal C4 Lines Shapes Images and Arrows 390 ashape As PathGeometry shapecoordstype As Integer _ x As Double _ y As Double npositiontype As Integer _ rotation As Integer _ public ChartShape PhysicalCoordinates transform PathGeometry ashape int shapecoordstype double x double y int npositiontype int rotation transform The shape object is placed in the coordinate system defined by transform ashape A reference to a System Windows Media PathGeometry object shapecoordstype Specifies if the coordinate system defining the shape is specified in X y npostype rotation physical coordinates normalized coordinates or WPF device coordinates Use one of the position constants DEV POS PHYS POS NORM GRAPH POS NORM PLOT POS Specifies the x value of the shape position Specifies the y value of the shape position Specifies the if the position of the shape is specified in physical coordinates normalized coordinates or WPF device coordin
289. e the initial chart displays a large number of data points The user interacts with the chart defining smaller and smaller zoom rectangles zeroing in on the region of interest The final chart displays axis limits that have a very small range compared to the range of the original un zoomed chart Important zoom features include S Automatic recalculation of axis properties for tick mark spacing and axis labels SJ Zooming of time coordinates with smooth transitions between major scale changes years gt months gt weeks gt days gt hours gt minutes gt seconds Zooming of time coordinates that use a 5 day week and a non 24 hour day SJ Simultaneous zooming of an unlimited number of x and y coordinate systems and axes Super zooming The user can recover previous zoom levels using a zoom stack SJ The zoomed coordinate system can be forced to maintain a fixed aspect ratio User defineable zoom limits prevent numeric under and overflows Magnification is related to zooming because it is also the interactive re scaling of a charts physical coordinate system In this case a fixed sized view window is passed over a source chart analogous to passing a magnifying class over a map The area under the view window is magnified and redisplayed in a separate target chart The source chart does not re scale as in the case of zooming Only the target chart gets rescaled in response to the position of the view window position over t
290. eCoordinates class as the coordinate system where the time date data 1s not evenly spaced and contains large gaps corresponding to weekends and inactive hours of the day The July 4 holiday is included in the range and there is no data for that time interval either EuroDollar FinLogPlot GHLCChart OpeningScreen FinancialOptions TechnicalAnalysis Candlestick Plots in Technical Analysis 7 08 12 7 152 7 2212 The Open Close box is filled if the open price is greater than the close price Chart Datasets 92 Contrast this to the similar data using the same time range plotted using the EventCoordinates class Note how every event is evenly spaced with its neighbor Gaps do not exist since weekends holidays and unused hours are bridged over as if they do not exist he same would be true for gaps due to holidays and a varying number of work hours in a day EuroDollar CandlestickChart FinLogPlot DHLCChart OpeningScreen FinancialOptions TechnicalAnalysis Candlestick Plots in Technical Analysis l N vi a W d d 7 16 12 7 2312 The Open Close box is filled if the open price is greater than the close price Zooming in further you can see the smooth transition across the July 4 holiday and the following weekend 93 Chart Datasets EuroDollar CandlestickChart FinLogPlot OHLCChart OpeningScreen FinancialOptions TechnicalAnalysis Candlestick Plots in Technical Analysis 7 03 12 7 05 12
291. eFooterFont Bar plots can have the values footer SetTitleType ChartObj CHART FOOTER footer SetTitlePosition ChartObj CENTER GRAPH footer SetTitleOffset 8 footer SetColor Colors Black chartVu AddChartObject footer chartVu SetResizeMode ChartObj AUTO RESIZE OBJECTS Dim datatooltip As New DataToolTip chartVu Dim xValueTemplate As New TimeLabel ChartObj TIMEDATEFORMAT MDY Dim yValueTemplate As New NumericLabel ChartObj CURRENCYFORMAT 0 datatooltip SetXValueTemplate xValueTemplate datatooltip SetYValueTemplate yValueTemplate datatooltip SetDataToolTipFormat ChartObj DATA TOOLTIP XY TWOLINE datatooltip GetToolTipSymbol SetColor Colors Red datatooltip SetEnable True chartVu SetCurrentMouseListener datatooltip End Sub End Class Reference and initialize the newly created Simple Bars class in the Pagel xaml vb behind code file Imports com quinncurtis chart2dwpf Public Class Pagel Public Sub New InitializeComponent Dim sb New SimpleBars chartViewl chartViewl PreferredSize New Size 900 600 End Sub End Class The reference to chartView1 PreferredSize tells the software that the font sizes specified in the graph are with respect to a chart window of size 900 600 If the chart is sized larger than this the fonts will be larger if it is sized smaller the fonts will be smaller Using QCChart2D for WPF to Create Web Applications 442 Build the Solution Build Build S
292. ePlo chartVu AddChar new Simple Plotl the thePlo tObjec t2 Eq SimpleLinePlo LinePlo chartVu AddChar new Plo Simple st the thePlo tObjec E3 EL SimpleLinePlo LinePlo chartVu AddChar new Plo Simple EAT Z the thePlo tObjec t4 EL SimpleLinePlo LinePlo chartVu AddChar new Plo Simple t4 the thePlo tObjec L5 EL SimpleLinePlo LinePlo chartVu AddChar new Plo Simple t5 VB CartesianCoordinates CartesianCoordinates CartesianCoordinates pTransform4 As CartesianCoordinates pTransform5 As CartesianCoordinates xAxis As LinearAxis yAxisl As LinearAxis yAxis2 As LinearAxis yAxis3 As LinearAxis yAxis4 As LinearAxis yAxis5 As LinearAxis As As As Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim pTransforml pTransform2 pTransform3 Initialize datasets The x scale range for pTransforml to pTransform5 are all the same t pTrans t pTrans t pTrans t pTrans t pTrans FAQs 448 yAxisl ChartObj X AXIS ChartObj GRID MAJOR forml Datasetl ttribl s form2 Dataset2 Lttrib2 form3 Dataset3 trib3 t form4 Dataset4 trib4 form5 Dataset5 kEribS y coordinate system ranges H 100 The y scale range for pTransforml to pTransform5 are all different pTransforml pTransform2 plransform3 pTransform4 pTransform5 SetGrap
293. eadTimeGroupDataset csvDataFile TimeGroupDatasetl csv 0 0 Elapsed Time Dataset Class ElapsedTimeGroupDataset ChartObj ChartDataset GroupDataset ElapsedTimeGroupDataset The ElapsedTimeGroupDataset class represents group data where every x value can have one or more y values The number of x values in a group plot is referred to as the number of columns or as NumberDatapoints and the number of y values for each x value is referred to as the number of rows or NumberGroups ElapsedTimeGroupDataset constructors Visual Basic Overloads Public Sub New ByVal sname As String _ ByVal x As TimeSpan _ ByVal y As Double _ Overloads Public Sub New _ ByVal sname As String _ ByVal x As Double _ 105 Chart Datasets ByVal y As Double Ct public ElapsedTimeGroupDataset string sname TimeSpan x double y public ElapsedTimeGroupDataset string sname double x double y E sname Specifies the name of the dataset x An array that specifies the x values of a group dataset The length of the x array sets the number of columns for the group dataset y An array that specifies the y values of a group dataset where y has the dimensions number of rows number of columns The number of rows in the y array sets the number of groups in the group dataset The number of columns in the y array must match the length of the x array The number of columns in the group dataset
294. ects global line color line width and line style attributes Change the ChartAttribute object using the objects SetChartObjAttributes method Use the objects setSymbolAttributes to change the attributes of the marker symbol Should you need additional symbols create your own Any PathGeometry object can be used as a symbol The coordinates of the symbol should assume that 1 0 is the standard symbol size with a symbol center at the relative coordinates 0 5 0 5 See the example in the discussion of the SimpleScatterPlot class Individual line segments in a line marker plot object can have unique properties Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods If this option is used the line and fill properties of the lines and the marker symbols will be the same Simple line marker plot example extracted from the example program ScatterPlots class LabeledDatapoints C SimpleDataset Datasetl new SimpleDataset First xl yl CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 15 90 0 7 Define and add axes axes labels and grids to chart ChartAttribute attribl new ChartAttribute Colors Blue 1l DashStyles Solid ChartAttribute attrib2 new ChartAttribute Colors Blue 1 DashStyles Solid attrib2 SetFillColor Colors Blu
295. ed in the initial default window Using QCChart2D for WPF to Create Web Applications 436 New Project Project types Templates NET Framework 3 5 Visual Studio installed templates o msi EE Windows Forms Application Gg Class Library A ASP NET Web Application SR ASP NET Web Service Application a5 WPF Application Fg WPF Browser Application EA Console Application te WCF Service Application Other Languages Ge Windows Forms Control Library 18 Dynamic Data Entities Web Application H Dynamic Data Web Application My Templates DocProject Reporting ye DocProject RDocSite Web Application WCF c Search Online Templates Workflow E Visual C 4i Other Dreiect Tunes S Windows Presentation Foundation browser application NET Framework 3 5 Name WpfBrowserApplication 1 Location E lQuinn Curtis WPF DevelopmentlDotNet QCChart2D Visual Basic examples wpf Solution Create new Solution v Create directory for solution Solution Name WpfBrowserApplication 1 Ca Co Ina WPF browser application the main ASML file is named Pagel whereas in the standard Windows application it is named Windowsl Default Namespace Issues There is an annoying difference in the default files generated by the VB project wizard versus the C project wizard The C wizard includes a namespace reference in the class definition found in the main Pagel xaml
296. efine axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Black 0 DashStyles Solid Colors Green attribl SetFillFlag true HistogramPlot thePlotl new HistogramPlot pTransforml Datasetl 0 0 attribl NumericLabel bardatavalue thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj PERCENTFORMAT bardatavalue SetColor Colors Black thePlotl SetBarDatapointLabelPosition ChartObj INSIDE BAR thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue true thePlotl SetSegmentAttributesMode true thePlotl SetSegmentFillColor 0 Colors Red thePlotl SetSegmentFillColor 1 Colors Magenta thePlotl SetSegmentFillColor 2 Colors Blue thePlotl SetSegmentFillColor 3 Colors Green thePlotl SetSegmentFillColor 4 Colors Yellow thePlotl SetSegmentFillColor 5 Colors Pink chartVu AddChartObject thePlot1 Visual Basic Dim Datasetl As New GroupDataset Actual Sales x1 yl Dim pTransforml As New CartesianCoordinates pTransforml SetScaleStartY 0 pTransforml SetScaleStartX 0 pTransforml SetScaleStopX 80 pTransforml SetScaleStopY 1 0 pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 75 Dim graphbackground As New Background pTransforml ChartObj GRAPH BACKGROUND _ Color FromRgb 30 70 70 Color FromBgb 90 20 155 ChartObj Y AXIS chartVu AddChartObject graphb
297. eks Historically western cultures use a five day workweek Much of the data suitable for charting includes data for only the workdays of Monday through Friday excluding weekends Data associated with financial markets is the most common Stocks trade on Monday through Friday excluding weekends and holidays In the display of financial market information it is not useful and in many cases misleading to scale a graph using a seven day work week and then only plot data using five of the seven days The gaps left in the chart waste valuable chart space For line plots if a line is drawn from the last data point on Friday to the first data point on Monday the result gives a visual impression that the trend from Friday to Monday lasted two days Friday midnight to Sunday midnight when in fact it may have only lasted minutes The QCChart2D for WPF date time scaling axes and auto axes classes support dropping weekends as an option from the scale One minute after Friday midnight is 12 01 AM Monday morning Non 24 Hour Days Similarly a full day of time stamped data may not fill an entire 24 hour day Financial markets have specific trading hours For example the NYSE is open from 9 30 AM EST to 4 00 PM EST Stocks traded on the NYSE will have a time stamp in this time range Plotting NYSE stock data for several days using data points sampled every fifteen minutes will result in large gaps in a traditional chart where 2 3 of the day stock trad
298. el Visual Basic Dim modellabel As New NumericLabel modellabel SetXJust ChartObj JUSTIFY CENTER modellabel SetYJust ChartObj JUSTIFY MIN Dim modellabelfont As New ChartFont SansSerif 10 FontStyles Normal modellabel SetTextFont modellabelfont modellabel SetTextNudge 0 5 thePlotl SetPlotLabelTemplate modellabel chartVu AddChartObject thePlotl Simple Versa Plots Class SimpleVersaPlot GraphObj ChartPlot SimplePlot SimpleLineMarkerPlot SimpleVersaPlot The SimpleVersaPlot is a plottype that can be any of the four simple plot types LINE MARKER PLOT LINE PLOT BAR PLOT SCATTER PLOT It is used when Simple Plot Objects 264 you want to be able to change from one plot type to another without deleting the instance of the old plot object and creating an instance of the new SimpleLineMarkerPlot constructor Visual Basic Overloads Public Sub New _ ByVal PhysicalCoordinates As PhysicalCoordinates ByVal SimpleDataset As SimpleDataset ByVal ChartAttribute As ChartAttribute Overloads Public Sub New _ ByVal PhysicalCoordinates As PhysicalCoordinates ByVal SimpleDataset As SimpleDataset ByVal Double As Double ByVal Double As Double _ ByVal ChartAttribute As ChartAttribute ByVal Int32 As Integer Overloads Public Sub New _ ByVal PhysicalCoordinates As PhysicalCoordinates ByVal SimpleDataset As SimpleDataset ByVal Int32 As Integer _
299. elends Ignored for time axis labels labcolor The color of the label text timeformat Sets the numeric format for the axis labels Use one of the time format constants 233 Axis Labels TIMEDATEFORMAT MS TIMEDATEFORMAT 24HMS TIMEDATEFORMAT 24HM Simple ElapsedTimeAxisLabels example extracted from the NewDemosRev2 ElapsedTimeChart example program C TimeSpan xl new TimeSpan numPoints double yl new double numPoints double y2 new double numPoints int LF for i20 i lt numPoints i Initialize Data theFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal FontWeights Bold ElapsedTimeSimpleDataset Datasetl new ElapsedTimeSimpleDataset First xl yl ElapsedTimeSimpleDataset Dataset2 new ElapsedTimeSimpleDataset Second xl y2 ElapsedTimeCoordinates pTransforml new ElapsedTimeCoordinates ChartObj ELAPSEDTIME SCALE ChartObj LINEAR SCALE pTransforml ElapsedTimeAutoScale Dataset2 ChartObj X AXIS ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 15 90 0 70 ElapsedTimeAxis xAxis new ElapsedTimeAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis LinearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS chartVu AddChartObject yAxis ElapsedTimeAxisLabels xAxisLab new ElapsedTimeAxisLabels xAxis xAxisLab SetTextFont theFont xAxisLab AxisLabelsDayFormat ChartObj ELAPSEDTIMEFORM
300. ender System Windows Controls Primitives ScrollEventArgs e UpdateXScaleAndAxes int e NewValue internal void vScrollBarl Scroll object sender System Windows Controls Primitives ScrollEventArgs e UpdateYScaleAndAxes int e NewValue i Visual Basic Public Sub UpdateXScaleAndAxes index As Integer Dim startindex As Integer index pTransforml SetScaleStartX CDbl startindex pTransforml SetScaleStopX CDbl startindex 100 xAxis CalcAutoAxis yAxis CalcAutoAxis xAxisLab CalcAutoAxisLabels yAxisLab CalcAutoAxisLabels chartVu UpdateDraw End Sub Public Sub UpdateYScaleAndAxes index As Integer Dim startindex As Integer index pTransforml SetScaleStartY CDbl startindex pTransforml SetScaleStopY CDbl startindex xAxis CalcAutoAxis yAxis CalcAutoAxis xAxisLab CalcAutoAxisLabels yAxisLab CalcAutoAxisLabels chartVu UpdateDraw End Sub Private Sub InitializeChart chartvu_1 As ChartView chartVu EnableHScrollBarl True chartVu EnableVScrollBarl True chartVu HScrollBarl Minimum 0 chartVu HScrollBarl Maximum 200 chartVu HScrollBarl Value 0 chartVu HScrollBarl SmallChange 2 chartVu HScrollBarl LargeChange 20 chartVu VScrollBarl Minimum 0 chartVu VScrollBarl Maximum 100 chartVu VScrollBarl Value 50 chartVu VScrollBarl SmallChange 1 chartVu VScrollBarl LargeChange 5 AddHandler chartVu HScrollBarl Scroll AddressOf hScro
301. ength xAxisTickDirection Visual Basic Dim xAxisIntercept As Double 5 Dim xAxisOrigin As Double 0 0 Dim xAxisMinorTickSpace As Double 1 0 Dim xAxisMinorTicksPerMajor As Integer 5 Dim xAxisMinorTickLength As Double 5 Dim xAxisMajorTickLength As Double 10 Dim xAxisTickDirection As Integer ChartObj AXIS MIN 187 Axes Dim xAxis As LinearAxis New LinearAxis xAxis SetAxisIntercept xAxisIntercept xAxis SetAxisTicks xAxisOrigin xAxisMinorTickSpace xAxisMinorTicksPerMajor xAxisMinorTickLength _ xAxisMajorTickLength xAxisTickDirection Logarithmic Axes Scientific engineering and financial applications often require the use of logarithmic axe Logarithmic axes are useful for the display of data that either has a wide dynamic range and or data that is exponential in nature Two common examples that use logarithmic scales are hi fi speaker charts db vs log frequency and stock market charts Class LogAxis GraphObj t Axis t LogAxis The LogAxis class is a concrete subclass of the Axis class Use the LogAxis class to create a logarithmic axis with logarithmic spacing between the major tick marks 1 10 100 and linear spacing 2 3 4 5 between the minor tick marks Logarithmic Axis Minimum and Maximum The minimum and maximum values for a logarithmic axis can have any positive value as long as the maximum is greater than the minimum Create an inverted axis by first defining
302. enna physical coordinate systems The programmer can explicitly set these characteristics or they can be calculated automatically based on an analysis of the associated chart data The axes of a chart do not define the physical coordinate system of the chart Rather the axes provide a visual key to the physical coordinate system Define the physical coordinate system first using one of the classes derived from PhysicalCoordinates Next create the axes that reside in the physical coordinate It is possible to define a physical coordinate system scaled using a xy range of 0 100 0 100 and create an axis residing in that coordinate system that has minimum and maximum values of 0 25 The axis in that case takes up 25 of the chart plot area of the chart Define the same axis with minimum and maximum values of 0 100 and the axes will span 10096 of chart plot area A chart axis consists of at least two and usually three parts the axis line the axis tick marks and the axis labels The axis line extends from the minimum value to the maximum value of the axis Major tick marks perpendicular to the axis line divide the axis line into sub ranges suitable for labeling Minor tick marks also perpendicular to the axis line further subdivide the space between the major tick marks into even smaller 181 Axes intervals Axis labels are optional On one side of a chart there may be an axis with labels and on the other side an axis without labels
303. eot 244 Polar T Vl RIE ese NA pA dice Matas EPI CE AE AE eld AOE ee Dict COE 247 LSR e T NITET E D EN 249 10 Smale PMO tM CES EE 251 SIPS LINE Pl OS esas aan t DIC OPERI RN 251 Simple Bar PIofgecs seo tele lutea eile ee Seu Mal Bat ds tUa d va elut set OO pitas ats 254 Simple Scatter PLUS AJ atest vex sauce etre ded noue Da ER E caus ire d ede sh edn tau Rea NE AEE EESTO AEE Ea 257 Simple Line Marker ET 260 Simple Versa PHOS eege 263 IB CIPO OPV Plot Objects sirenes a a ns a a ee 267 ATOW Plots ariere E nba E E A va E E a EE A E qud 268 Boxand Whisker E 270 Te E 274 Candlestick PIOS aio eg oS Eco eph t Dates A ad a dedu d oven t has QUI die du vp DVD EL MR ea EIS 276 Cell Un P reese ege dee Eeer nh 278 Error Bar PIOUS iode pep ets re uale careret God itd alte O ante D ONU UNO RAMUS 280 Floating Bat N Te dod Dade Nea MR Io dom d rae hao elated bae T lat eu nf 281 Eloating stacked Bar PIOUS 2 hue e te e de 285 Group BarPlotsa aue oed ici Vi o reines obe d PRO ege bae er en tps E Ue s du S E E outa pup ose Edda 288 Histograni PUGS EE 290 Enc Gap Potes Sacra cere dace ation Ee 293 Multi Eme Plots 2 nnt ete EE EE ebur 295 Opeh Hieh LEowetlose Plots oe e eor aed eae mad euentus 298 Stacked Bat Wl 299 Stacked Line dioi Ho 302 ee ee et 305 Line and Filled Contour Eu 305 13 Data Markers andl Data WEE 310 Data Markets E 310 Ia EE 312 14 Moving Chart Objects Data Points and Coordinate Systems esse 318 Moving
304. erControlChartExample3 program for an example of this technique 25 Using QCChart2D for WPF to Create Web Applications Using WPF it is very easy to create web applications program which run on servers When developing your application you don t need a ful blown server you can run your applications on the server built into the VS 2008 and higher compilers Nothing special needs to be done Just load the project and run Not all browsers support WPF web applications though At the time of this writing only Microsoft IE and Foxfire will run WPF applications though others may follow Visual CZ for Net Creating an WPF web application is almost identical to creating a WPF workstation applications If you do not already have an application program project create one using the Visual Studio project wizard File New Project Visual C Projects WPF Browser Application On the left select a project type of Visual C Give the project a unique name In our examples wpf folder this example is the WPFChartBrowserApplication1 so give your example a different name such as WPFBrowserApplicationl You will end with a basic WPF based application For purposes of this example the chart will placed in the initial default window Using QCChart2D for WPF to Create Web Applications 428 New Project Project types Templates NET Framework 3 5 v D Gi Visual C Visual Studio installed templates Windows Web 4 Windows Forms App
305. ering Classes sss sese seene 397 Printinge D GE 397 Capturing the Chart as a Buffered Image sese 400 Image Rendering OF e EE 404 24 Using QCChart2D for WPF to Create Windows Applications serene 408 Vis al R xo gii nep MM E 408 Visual aste TOR EE 418 25 Using QCChart2D for WPF to Create Web Anpltceatons sese ee eee eee 427 Visual Cr TE TR 427 Wisuial VB for NOE 435 26 Ereduentiv Asked WT creto err dta erred tse a tbe ori our aded made aeu Sue 444 The QCChart2D for WPF Charting Library 1 Introduction The QCChart2D for WPF software represents an adaptation of the QCChart2D library to the WPF user interface framework We have removed 100 of the GDI based graphics found in the Net System Drawing System Drawing Drawing2D and System Windows Forms names spaces and replaced them with DirectX based WPF equivalents We have redesigned the chart rendering scheme to work with the WPF retained graphics framework But we have maintained the simple to use flexible programming style found in our QCChart2D for Net software In general you place one or more of our ChartView objects as visual elements in the XAML window of your application The chart itself is customized in the behind code of the XAML form New Features found in the 2 3 version of QCChart2D Event Based Charting A new set of classes have been added in support of new event based plotting system In event based plotting
306. erties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Overloads Public Sub SetAxisLabels ByVal font As ChartFont _ ByVal rotation As Double _ ByVal labdir As Integer _ ByVal decimalpos As Integer _ ByVal labelends As Integer _ ByVal labcolor As Color Ct public void SetAxisLabels ChartFont font double rotation int labdir int decimalpos int labelends Color labcolor SetAxisLabelsFormat method Visual Basic Public Sub SetAxisLabelsFormat _ ByVal format As Integer _ Ct public void SetAxisLabelsFormat int format font The font object used to display the axis label text rotation The rotation in degrees of label text in the normal viewing plane labdir The justification of the axis label AXIS MIN or AXIS MAX with respect to the tick mark endpoint decimal Sets the number of digits to the right of the decimal point for numeric axis labels labelends Ignored for time axis labels labcolor The color of the label text 229 Axis Labels format Sets the numeric format for the axis labels Use one of the time format constants TIMEDATEFORMAT MSDDD TIMEDATEFORMAT MSDD TIMEDATEFORMAT MSD TIMEDATEFORMAT MS TIMEDATEFORMAT 12HMSDD TIMEDATEFORMAT 12HMSD TIMEDATEFORMAT 12HMS TIMEDATEFORMAT 12HM TIMEDATEFORMAT 24HMSDD TIMEDATEFORMAT 24HMSD TIMEDATEFORMAT 24HMS TIMEDATEFORMAT 24HM TIMEDATEFORMAT STAND
307. es in the library derive from the GraphObj class each class a specific charting object such as an axis an axis label a simple plot or a group plot Background This class fills the background of the entire chart or the plot area of the chart using a solid color a color gradient or a texture Axis Classes Axis LinearAxis PolarAxes AntennaAxes ElapsedTimeAxis LogAxis TimeAxis EventAxis Creating a PhysicalCoordinates coordinate system does not automatically create a pair of x and y axes Axes are separate charting objects drawn with respect to a specific PhysicalCoordinates object The coordinate system and the axes do not need to have the same limits In general the limits of the coordinate system should be greater than or equal to the limits of the axes The 37 Class Architecture coordinate system may have limits of 0 to 15 while you may want the axes to extend from 0 to 10 Widget Tolerances by Worker Click on one of the buttons below to change the x axis range 600 1500 13 0K 60 0 3 3 LAM E 8 XA 400 1000 12 0K 40 6 200 500 11 0K 20 2 0 0 10 0K T r i T 0 0 20 40 60 80 100 Event Partition Graphs can have an UNLIMITED number of x and y axes Axis This class is the abstract base class for the other axis classes It contains data and drawing routines common to all axis classes Class Architecture 38 Linear Axes 100 0 00004 50 0 00002 0 0 00000 sog 001002 003 004
308. es labels and grids Dim attribl As New ChartAttribute Colors Blue 1 DashStyles Solid attribl SetFillColor Colors Blue Simple Plot Objects 270 attribl SetFillFlag True Dim basearrow As New Arrow Dim thePlotl As New ArrowPlot pTransforml Datasetl basearrow attribl chartVu AddChartObject thePlotl Note the use of the GroupDataset method SetAutoScaleNumberGroups This forces the auto scale routine to look at only the first group of y values since those are the only y values that specify the absolute position of the arrows The other groups of y values specify size and rotation information and should not be considered in the auto scale calculation Box and Whisker Plots Class BoxWhiskerPlot GraphObj ChartPlot GroupPlot BoxWhiskerPlot The BoxWhiskerPlot class extends the GroupPlot class and displays statistical data in a box and whisker format The BoxWhiskerPlot class graphically represents groups of numerical data through their five number summaries the smallest observation lower quartile Q1 median Q2 upper quartile Q3 and largest observation A BoxWhiskerPlot is unique among our chart types because the data is not represented by a 1D or 2D matrix Instead it consists of multiple populations where each population can have a different number of data points Each population is summarized by 5 statistics the smallest observation lower quartile Q1 median Q2 upper quartile Q3 an
309. es simpleScale new ElapsedTimeCoordinates simpleScale AutoScale dataset simpleScale SetScaleStartY 0 simpleScale SetScaleStopY 100 0 Visual Basic Dim xData As Double 1000 2000 3000 4000 5000 6000 7000 8000 9000 Dim yData As Double 10 22 33 44 55 46 33 25 14 9 Scaling and Coordinate Systems 140 Dim dataset As ElapsedTimeSimpleDataset yData Dim simpleScale As ElapsedTimeCoordinates simpleScale AutoScale dataset simpleScale SetScaleStartY 0 simpleScale SetScaleStopY 100 0 New ElapsedTimeSimpleDataset Sales xData new ElapsedTimeCoordinates The auto scale methods that use an array of datasets to determine the proper range are very similar Example of auto scaling a ElapsedTimeCoordinates object using the multiple datasets C double xDatal 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 double yoatal 10 22 33 44 55 46 33 25 14 93 double xData2 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 double yData2 20 12 43 54 15 26 63 25 24 19 double xData3 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 double yData3 30 52 13 64 25 76 13 35 24 19 ElapsedTimeSimpleDataset datasetl ElapsedTimeSimpleDataset dataset2 ElapsedTimeSimpleDataset dataset3 new ElapsedTimeSimpleDataset new ElapsedTimeSimpleDataset new ElapsedTimeSimpleDataset Sales1 xDatal yDatal Sales2 xData2 yData2
310. es the data marker when the mouse is pressed As long as the mouse is pressed the data cursor tracks the mouse position Release the mouse button and the marker disappears When using data markers it is often desirable to do additional things during the mouse events In this case you derive a new class from DataCursor override the mouse events that you want to intercept and add your own code to these events Make sure you call the parents version of the same mouse event function so that the data cursor continues to track the mouse Simple data cursor example Adapted from the DataCursorView and CustomChartDataCursor classes Data Markers and Data Cursors 314 C public class CustomChartDataCursor extends DataCursor Create your own custom constructor and call the parent constructor public CustomChartDataCursor ChartView achartview CartesianCoordinates thetransform int nmarkertype double rsize base achartview thetransform nmarkertype rsize The mouse Released event should look like this public void OnMouseUp MouseEvent event base MouseReleased mouseevent Add your own code here CustomChartDataCursor dataCursorObj new CustomChartDataCursor chartVu pTransforml ChartObj MARKER HVLINE 8 0 dataCursorObj SetEnable true chartVu SetCurrentMouseListener dataCursorObj Visual Basic Public Class CustomChartDataCursor Inherits DataCursor Public Sub New ByVal achartview As ChartView _ ByVal the
311. es1 xData yDatal Dim dataset2 As TimeSimpleDataset New TimeSimpleDataset Sales2 xData yData2 Dim dataset3 As TimeSimpleDataset New TimeSimpleDataset Sales3 xData yData3 Dim datasetsArray 2 As TimeSimpleDataset datasetsArray 0 datasetl datasetsArray 1 dataset2 datasetsArray 2 dataset3 Dim simpleTimeScale As TimeCoordinates New TimeCoordinates simpleTimeScale AutoScale datasetsArray There is a version of the multiple dataset auto scale routine that also specifies rounding mode parameters simpleTimeScale AutoScale datasetsArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR The previous examples use the TimeCoordinates default 7 days week and 24 hours day modes Many of the methods in the software have a weektype parameter The default value of this parameter is the constant ChartObj WEEK 7D If you want the coordinate system to ignore Scaling and Coordinate Systems 132 Saturdays and Sundays use the constant ChartObj WEEK 5D constant Use the methods below to establish a 5 days week coordinate system TimeCoordinates constructor Visual Basic Overloads Public Sub New _ ByVal dstart As ChartCalendar ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal y2 As Double _ ByVal nweektype As Integer _ Overloads Public Sub New _ ByVal dstart As ChartCalendar ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal y2 As Double Overloads Public Sub New _
312. esssing true chartVu SetCurrentMouseListener zoomObj Visual Basic Dim zoomObj As New ChartZoom chartVu pTransforml zoomObj SetButtonMask MouseButton Left zoomObj SetZoomYEnable True zoomObj SetZoomXEnable True zoomObj SetZoomXRoundMode ChartObj AUTOAXES FAR zoomObj SetZoomYRoundMode ChartObj AUTOAXES FAR zoomObj SetEnable True zoomObj SetZzoomStackEnable True set range limits to 1000 ms 1 degree zoomObj SetZoomRangeLimitsRatio New Dimension 1 0 zoomObj InternalZoomStackProcesssing True chartVu SetCurrentMouseListener zoomObj Zooming 328 1403357 True 14093 Super Zooming of multiple physical coordinate systems The ChartZoom class also supports the zooming of multiple physical coordinate systems super zooming During the mouse released event the zoom rectangle is converted from device units into the physical coordinates of each scale and this information is used to re scale each coordinate system and the axis objects associated with them Use the constructor below in order to super zoom a chart that has multiple coordinate systems and axes ChartZoom constructor Visual Basic Overloads Public Sub New _ ByVal component As ChartView _ ByVal transforms As PhysicalCoordinates ByVal brescale As Boolean Ct public ChartZoom ChartView component PhysicalCoordinates transforms bool brescale LE component A reference to the ChartView object that the chart is p
313. et Sales3 xData3 yData3 SimpleDataset datasetsArray new SimpleDatasets 3 datasetsArray 0 datasetl datasetsArray 1 dataset2 datasetsArray 2 dataset3 CartesianCoordinates simpleScale new CartesianCoordinates simpleScale AutoScale datasetsArray Visual Basic Dim xDatal As Double 1 2 3 4 5 6 Ty 8 9 10 Dim yDatal As Double 10 22 33 44 55 46 33 25 14 9 Dim xDatse2 As Double 10 9 8 7 b 5 4 Se 2 L Dim yData2 As Double 20 12 43 54 15 26 63 25 24 19 Dim xData3 As Double 5 6 7 6 5 4 5 b Te 8 Dim yData3 As Double 30 52 13 64 25 76 13 35 24 19 Dim datasetl As SimpleDataset New SimpleDataset Salesl xDatal yDatal Dim dataset2 As SimpleDataset New SimpleDataset Sales2 xData2 yData2 Dim dataset3 As SimpleDataset New SimpleDataset Sales3 xData3 yData3 Dim datasetsArray 2 As SimpleDataset datasetsArray 0 datasetl datasetsArray 1 dataset2 datasetsArray 2 dataset3 Dim simpleScale As CartesianCoordinates simpleScale AutoScale datasetsArray New CartesianCoordinates There is a version of the multiple dataset auto scale routine that also specifies rounding mode parameters 123 Scaling and Coordinate Systems simpleScale AutoScale datasetsArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Logarithmic Coordinate Scaling The previous examples assume that both the x and y scales ar
314. etDataToolTipFormat ChartObj DATA TOOLTIP XY TWOLINE datatooltip SetEnable true chartVu SetCurrentMouseListener datatooltip Visual Basic Dim toolTipFont As New ChartFont SansSerif 10 FontStyles Normal Dim datatooltip As New DataToolTip chartVu Dim xValueTemplate As New TimeLabel ChartObj TIMEDATEFORMAT MDY Dim yValueTemplate As New NumericLabel ChartObj CURRENCYFORMAT 0 datatooltip GetToolTipSymbol SetColor Colors Green datatooltip SetXValueTemplate xValueTemplate datatooltip SetYValueTemplate yValueTemplate datatooltip SetDataToolTipFormat ChartObj DATA TOOLTIP XY TWOLINE datatooltip SetEnable True chartVu SetCurrentMouseListener datatooltip Complex data tooltip example Adapted from the OpeningScreen example In this example the tooltip will display the x value of the data point as a date and the y value as currency The x and y values are displayed on one line side by side C ChartFont toolTipFont new ChartFont SansSerif 10 FontStyles Normal DataToolTip datatooltip new DataToolTip chartVu TimeLabel xValueTemplate new TimeLabel ChartObj TIMEDATEFORMAT MDY NumericLabel yValueTemplate new NumericLabel ChartObj CURRENCYFORMAT 2 ChartText textTemplate new ChartText toolTipFont textTemplate SetTextBgColor Color FromRgb 255 255 204 textTemplate SetTextBgMode true ChartSymbol toolTipSymbol new ChartSymbol null ChartObj SQUARE new C
315. etFillFlag true CandlestickPlot thePlotl Simple Plot Objects 278 new CandlestickPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj DAY OF YEAR 0 8 defaultattrib fillattrib Visual Basic Dim Datasetl As New TimeGroupDataset Stock Data xValues stockPriceData Define axes axes labels and grids Dim defaultattrib As New ChartAttribute Colors Black 1 _ DashStyles Solid Colors White defaultattrib SetFillFlag True Dim fillattrib As New ChartAttribute Colors Black 1 DashStyles Solid Colors Red fillattrib SetFillFlag True Dim thePlotl As New CandlestickPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj DAY OF YEAR 0 8 defaultattrib fillattribh chartVu AddChartObject thePlot1 Note how the ChartCalendar GetCalendarWidthValue method calculates the width of the bars as a function of time in this case a width of 0 8 months Cell Plots Class CellPlot GraphObj ChartPlot GroupPlot CellPlot The CellPlot class extends the GroupPlot class and displays cell plots A cell plot is a collection of rectangular objects with independent positions widths and heights specified using the values of the associated group dataset The number of groups must be three The X Y 0 values of the group dataset represent the xy position of the lower left corner of each cell the Y 1 values set the width of the cell and the Y 2 values set the height of the
316. ets databases and word processing programs Datasets can also write CSV files loadable into other programs If you need to plot data stored in a database either save the data as a CSV file or read the data into arrays Once the data is in either format inititialize a dataset using the appropriate class and constructor The ChartDataset class is the abstract base class for all of the dataset classes It contains data common to all dataset classes such as the x value array the number of x values the dataset name and the dataset type 75 Chart Datasets Simple Numeric Dataset Class SimpleDataset ChartObj ChartDataset SimpleDataset The SimpleDataset class represents simple floating point xy data where for every x value there is one y value The number of xy data points in a simple dataset is referred to as the number of columns or as the property NumberDatapoints Think of a spreadsheet file that looks like x values x0 x0 xp xB al x 5 y values yO yu vil yB i va number of xy data pairs NumberDatapoints NumberColumns 6 This would be the ROW MAJOR format if the data were stored in a CSV file It has two main constructors This constructor creates a dataset using the x and y values stored in arrays SimpleDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As Double _ ByVal y As Double _ C4 public SimpleDataset string sname d
317. event ToolTip A custom tool tip which can be displayed if the event is clicked on 9 Chart Datasets Position The position of the event with respect to the underlying linear coordinate system TimeStamp The time stamp of the event Indirectly related to the Position of the event in the coordinate system NumericTimeStamp The numeric value of the time stamp in milliseconds an offset numericTimeStampOffset e NumericValues One or more numeric y values a simple plot uses a single y value while a group plot uses an array of y values The ChartEvent class incorporates two x value positioning properties the Position and the TimeStamp and one or more numeric y values for each event A single event therefore defines both the x and y values of the event in the underlying coordinate system A collection or array of ChartEvent objects define the data for a plot the same way as arrays of x and y values define a plot when using a simple dataset class with a Cartesian coordinate system The critical element of the ChartEvent which permit it to be used for the plotting of discontinuous data is that the Position of the event in a chart is related but independent of the TimeStamp of the event Event data can be positioned contiguously and evenly spaced in a chart even if the time stamps of the events are not contiguous or evenly spaced Here is a simple example of a standard financial candlestick plot chart using our Tim
318. ew class derives from the System Windows Controls UserControl class The ChartView class contains a collection of all the chart objects displayed in the chart and will automatically update all chart objects when the underlying window moves resizes or otherwise needs to redraw in response redraw event Since a ChartView derived window is a UserControl it can also be used as a container for other WPF components UserControl ChartView The ChartView class has only one constructor with no arguments ChartView constructor Visual Basic Public Class ChartView Inherits UserControl Ct public class ChartView UserControl All chart objects that have a graphical representation i e that consist of lines bars arcs text etc are subclasses of the GraphObj abstract base class This includes all of the axis classes axis label classes plot classes text classes and legend classes among others You must explicitly add objects of this type to the ChartView object using the ChartView AddChartObject method after they have been created and initialized Otherwise the object will not be included in the draw list of the ChartView The example below adds an axis object to the ChartView draw list ChartView AddChartObject example extracted from the example program ScatterPlots class LabeledDatapoints C ChartView chartVu new ChartView SimpleDataset Datasetl new SimpleDataset First xl yl CartesianCoordinates pTransfor
319. ext Classes 376 377 Text Classes npostype Specifies the if the position of the text is specified in physical coordinates normalized coordinates or WPF device coordinates Use one of the position constants DEV POS PHYS POS NORM GRAPH POS NORM PLOT POS nnumformat Specifies the numeric format of the label Use one of the ndecimal xjust yjust rotation The TimeLabel ElapsedTimeLabel and StringLabel classes are similar unique properties for numeric format constants DECIMALFORMAT SCIENTIFICFORMAT BUSINESSFORMAT ENGINEERINGFORMAT PERCENTFORMAT CURRENCEYFORMAT and EXPONENTFORMAT The number of digits to display to the right of the decimal point Specifies the horizontal justification of the text Use one of the text justification constants JUSTIFY MIN JUSTIFY CENTER or JUSTIFY MAX Specifies the vertical justification of the text Use one of the text justification constants JUSTIFY MIN JUSTIFY CENTER or JUSTIFY MAX The rotation 360 to 360 degrees of the text in the normal viewing plane each are listed below TimeL abel constructors Visual B Overloads ByVal ByVal ByVal Overloads ByVal ByVal ByVal ByVal ByVal ByVal ByVal ByVal ByVal ByVal Cf publie Ti Physic asic Public Sub New _ transform As PhysicalCoordinates _ date As ChartCalendar timeformat As Integer Public Sub New _ transform As PhysicalCoordinates tfont As ChartFont _ date As ChartCa
320. f the chart The default positioning of the axes for each coordinate system will all overlay one another making the axes unreadable In the y axis case you will want to offset additional axes to the left or to the right of the default axis position using the SetAxisIntecept method When using the SetAxisIntercept method make sure you specify the position using the units of the coordinate system scale at right angles to the axis Specify an intercept value outside of the normal scale range to offset the axes so that they do not overlap The example below extracted from the MultipleAxes MultiAxesChart example creates one x axis common to all of the charts because the x scaling for all of the coordinate systems match and five y axes one for each of the five different coordinate systems C CartesianCoordinates pTransforml CartesianCoordinates pTransform2 CartesianCoordinates pTransform3 CartesianCoordinates pTransform4 CartesianCoordinates pTransform5 Initialize datasets coordinate system ranges The x scale range for pTransforml to pTransform5 are all the same 0 100 The y scale range for pTransforml to pTransform5 are all different The plotting area for each pTransform is indentical leaving a large open to the left for extra axes 447 FAQs pIransforml SetGraphBorderDiagonal O 35 15 9 0 65 7 pTransform2 SetGraphBorderDiagonal 0 35 15 9 0 65 pTransform3 SetGraphBorderDiagonal 0 35 15 9 0 6
321. face data using line and filled contours Chapter 13 14 15 and 16 describe classes that add interactive elements to a chart Chapter 13 describes data marker and data cursor classes used to mark and highlight data points using the mouse Chapter 14 describes classes that can move chart objects individual data points and the coordinate system Chapter 15 adds a zooming class where mouse events define a new scaling range for a chart redrawing the chart axes and data automatically Chapter 16 describes a generalized data tool tip class that can display the x and or y data values for a data point or custom text associated with the data point Chapter 17 describes classes for the display of pie and ring charts Chapter 18 describes classes for the display of data in a polar and antenna chart format Chapter 19 describes classes for the display chart legends used to create visual aids for the interpretation of different elements making up the chart Chapter 20 describes generalized classes for displaying formatted text in a chart Chapter 21 describes how the DatasetViewer class is used to display simple and group datasets in a table format Chapter 22 describes how to use a generalized shape class for the display of arbitrary lines shapes images and arrows Chapter 23 describes chart printing and the creation of image files Chapter 24 is a tutorial that describes how to use QCChart2D to create Windows applications using Visual Stud
322. fined series of steps The second way you add new chart objects to the ChartView using the ChartView AddChartObject method In both cases you need to call the ChartView UpdateDraw method after any changes are made The example below extracted from the CustomChartDataCursor class creates a new Marker object and NumericLabel object each time a mouse button clicked C Marker amarker new Marker GetChartObjScale MARKER BOX nearestPoint GetX nearestPoint GetY 10 0 PHYS POS chartVu AddChartObject amarker rNumericLabelCntr 1 0 Add a numeric label the identifies the marker pointLabel new NumericLabel GetChartObjScale textCoordsFont rNumericLabelCntr nearestPoint GetX nearestPoint GetY PHYS POS DECIMALFORMAT 0 Nudge text to the right and up so that it does not write over marker pointLabel SetTextNudge 5 5 chartVu AddChartObject pointLabel chartVu UpdateDraw VB Dim amarker As New Marker GetChartObjScale MARKER BOX nearestPoint GetX nearestPoint GetY 10 0 PHYS POS chartview AddChartObject amarker rNumericLabelCntr 1 0 Add a numeric label the identifies the marker pointLabel New NumericLabel GetChartObjScale textCoordsFont rNumericLabelCntr nearestPoint GetX nearestPoint GetY PHYS POS DECIMALFORMAT 0 Nudge text to the right and up so that it does not write over marker pointLabel SetTextNudge 5 5 chartview AddChartObject pointLabel
323. following manner NumericAxisLabels The LinearAxis and LogAxis axis types use this class Full decimal conversion 0 000015 Scientific notation 1 5e 5 Exponent notation 1 5x10 Percent format 76 Business format where B M and K are used to represent billions millions and thousands 1043M 11 0K Currency format 123432 Business currency format The business format combined with the currency format 123K 5 amp 9 amp 9 StringAxisLabels 217 Axis Labels The LinearAxis and LogAxis axis types use this class Arbitrary strings MA PA JEFF Sales are used to label the major tick marks of the axis TimeAxisLabels The TimeAxis axis types use this class Time formats hh mm ss hh mm mm ss etc Date formats mm dd yy dd mm yy mm yy etc Time Date formats mmm ddd yyy hh mm ss 3 amp 9 9 ElapsedTimeAxisLabels The ElapsedTimeAxisLabels are used in combination with the ElapsedTimeAxis type Elapsed time formats hh mm ss hh mm mm ss mm ss fff etc EventAxisLabels The EventeAxisLabels are used in combination with the EventAxis type Time formats hh mm ss hh mm mm ss etc Date formats mm dd yy dd mm yy mm yy etc Time Date formats mmm ddd yyy hh mm ss 3 amp 9 9 PolarAxesLabels This class displays numeric labels exclusively for the PolarAxes class It uses labels in the same format as the NumericAxisLabels AntennaAxesLabels This
324. forml AutoScale Dataset3 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 125 0 15 0 95 0 725 Dim background As New Background pTransforml ChartObj PLOT BACKGROUND Colors White chartVu AddChartObject background Define and add axes axes labels and grids to chart Dim attribl As New ChartAttribute Colors Blue 1 DashStyles Solid attribl SetFillColor Colors Blue attribl SetFillFlag True attribl SetSymbolSize 10 Dim thePlotl As New SimpleScatterPlot pTransforml Dataset2 _ ChartObj CROSS attribil chartVu AddChartObject thePlotl Dim attrib2 As New ChartAttribute Colors Green 3 DashStyles Solid Dim thePlot2 As New SimpleLinePlot pTransforml Datasetl attrib2 hartVu AddChartObject thePlot2 Q Simple Plot Objects 260 Dim attrib3 As New ChartAttribute Colors Red 1 DashStyles Solid attrib3 SetFillColor Colors Red attrib3 SetFillFlag True attrib3 SetSymbolSize 6 Dim thePlot3 As New SimpleScatterPlot pTransforml Dataset3 ChartOb CIBCLE gttrib3 chartVu AddChartObject thePlot3 Simple scatter plot example that uses SetSegmentAttributesMode to change the size and color of individual scatter plot symbols in the plot extracted from the example program ScatterPlots class ScatterPoints C hartAttribute attribl new ChartAttribute Colors Blue 1 DashStyles Solid ttribl SetFillColor Colors Blue ttribl SetLineFlag true ttribl SetSymbolSize
325. g it in the CSV object using CSV SetTimeDateFormat method The date time format string and the DateTimeFormatInfo object apply to both CSV files used for input and CSV files used for output If an attempt is made to read date time values that do not match the desired format the data values are set to invalid date time values You can also modify a point at a time using SetEvent If you need to add new points to the dataset increasing its size use one of the AddEvent or InsertEvent methods Delete data points using the DeleteEvent method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a simple event datasets extracted from the ChartEventExamples SimpleEventChart example program C int nnumpnts 10 ChartCalendar xl new ChartCalendar nnumpnts double yl new double nnumpnts ChartCalendar currentdate new ChartCalendar 1998 ChartObj JANUARY 1 ChartEvent chartevents new ChartEvent nnumpnts int i double startx 1 for i 0 i nnu mpnts i y1 0 100 x1 0 ChartCalendar currentdate Clone chartevents 0 new ChartEvent x1 0 startx y1 0 chartevents 0 AxisLabel XY 0 currentdate Add ChartObj MONTH 12 else xl i ChartCalendar currentdate Clone ylli yl i 1 25 0 55 ChartSupport GetRandomDouble chartevents i new ChartEvent xl i i startx yl il chartevents i
326. gradient Should you want to use some sort of image as a background for the chart use the ChartImage class and size it to fill the entire view The example below defines a simple linear gradient for the graph background area extracted from the example program SimpleLinePlots class LineFill C pTransforml new TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 1 92 0 75 Background background new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 100 50 255 Color FromRgb 40 25 120 ChartObj Y AXIS chartVu AddChartObject background 179 Colors Gradients and Backgrounds Visual Basic Dim pTransforml As TimeCoordinates New TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 1 0 92 0 75 Dim background As New Background pTransforml _ ChartObj GRAPH BACKGROUND Color FromRgb 100 50 255 _ Color FromRgb 40 25 120 ChartObj Y AXIS chartVu AddChartObject background The example below defines a custom linear gradient for the graph background area C pTransforml new TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 1 92 0 75 LinearGradientBrush lgb new LinearGradientBrush lgb GradientStops
327. gular value from the orign to the outer edge of the antenna chart or ANTENNA ANNOTATION RADIUS draws a circle at the specified radius value value The value of the annotation For an angular annotation specify the value in degrees For a radial annotation specify a value within the range of the antenna minimum and maximum radial values attrib Specifies the attributes size line and fill color for the annotation See previous example for a programming example using AntennaAnnotationPlot 19 Legends Legend StandardLegend BubblePlotLegend Charts containing multiple chart objects line plots bar graphs and scatter plots for example usually require a legend The legend provides a key so that the viewer of the chart can figure out what data 1s associated with what chart object The bounding box of the legend is rectangular and can reside anywhere in the chart window inside the plot area overlapping it or completely outside The legend rectangle can have a border and can be filled with a solid color or left transparent The legend object can hold one or more legend items where each legend item is a symbol text string combination providing the key for one of the plot objects in the graph The legend can also have a title and footer The Legend class is the abstract base class for chart legends It organizes a collection of legend items as a rectangular object The StandardLegend is a concrete implementation of the Legend class an
328. h it Polar Axes A polar axis consists of the x and y axis for magnitude and the outer circle for the angle This class has three separate axes two linear and one circular The two linear axes scaled for the magnitude of the polar scale form a cross with the center of both axes at the origin 0 0 The third axis is a circle centered on the origin with a radius equal to the magnitude of the polar scale This circular axis represents 360 degrees or 2 Pi radians of the polar scale and the tick marks that circle this axis are spaced at equal degree intervals Class Architecture 42 270 180 AntennaAxes This class has two axes one linear y axis and one circular axis The linear axis is scaled for the desired range of radius values This can extend from minus values to plus values The second axis is a circle centered on the origin with a radius equal to the range of the radius scale This circular axis represents 360 degrees of the antenna scale and the tick marks that circle this axis are spaced at equal degree intervals Axis Label Classes AxisLabels NumericA xis Labels StringAxisLabels PolarAxesLabels AntennaAxesLabels TimeAxisLabels ElapsedTimeAxisLabels 43 Class Architecture EventAxisLabels Axis labels inform the user of the x and y scales used in the chart The labels center on the major tick marks of the associated axis Axis labels are usually numbers times dates or arbitrary strings Axis La
329. hBorderDiagonal 0 SetGraphBorderDiagonal 0 SetGraphBorderDiagonal 0 SetGraphBorderDiagonal 0 SetGraphBorderDiagonal 0 35 Soy 38 38 EM Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND Colors chartVu AddChartObject background AS As As As As New New New New New attribl attrib2 attrib3 attrib4 attribs ChartAttribute Colors ChartAttribute Colors ChartAttribute Colors ChartAttribute Colors ChartAttribute Colors Blue 2 Red 2 Green Orange Magenta Dim Dim Dim Dim Dim 2 xAxis New LinearAxis pTransforml xAxis SetLineWidth 2 chartVu AddChartObject xAxis Us doe Mee 0 95 0 15 0 9 0 65 e 0 15 0 9 0 657 0 15 0 9 0565 0 15 0 9 0 65 White DashStyles Solid DashStyles Solid DashStyles Solid 2 DashStyles Solid 2 DashStyles Solid ChartObj X AXIS yAxisl New LinearAxis pTransforml ChartObj Y AXIS yAxisl SetAxisIntercept 0 0 yAxisl SetChartObjAttributes attribl1 axis color matches line color chartVu AddChartObject yAxis1 yAxis2 New LinearAxis pTransform2 ChartObj Y AXIS yAxis2 SetAxisIntercept 18 yAxis2 SetChartObjAttributes attrib2 axis color matches line color chartVu AddChartObject yAxis2 yAxis3 New LinearAxis pTransform3 ChartObj Y AXIS yAxis3 SetAxisIntercept 35 yAxis3 SetChartObjAttributes attrib3 axis color matches line color 449 FAQs chartVu AddChar
330. hDotDot Dot or Solid Linear Axes Class LinearAxis GraphObj Axis LinearAxis Linear Axis Minimum and Maximum The axes minimum and maximum are the physical coordinate values that define the starting and ending points of the axis line It is a mistake to try to invert the axis i e an axis where the scale decreases from left to right or bottom to top by setting axis minimum to a value greater than the axis maximum The software swaps the values if this happens Create an inverted axis by first defining an inverted physical coordinate system using one of the PhysicalCoordinates derived classes Place the axis in the inverted coordinate system The minimum and maximum of a linear axis can assume any numeric values This differentiates the linear axis from logarithmic time polar and antenna axes which have specific valid numeric ranges Linear Minor and Major Tick Mark Intervals Major tick marks perpendicular to the axis line divide the line into sub ranges suitable for labeling Minor tick marks also perpendicular to the axis line further subdivide the space between the major tick marks into even smaller intervals 183 Axes The major tick mark interval for a linear axis is set equal to a specified integer number of minor tick intervals forcing major tick marks to always fall on a minor tick mark It is important that the tick mark intervals fall on rounded values appropriate to the physical scale of the chart It
331. hart Objects and Data Points The MoveData mouse listener traps a mouse pressed event and searches through all of the data points of the plot objects in the view The data point closest to the mouse cursor location is compared against a threshold value 10 device units or pixels by default If the data point is within the threshold and as long as the moue buttons is held down it tracks the mouse Release the mouse button and the data value associated with the selected data point updates to reflect the new physical coordinates of the data point and the plot is redrawn Since the algorithm searches through every data point of every plot object in the view do not expect it to work particularly fast with millions or even thousands of data points The practical number of data points that can be searched is obviously dependent on the speed of the host computer MoveData constructors Visual Basic Overloads Public Sub New _ ByVal component As ChartView _ ByVal transform As PhysicalCoordinates _ ByVal buttonmask As MouseButton Ct public MoveData ChartView component PhysicalCoordinates transform MouseButton buttonmask component A reference to the ChartView object that the chart is placed in transform The PhysicalCoordinates object associated with the MoveData object buttonmask Specifies the mouse button that is trapped to invoke a move Create the MoveData object and then install it using the ChartView SetCurrentMo
332. hartAttribute Colors Black toolTipSymbol SetSymbolSize 5 0 datatooltip SetTextTemplate textTemplate datatooltip SetXValueTemplate xValueTemplate datatooltip SetYValueTemplate yValueTemplate datatooltip SetDataToolTipFormat ChartObj DATA TOOLTIP OHLC datatooltip SetToolTipSymbol toolTipSymbol datatooltip SetEnable true chartVu SetCurrentMouseListener datatooltip Visual Basic Dim toolTipFont As New ChartFont SansSerif 10 FontStyles Normal Dim datatooltip As New DataToolTip chartVu Dim xValueTemplate As New TimeLabel ChartObj TIMEDATEFORMAT MDY 339 Data ToolTips Dim yValueTemplate As New NumericLabel ChartObj CURRENCYFORMAT 2 Dim textTemplate As New ChartText toolTipFont textTemplate SetTextBgColor Color FromRgb 255 255 204 textTemplate SetTextBgMode True Dim toolTipSymbol As New ChartSymbol Nothing ChartObj SQUARE _ New ChartAttribute Colors Black toolTipSymbol SetSymbolSize 5 0 datatooltip SetTextTemplate textTemplate datatooltip SetXValueTemplate xValueTemplate datatooltip SetYValueTemplate yValueTemplate datatooltip SetDataToolTipFormat ChartObj DATA TOOLTIP OHLC datatooltip SetToolTipSymbol toolTipSymbol datatooltip SetEnable True chartVu SetCurrentMouseListener datatooltip Custom Tooltip displays It would be impossible to provide options for all possible tooltip displays The DataToolTip class includes an option that enables the program
333. hartObj AUTOAXES FAR pTransforml SetScaleStartX 20 Force start of scale at 20 AutoScale will always choose a power of 10 decade Dim xAxis As LogAxis New LogAxis pTransforml ChartObj X AXIS xAxis SetAxisTickOrigin 20 chartVu AddChartObject xAxis 13 How do I create and use custom multi line string labels as the axis labels for my graph The StringAxisLabels class should be used to create multi line axis labels Insert the n new line character to add additional lines to each string used to define the string axis labels The example below is from the AxisLabels example program C String xstringlabels Western n Sales n Region Rastern n Sales n Region Southern n Sales n Region Northern n Sales n Region StringAxisLabels xAxisLab5 new StringAxisLabels xAxis5 xAxisLab5 SetAxisLabelsStrings xstringlabels 5 xAxisLab5 SetTextFont graph5Font chartVu AddChartObject xAxisLab5 Visual Basic Dim xstringlabels As String Western ControlChars Lf Sales ControlChars Lf Region Eastern ControlChars Lf Sales ControlChars Lf Region Southern ControlChars Lf Sales ControlChars Lf Region Northern ControlChars Lf Sales ControlChars Lf Region p Dim xAxisLab5 As New StringAxisLabels xAxis5 xAxisLab5 SetAxisLabelsStrings xstringlabels 5 xAxisLab5 SetTextFont graph5Font
334. hartText pTransforml theLabelFont I b 150uA 15 5 gtt 25 L ChertODj PHYS POS chartVu AddChartObject currentLabel3 Dim currentLabel4 As New ChartText pTransforml theLabelFont I b 200uA 15 5 y1 3 85 1 ChartObj PHYS POS chartVu AddChartObject currentLabel4 Dim currentLabel5 As New ChartText pTransforml theLabelFont I b 250uA 5 5 ylfd 85 1 CherrODj PHYS POS chartVu AddChartObject currentLabel5 Dim currentLabel6 As New ChartText pTransforml1 theLabelFont I b 300uA 5 5 vis Bo Obj PHYS POS chartVu AddChartObject cur Dim currentLabel7 As New ChartText pTransforml theLabelFont I b 350uA 5 5 yli5 95 Ty OhertObj PHYS SOS chartVu AddChartObject currentLabel7 Dim regionLabel As New ChartText pTransforml theLabelFont _ Linear ControlChars Lf Region 4 0 40 ChartObj PHYS POS chartVu AddChartObject regionLabel Text Classes 372 ChartText time coordinates example extracted from the example program MiscCharts class LineGap C ChartFont theLabelFont new ChartFont SansSerif 14 FontStyles Normal FontWeights Bold ChartText chartLabell new ChartText pTransforml theLabelFont Sales xValues 1 GetCalendarMsecs groupBarData 1 1 ChartObj PHYS POS chartLabell SetColor Colors White chartLabell SetYJust ChartObj AXIS MIN chartVu
335. he time date scale Allow for a sub range of a day which crosses 24 00 i e 18 00 to 3 00 Allow for multiple active time ranges within the same 24 hour period i e 9 00 AM to 12 00 and 14 00 to 18 00 e Smooth panning and zooming of data across discontinuous time boundaries Allow for exceptions to the predefined set of rules For example be able to include a weekend day or a specific set of hours normally excluded from the scale These requirements are common enough that we wanted to address them with new coordinate system dataset and axis classes which can accommodate any set of continuous or discontinuous time date values but not waste display space on gaps where no data exists Rather than extend the existing time date coordinate system TimeCoordinates we chose to create new coordinate system EventCoordinates which uses discrete events rather than a continuous domain as the basis for plotting data The basis of the EventCoordinates system are the event dataset classes EventSimpleDataset and EventGroupDataset and the underlying array of ChartEvent objects Rather than define a plot using arrays of x and y values a ChartEvent represents a specific point in time The point in time has the following major properties as distinguishing elements Description A description of the event ShortDescription An abbreviated description of the event e AxisLabel A string which can be uses as an axis label for the
336. he CartesianCoordinates class to scale the chart You loose the date time formatting of the axis labels but this should not matter if you are dealing in the sub millisecond realm Class TimeCoordinates PhysicalCoordinates 127 Scaling and Coordinate Systems t TimeCoordinates The TimeCoordinates class scales the chart plot area for physical coordinate systems that use date time scaling The basic techniques are essentially the same as those used with linear and logarithmic scaling only the TimeCoordinates class uses ChartCalendar dates in place of numeric values for the x or y axis scale values The minimum and maximum values of the x and y scales can be set explicitly set using one of the auto scale methods or set using a combination of the two The default coordinate system for the TimeCoordinates class is time for the x scale and linear for the y scale scale The y scale can be logarithmic and you can set that mode using the explicit scale mode version of the TimeCoordinates constructor If you already know the range for x and y for the plot area you can scale the plot area explicitly In the example below a TimeCoordinates constructor initializes the coordinates to the proper values TimeCoordinates constructor with explicit scaling of a time based x scale and a numeric based y scale C ChartCalendar xMin ChartCalendar xMax double yMin 0 double yMax 105 new ChartCalendar 1996 ChartObj FEBRUARY 5 new ChartCa
337. he ChartLabel class and it displays formatted ChartCalendar dates Class Architecture 62 ElapsedTimeLabel This class is a concrete implementation of the ChartLabel class and it displays numeric values formatted as elapsed time strings 12 32 21 StringLabel This class is a concrete implementation of the ChartLabel class that formats string values for use as axis labels Miscellaneous Chart Classes Marker ChartImage ChartShape ChartSymbol Various classes are used to position and draw objects that can be used as standalone objects in a graph or as elements of other plot objects Marker This class displays one of five marker types in a graph The marker is used to create data cursors or to mark data points ChartImage This class encapsulates a System Windows Control Image class defining a rectangle in chart coordinates that the image is placed in JPEG and other image files can be imported using the Image class and displayed in a chart ChartShape This class encapsulates a System Windows Media PathGeometry class placing the shape in a chart using a position defined in chart coordinates A chart can display any object that can be defined using PathGeometry class ChartSymbol This class defines symbols used by the SimplePlot scatter plot functions Pre defined symbols include square triangle diamond Cross plus star line horizontal bar vertical bar 3D bar and circle Mouse Interaction Classes MouseListener MoveObj
338. he direction parallel to their current position effectively changing the axis intercept but not the extents of the axis endpoints Axis labels always track their reference axis The base axis defines the position of an AxisTitle text object and the chart view defines the position of a ChartTitle text object Attemp to move these objects and they revert to their original centered positions If you require moveable chart and axis titles use the generic ChartText class instead of the title classes Moving objects example Adapted from the MoveObjects class C ChartView chartVu new ChartView CartesianCoordinates pTransforml new CartesianCoordinates 0 0 0 0 10 0 20 0 pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR MoveObj mouselistener new MoveObj chartVu mouselistener SetEnable true mouselistener SetMoveObjectFilter GraphObj chartVu SetCurrentMouseListener mouselistener Visual Basic Dim chartVu As ChartView New ChartView Dim pTransforml As CartesianCoordinates New CartesianCoordinates 0 0 0 0 10 0 20 0 pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR _ ChartObj AUTOAXES FAR Dim mouselistener As MoveObj New MoveObj chartVu mouselistener SetEnable True mouselistener SetMoveObjectFilter GraphObj chartVu SetCurrentMouseListener mouselistener Moving Simple Plot Object Data Points Class MoveData MouseListener MoveData 321 Moving C
339. he graph coordinate system the odd pixel problem still exists We avoid the odd pixel problem by never plotting points using the plot area coordinate system using only the graph area coordinate system instead The calculated physical coordinate system applied to the graph area is referred to as the working coordinate system Coordinate Systems A QCChart2D for WPF library uses other coordinate systems mapped onto the default WPF device independent coordinate system These other coordinate systems include world coordinates working coordinates and physical coordinates Scaling and Coordinate Systems 114 User Coordinates The UserCoordinates class manages a simple viewport drawing system using the Net WPF drawing classes World Coordinates The WorldCoordinates class maps a linear double based coordinate system onto the integer based user coordinate system of the UserCoordinates class Where the underlying user coordinate system may have an integer range for example 0 400 0 300 units the world coordinate system is able to map this to a completely arbitrary double based linear range for example 0 0 to 10 0 0 0 to 10 0 The world coordinate system applies to the entire graph window and not just the plot area Working Coordinates The WorkingCoordinates class manages a working coordinate system that maps the physical coordinate system of the plot area into a linear world coordinate system applied to the whole viewport For exa
340. he manual or to existing example programs We will always attempt to answer any question that you may post but be prepared that we may ask you to create and send to us a simple example program The program should reproduce the problem with no or minimal interaction from the user You should strip out of any code not directly associated with reproducing the problem You can use either your own example or a modified version of one of our own examples WPF Background Initially the primary graphics text rendering and user interface framework for programmers using the Net languages was GDI an evolutionary adaptation of the older Windows GDI programming model in place since Windows 1 0 GDI under Net is extremely successful and there are no indications Microsoft plans to end support for it in subsequent releases of Visual Studio But Microsoft has long had an alternative graphics framework for game programmers DirectX which programmers found a better fit for the complex graphics required in game programming One of the strong selling points of DirectX is that the Windows operating system can offload time intensive graphics calculations to specialized GPU Graphics Processing Unit chips found in high and medium end computers Starting early in the last decade Microsoft wrote an alternative graphics rendering and user interface framework around DirectX This framework is known as the Windows Presentation Foundation framework or WPF for shor
341. he milliseconds for any time base and any number of units The code below sets a minimum zoom range of 45 minutes C double minZoomTimeRange ChartCalendar GetCalendarWidthValue ChartObj MINUTE 45 double minZoomYRange 0 01 Dimension zoomLimits new Dimension minZzoomTimeRange minZoomYRange zoomObj SetZoomRangeLimits zoomLimits Visual Basic Dim minZoomTimeRange As double _ ChartObj GetCalendarWidthValue ChartObj MINUTE 45 Dim minZoomYRange As Double 0 01 Dim zoomLimits As Dimension New Dimension minZoomTimeRange minZoomYRange zoomObj SetZoomRangeLimits zoomLimits Magnifying a portion of a chart in a separate window Class MagniView MouseListener t MagniView Zooming 332 The MagniView class needs two chart areas in order to work a source chart area which contains the full scale display of the chart and the target chart area which will contain a magnified view of the chart The MagniView class starts the magnify operation on the OnMouseDown event positioning the lower left corner of a magnify rectangle on top of the source chart Immediately a magnified view of the chart will appear in the target chart As the mouse moves the magnify rectangle the target chart constantly updates to reflect the current view window Once the mouse button is released the target chart remains at its current values MagniView constructor The constructor below creates a MagniView object for a single chart coor
342. he plot and the resolution of the data A typical chart image will have 500 1000 pixels as the horizontal resolution of the plotting area This would imply that in the 100M data point example above every horizontal pixel would represent 50K to 100K data points Obviously this is a terrible mismatch In fact it is a bad match for datasets that have more than a couple of thousands points So what you do is compress the data before it is displayed Take the 100M data points and compress them down to 2K data points The data compression can take several forms You can take an average of every N points The resulting dataset will be reduced by a factor of N You can also find the sum for every N points the minimum value of every N points the maximum of every N points or both the minimum and maximum of every 2N points The last compression method minimum and maximum will always capture any minimums and maximum in the data The result is that a 2000 point compressed dataset where there are at least two data points per pixel of horizontal resolution will look just like the 100 000 000 point dataset only display hundreds of times faster The Datset classes all include compression methods SimpleDataset CompressSimpleDataset GroupDataset CompressGroupDataset TimeSimpleDataset CompressTimeSimpleDataset and TimeGroupDataset CompressTimeGroupDataset TimeGroupDataset CompressTimeFieldSimpleDataset TimeGroupDataset CompressTimeField GroupDataset
343. he source chart Simple Zooming of a single physical coordinate system Class ChartZoom MouseListener ChartZoom Zooming 326 The ChartZoom class implements Net delegates for mouse events It implements and uses the mouse events MouseMove MouseDown and MouseUp The default operation of the ChartZoom class starts the zoom operation on the MouseDown event it draws the zoom rectangle using the XOR drawing mode during the MouseMove event and terminates the zoom operation on the mouse released event During the mouse released event the zoom rectangle is converted from device units into the chart physical coordinates and this information is stored and optionally used to rescale the chart scale and all axis objects that reference the chart scale If four axis objects reference a single chart scale for example when axes bound a chart on all for sides all four axes re scale to match the new chart scale ChartZoom constructor The constructor below creates a zoom object for a single chart coordinate system Visual Basic Overloads Public Sub New _ ByVal component As ChartView _ ByVal transform As PhysicalCoordinates _ ByVal brescale As Boolean _ Ct public ChartZoom ChartView component PhysicalCoordinates transform bool brescale component A reference to the ChartView object that the chart is placed in transform The PhysicalCoordinates object associated with the scale being zoomed brescale True designates
344. he tick marks of an EventAxis EventCoordinates Event coordinates define a coordinate system based on the the attached Event datasets s EventGroupDataset A group dataset which uses ChartEvent objects as the source of the data It is used to feed data into the group plotting routines EventScale An event scale class used to convert between event coordinates and device coordinates EventSimpleDataset A simple dataset which uses ChartEvent objects as the source of the data It is used to feed data into the simple plotting routines EuroDollar CandlestickChart FinLogPlot DHLCChart OpeningScreen Financialptions Techrical amp nalysis Candlestick Plots in Technical Analysis 7 03 12 7 05 12 7 06 12 7 09 12 7 10 12 7 11 12 The Open Close box is filled if the open price is greater than the close price Event coordinates transition smoothly across holidays weekends and unused hours of the day Tutorials Tutorials that describe how to get started with the QCChart2D for WPF charting software are found in Chapter 24 Using QCChart2D for WPF to Create Windows Applications and Chapter 25 Using QCCAart2D for WPF to Create Web Applications Customer Support Use our forums at http www quinn curtis com ForumFrame htm for customer support Please do not post questions on the forum unless you are familiar with this manual and have run the examples programs provided We try to answer most questions by referring to t
345. he time stamps of the events are not contiguous or evenly spaced Here is a simple example of a standard financial candlestick plot chart using our TimeCoordinates class as the coordinate system where the time date data is not evenly spaced and contains large gaps corresponding to weekends and inactive hours of the day The July 4 holiday is included in the range and there is no data for that time interval either Scaling and Coordinate Systems 142 EuroDollar FinLogPlot OHLCChart OpeningScreen FinancialOptions Technicalnalysis Candlestick Plots in Technical Analysis 7 08 12 7 15 12 7 22 12 The Open Close box is filled if the open price is greater than the close price Contrast this to the similar data using the same time range plotted using the EventCoordinates class Note how every event is evenly spaced with its neighbor Gaps do not exist since weekends holidays and unused hours are bridged over as if they do not exist he same would be true for gaps due to holidays and a varying number of work hours in a day 143 Scaling and Coordinate Systems S 1 d d di lh b A A a Ai Aw d d d E 7 09 12 The Open Close box is filled if the open price is greater than the close price Zooming in further you can see the smooth transition across the July 4 holiday and the following weekend EuroDolar CandlestickChart FinLogPlot OHLCEhart OpeningScreen FinancialOptions Technical nalysis
346. here the 4 00 PM to 6 00 PM time segment is included in the range TimeCoordinates constructor with time of day parameters Visual Basic Overloads Public Sub New _ ByVal dstart As ChartCalendar _ ByVal starttime As Long _ ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal stoptime As Long _ ByVal y2 As Double ByVal nweektype As Integer _ Overloads Public Sub New _ ByVal dstart As ChartCalendar ByVal starttime As Long _ ByVal yl As Double _ ByVal dstop As ChartCalendar ByVal stoptime As Long _ ByVal y2 As Double _ ByVal ntimeaxis As Integer _ ByVal nweektype As Integer _ C public TimeCoordinates ChartCalendar dstart long starttime double yl ChartCalendar dstop long stoptime double y2 int nweektype LE public TimeCoordinates ChartCalendar dstart long starttime double yl ChartCalendar dstop long stoptime double y2 int ntimeaxis int nweektype LE TimeCoordinates constructor example for a 5 day week and 9 30 AM to 4 00 PM time of day range C long starttod 9 60 30 60 1000 msecs cooresponding to 9 30 AM long stoptod 16 60 60 1000 msecs cooresponding to 4 00 PM ChartCalendar dstart new ChartCalendar 1996 ChartObj FEBRUARY Di ChartCalendar dstop new ChartCalendar 1997 ChartObj JANUARY 5 135 Scaling and Coordinate Systems double yl 0 0 double y2 55 0 TimeCoordinates stockTimeScale stockTimeScale
347. hich corresponds to the group values Y 0 Y 1 Y 2 of the dataset are displayed side by side as a group justified with respect to the X position value for each group GroupBarPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As GroupDataset _ ByVal rbarwidth As Double _ ByVal rbarbase As Double _ ByVal attribs As ChartAttribute ByVal nbarjust As Integer _ Ct public GroupBarPlot PhysicalCoordinates transform GroupDataset dataset double rbarwidth double rbarbase ChartAttribute attribs int nbarjust A transform The coordinate system for the new GroupPlot object dataset The group bar graph represents the values in this group dataset Individual bars the height of which corresponds to the group values Y 0 Y 1 Y 2 of the dataset rbarwidth The width of the group bars in units of the independent axis All bars within a group are squeezed into the width defined by rbarwidth Each individual bar within the group has a width of rbarwidth dataset GetNumberGroups 289 Simple Plot Objects rbarbase The group bars start at the value rbarbase and extend to the group bar values represented by the dataset attribs An array of ChartAttribute objects sized the same as the number of groups in the dataset specify the attributes outline color and fill color for each group of a group bar graph nbarjust The group ba
348. i xValues i ChartCalendar currentdate Clone stockPriceData 3 i stockPriceData 3 i 1 d 40 52 ChartSupport GetRandomDouble close stockPriceData 0 i stockPriceData 3 i 2 0 5 ChartSupport GetRandomDouble open minval Math Min stockPriceData 3 i stockPriceData 0 i maxval Math Max stockPriceData 3 i stockPriceData 0 i stockPriceData 1 i maxval 1 5 ChartSupport GetRandomDouble high stockPriceData 2 i minval 1 5 ChartSupport GetRandomDouble 77 low currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode TimeGroupDataset Datasetl new TimeGroupDataset Stock Data xValues stockPriceData TimeGroupDataset Datasetl new TimeGroupDataset Stock Data xValues stockPriceData Visual Basic Dim nNumPnts As Integer 50 Dim nNumGroups As Integer 4 Dim weekmode As Integer ChartObj WEEK 5D Dim xValues nNumPnts 1 As ChartCalendar Dim stockPriceData nNumGroups 1 nNumPnts 1 As Double Dim minval As Double 0 0 Dim maxval As Double 0 0 Dim i As Integer Dim currentdate As New ChartCalendar Make sure not to start on a weekend currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode xValues 0 currentdate Clone currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode stockPriceData 3 0 25 close stockPriceData 0 0 25 open StockPriceData 1 0 26 high stockPriceData 2
349. ibi chartVu AddChartObject thePlot3 Dim thePlot4 As New AntennaAnnotation pAntennaTransform ANTENNA ANNOTATION RADIUS 12 attrib4 chartVu AddChartObject thePlot4 25 Class AntennaAnnotation GraphObj AntennaAnnotation DashStyles Solid Datasetl attribl Dataset2 attrib2 DashStyles Solid Colors Yellow DashStyles Dot ChartObj Polar and Antenna Charts 358 The AntennaAnnotation class is used to highlight either a specific radius or angular value in an antenna chart The radius is highlighted using a circle and the angular value is highlighted using a line draw from the origin to the outer edge of the antenna chart 0 270 180 Two annotations a radius annotations dotted blue line at the radial value 12 and an angular annotations solid yellow line at the angular value 180 degrees AntennaAnnotationPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As AntennaCoordinates ByVal annotationtype As Integer _ ByVal value As Double _ ByVal attrib As ChartAttribute Ct public AntennaAnnotation AntennaCoordinates transform int annotationtype double value ChartAttribute attrib LE transform The coordinate system for the new AntennaScatterPlot object 359 Polar and Antenna Charts annotationtype The annotation type Use one of the annotation type constants ANTENNA ANNOTATION ANGULAR draws a radial line at the specified an
350. ible to select a single data point in a simple plot object SimpleLinePlot SimpleBarPlot SimpleLineMarkerPlot and SimpleScatterPlot and move it with a click and drag operation of the mouse Again it is an option that you can add to the program if you want Starting in Revision 2 0 we have added the capability of moving the coordinates system of a graph using the MoveCoordinates class The move operation is analogous to the way you can change the latitude and longitude of an internet map by clicking and dragging it Moving Chart Objects Class MoveObj MouseListener MoveObj The MoveObj mouse listener traps a mouse pressed event and then searches through all of the GraphObj derived objects in the view A rectangle highlights the first object that meets the filter criteria and intersects the mouse cursor Hold the mouse button down and the rectangle tracks the mouse Release the mouse button and the position of the graph object updates to reflect the new physical coordinates of the bounding rectangle If no objectfilter parameter is specified the default object filter is GraphObj MoveObject constructors 319 Moving Chart Objects and Data Points Visual Basic Overloads Public Sub New _ ByVal component As ChartView _ ByVal buttonmask As MouseButton _ ByVal objectifilter As String Overloads Public Sub New _ ByVal component As ChartView _ ByVal buttonmask As MouseButton Ct public MoveObj Cha
351. ic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal rbarwidth As Double _ ByVal rbarbase As Double _ ByVal attribs As ChartAttribute ByVal nbarjust As Integer _ C public StackedBarPlot PhysicalCoordinates transform GroupDataset dataset double rbarwidth double rbarbase ChartAttribute attribs int nbarjust LE transform The coordinate system for the new StackedBarPlot object dataset The stacked bar graph represents the values in this group dataset rbarwidth The width of the stacked bars in units of the independent axis rbarbase The stacked bars start at the value rbarbase and extend to the group bar values represented by the dataset attribs An array of ChartAttribute objects sized the same as the number of groups in the dataset that specify the attributes outline color and fill color for each group of a stacked bar graph nbarjust The stacked bars are justified with respect to the x values in the dataset using the rbarjust justification value JUSTIFY MIN JUSTIFY CENTER or JUSTIFY MAX 301 Simple Plot Objects Each stacked bar can be labeled with the group value bar using the bar data point methods see the example below The attributes for each group can set or modified using the SetSegment methods where the segment number parameter corresponds to the group number These methods include SetSegmentAttributes SetSegmentFillCol
352. icFormat ChartObj CURRENCYFORMAT bardatavalue SetDecimalPos 0 bardatavalue SetColor Colors White thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue true chartVu AddChartObject thePlot1 Visual Basic Dim attribl As New ChartAttribute Colors Green 0 DashStyles Solid Colors Green attribl SetFillFlag True Dim thePlotl As New SimpleBarPlot pTransforml Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 D 0 attribl ChartObj JUSTIFY CENTER Dim bardatavalue As NumericLabel thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj CURRENCYFORMAT bardatavalue SetDecimalPos 0 bardatavalue SetColor Colors White thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue True chartVu AddChartObject thePlotl Simple Scatter Plots Class SimpleScatterPlot GraphObj ChartPlot SimplePlot SimpleScatterPlot Simple Plot Objects 258 The SimpleScatterPlot class is a concrete implementation of the SimplePlot class and displays simple datasets in scatter plot format where each data point is a symbol SimpleScatterPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As SimpleDataset ByVal symtype As Integer _ ByVal attrib As ChartAttribute _ Cf public SimpleScatterPlot PhysicalCoordinates transf
353. icLabel pTransforml1 subheadFont class2Average 0 9 0 55 ChartObj NORM GRAPH POS ChartObj DECIMALFORMAT 1 381 Text Classes chartVu AddChartObject class2AverageLabel 21 Dataset Viewers DatasetViewer Charts and data grids are probably the two most popular ways to display numeric data At the time of this writing WPF does not include a data grid control though you would expect Microsoft to add one at some point We have created our own grid class that integrates with our chart dataset classes The DatasetViewer can display simple numeric and time based datasets SimpleDataset TimeSimpleDataset ElapsedTimeSimpleDataset and group numeric and time based datasets GroupDataset TimeGroupsDataset ElapsedTimeGroupDataset When a DatasetViewer is added to a chart it can be printed as part of that chart Background colors row and column headers can be customized The DatasetViewer can be scrolled updated in real time and synchronized to the chart so that scrolling of the DatasetViewer can scroll the chart 90 e 52 53 54 95 9 89 s8 s Week 9 24 08 10 01 06 10 08 06 10 15 06 102206 10 28 06 11 05 08 11 12 08 11 18 06 11 28 06 CH L A DatasetViewer displaying three TimeSimpleDatasets 383 Text Classes Class DatasetViewer ChartView DatasetViewer The DatasetViewer is a ChartView derived object and as such is an independent UserControl object Use it to view one or more datasets in a chart Since it is usuall
354. ickspace As Double 5 Dim anglentickspermajor As Integer 6 Dim minorticlength As Double 5 Dim majorticlength As Double 10 Dim tickdir As Integer ChartObj AXIS CENTER antennaAxes SetAntennaAxesTicks axestickspace axesntickspermajor angletickspace anglentickspermajor minorticlength majorticlength kiekdir Add the Antenna axes to the chartVu object chartVu AddChartObject antennaAxes 8 Axis Labels AxisLabels NumericAxis Labels TimeA xisLabels ElapsedTimeAxisLabels EventAxisLabels StringAxisLabels PolarAxesLabels AntennaAxesLabels Axis Labels Axis labels are numeric or text strings placed next to axis tick marks indicating the scale of the axis Axis labels are a separate class from the axis classes An axis class i e any class derived from Axis can exist independent of axis labels Many graphs use axes that do not have labels For example the y axis on the left side of a graph may have labels while an identical axis on the right hand side of the graph may not The axis label classes require a valid reference axis class and cannot exist independently There are seven axis labels classes the AxisLabels abstract base class and concrete subclasses NumericAxisLabels TimeAxisLabels ElapsedTimeAxisLabels EventAxisLabels StringAxisLabels PolarAxesLabels and AntennaAxesLabels Label Formats An axis label can take many forms The various axis label formats are divided between the axis labels classes in the
355. ics that are summarized below 30 Day Trial Version The trial version of QCChart2D for WPF is downloaded as a zip file named Trial QCChart2DWPFR20x zip The 30 day trial version stops working 30 days after the initial download The trial version includes a version message in the upper left corner of the graph window that cannot be removed Developer Version The developer version of QCChart2D for WPF is downloaded as a zip file name something similar to WPFCHTDEV1R2x0x353x1 zip The developer version does not time out and you can use it to create application programs that you can distribute royalty free You can download free updates for a period of 2 years When you placed your order you were e mailed download link s that will download the software Those download links will remain active for at least 2 years and should be used to download current versions of the software After 2 years you may have to purchase an upgrade to continue to download current versions of the software Source Code The commented source code to the QCChart2D charting software also available The source code is written entirely in C It can be compiled using Visual Studio 2008 and higher Net CZ compilers It can be ordered using the model WPF CHT SRC Purchasers of the QCChart2D source code must also own a valid Developer License since all example programs user manuals and licenses are installed as part of the Developer Version of the software Some programmers
356. id RowDefinitions gt lt RowDefinition Height gt 9 Using QCChart2D for WPF to Create Windows Applications 412 lt RowDefinition Height 20 gt lt Grid RowDefinitions gt Menu Height 22 HorizontalAlignment Left Margin 0 0 0 0 Name menul VerticalAlignment Top Width 72 Background White Grid Row 0 gt lt Menultem Header File MinWidth 0 MinHeight 0 gt lt Menultem Header Printer Setup Click PrinterSetupMenultem gt lt Menultem Header Print Click PrintMenultem gt lt Menultem Header SaveAsFile Click SaveAsFileMenultem gt lt Menultem gt lt Menu gt lt my ChartView Margin 18 11 16 6 Name chartView 1 Grid Row 1 7 lt Grid gt lt Window gt Note how the Grid now has two rows with the second row Grid Row 1 defined as 20 times the height of the first row Grid Row 0 The menu is placed in the first row and the chart placed in the second row Display the Window1 asml cs behind code file It will look something like this using System using System Collections Generic using System Ling using System Text using System Windows using System Windows Controls using System Windows Data using System Windows Documents using System Windows Input using System Windows Media using System Windows Media Imaging using System Windows Navigation using System Windows Shapes namespace WpfApplicationl lt summary gt Interaction logic for Wi
357. ields that specify an exact moment in time i e November 7 2000 20 43 22 554 Since the ChartCalendar class represents both time of day and calendar dates is not necessary to use separate time of day and date classes to manage data collected every few seconds yet spans a day or more An example of this type of date time range is a graph of experimental data sampled every 15 seconds starting on June 12 2001 11 43 00 PM and continuing until June 15 2001 1 03 45 AM The major application for date time chart scaling on the Internet is the display of financial market data Multiply the number of on line investors using the charting tools of on line brokerage firms and financial web sites by the number of individual stocks bonds options and futures contracts that they are able to chart and it becomes apparent that the number of potential charts is almost infinite Many stocks have more than 50 years of hourly historical information associated with them A chart comparing the relative performance of General Electric IBM Dupont Ford and Kodak compared to the Dow Jones Industrial average since the dawn of the computer age in 1950 will quickly highlight the above average stock market gains that can be made by investing in the right stocks A user may start by looking at a fifty year window on a stock then through successive zoom operations narrow the window to two years one month one day one hour and perhaps even one minute S vs 7 Day Work We
358. if 10 FontStyles Normal FontWeights Bold Dim Datasetl As TimeGroupDataset New TimeGroupDataset Actual Sales xl yl Dim pTransforml As TimeCoordinates New TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES NEAR pTransforml SwapScaleOrientation pTransforml SetScaleStartY 0 pTransforml SetGraphBorderDiagonal 0 22 0 15 0 95 0 8 Define axes axes labels and grids Dim thePlotl As FloatingBarPlot New FloatingBarPlot pTransforml Dim attribl As ChartAttribute New ChartAttribute Colors Black 1 DashStyles Solid Colors Green attribl SetFillFlag True thePlotl InitFloatingBarPlot Datasetl 0 75 attribl ChartObj JUSTIFY CENTER thePlotl SetBarOrient ChartObj HORIZ DIR chartVu AddChartObject thePlotl Floating Stacked Bar Plots Class FloatingStackedBarPlot GraphObj ChartPlot GroupPlot Simple Plot Objects 286 t FloatingStackedBarPlot The FloatingStackedBarPlot class extends the GroupPlot class and displays floating stacked bar plots The bars are free floating because each bar does not reference a fixed base value as do the simple bar plots stacked bar plots and group bar plots The starting value for each stacked bar is Y 0 Each bar after that is defined by the succeeding value in the group value array Y 1 Y 2 Unlike the StackedBarPlot plot the displayed values are not a cumulative sum of the group values All bars in a given
359. ific code directory Visual CSharp C specific directory QCChart2DWPF3 contains the source code to the QCChart2DWPF3 dll library installed only if the source code has been purchased Examples wpf C examples directory Bargraphs Horizontal vertical stacked group histogram floating CalendarData Line plots bar plots and log plots that use time date data Also reading time date data from a file ChartAxes Linear logarithmic time date custom hours time date and polar axes Also axes labels ChartEventExamples A variety of examples using ChartEvent objects as the source data ContourPlots Line and filled contour plots CustomDataToolTips Creating custom data tooltips for an OHLC plot multiple stacked graphs and a pie chart DataCursorsAndMarkers Using data cursors and markers DynamicCharts Scrolling lines bars scatter plots data logging instrument simulation chart animation EditChartExample Dialog box for chart example ExternalDLLExample Reference a WPF UserControl chart compiled into a separate DLL FinancialExamples OHLC plots candlestick plots financial log plots option chart technical analysis chart FormControlExamples Adding check boxes scrollbars and tables to charts ImageCharts Using images as chart data elements chart backgrounds and annotations LinePlotSalesVolume Simple line plot example with printing and save image menu LogPlots Log
360. ights Fire FontStyles Normal attribl ChartObj JUSTIFY CENTER NumericLabel bardatavalue thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj CURRENCYFORMAT bardatavalue SetDecimalPos 0 bardatavalue SetColor Colors Black bardatavalue TextBgColor Colors White bardatavalue TextBgMode true thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue true chartVu AddChartObject thePlotl M WM oct ict e X E ChartAttribute attrib3 new ChartAttribute Colors Gray 1 DashStyles Dot ChartGrid ygrid new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR ygrid SetChartObjAttributes attrib3 chartVu AddChartObject ygrid ChartFont theTitleFont new ChartFont Microsoft Sans Serif 22 FontStyles Normal Bold ChartTitle mainTitle new ChartTitle pTransforml theTitleFont Sales Are On mainTitle SetTitleType ChartObj CHART HEADER mainTitle SetTitlePosition ChartObj CENTER GRAPH mainTitle SetColor Colors Black chartVu AddChartObject mainTitle ChartFont theFooterFont new ChartFont Microsoft Sans Serif 10 H ChartTitle footer new ChartTitle pTransforml theFooterFont Bar plots can have the values of the bars displayed above or inside each bar footer SetTitleType ChartObj CHART FOOTER footer SetTitlePosition ChartObj CENTER GRAPH footer SetTitleOffset
361. iguration File EN Application Manifest File c Assembly Information File 4 Bitmap File ct Class S Class Diagram e Code File d Component Class Cursor File A Custom Control 5 Custom Control WPF fu DataSet FcH Debugger Visualizer B3 Dynamic Data Field 13 Flow Document WPF el HTML Page i Icon File d Installer Class sic Interface s JScript File E LINQ to SQL Classes J Local Database Local Database Cache Ej MDI Parent Form ada Joes The resulting SimpleBars cs file will contain using System using System Collections Generic using System Ling using System Text namespace WpfBrowserApplicationl t class SimpleBars Modify the SimpleBars file to create the desired chart Most all of our examples are structured the same way The constructor is changed to pass in a ChartView object Then a chart initialization routine is called which adds chart objects to the ChartView This defines the chart See the SimpleBars cs file of the WPFChartBrowserApplicationl example using System using System Windows using System Collections Generic using System Ling using System Text using System Windows Media using System Windows Controls using com quinncurtis chart2dwpf namespace WpfBrowserApplicationl class SimpleBars public SimpleBars ChartView chartVu d Using QCChart2D for WPF to Create Web Applications 432 DefineSimpleBars chartVu
362. ile as below Window x Class WpfChartApplication Window1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Window1 Height 631 Width 878 xmlns my clr namespace com quinncurtis chart2dwpf assembly Chart2D WPF3 gt lt Grid gt lt my ChartView Margin 18 11 16 6 Name chartView 1 gt lt Grid gt lt Window gt In this example the ChartView is placed as the only visual element of the standard WPF layout panel Grid Since the ChartView object is given a Name it can be accessed in the behind code of the window using the variable name chartViewl In general all of the chart definition and initialization takes place in the the behind code using either C or VB The chart definition initialization can take place entirely in the behind code of the windows XAML file or it be done in a separate class created for that purpose Almost all of our examples use a separate class to initialize the ChartView object This keeps the code more modular and the Window file much easier to read In the behind code example below extracted from our WpfChartApplicationl example the ChartView object variable name chartViewl in the example is initialized using the class SimpleScatter The SimpleScatter class adds the coordinate systems axes plots and text to the chartView object turning it into requisite chart namespace WpfChartApplicationl public pa
363. ime and date formatting capability Use it to label axes created using the TimeAxis class Label formats A time axis label can take many forms Variations on these forms include Time formats hh mm ss hh mm mm ss etc Date formats mm dd yy dd mm yy mm yy etc O There are more ways to format time and date information than numeric data The QCChart2D for WPF software directly supports twelve time formats and eightteen date formats It is also possible to create custom date time formats The software makes use of the Axis Labels 226 System DateTime ToString method to format times and dates A table listing predefined date time formats appears below Date Time Format Constant TIMEDATEFORMAT MSDDD TIMEDATEFORMAT MSDD TIMEDATEFORMAT MSD TIMEDATEFORMAT MS TIMEDATEFORMAT 12HMSDD TIMEDATEFORMAT 12HMSD TIMEDATEFORMAT 12HMS TIMEDATEFORMAT 12HM TIMEDATEFORMAT 24HMDDD TIMEDATEFORMAT 24HMDD TIMEDATEFORMAT 24HMS TIMEDATEFORMAT 24HM TIMEDATEFORMAT STANDARD TIMEDATEFORMAT MDY TIMEDATEFORMAT DMY TIMEDATEFORMAT MY TIMEDATEFORMAT Q TIMEDATEFORMAT MMMM TIMEDATEFORMAT MMM TIMEDATEFORMAT M TIMEDATEFORMAT DDDD TIMEDATEFORMAT DDD Format String mm ss fff mmt ss ff mm ss f m ss h mm ss ff h mm ss f H mm ss ff H mm ss f H mm ss H mm MMMMM dd yyyy M dd yy d MM yy M yy None MMMM MMM MMM dddd ddd Example String Result 12 33 999 12 33
364. impleDataset ElapsedTimeSimpleDataset ContourDataset EventSimpleDataset GroupDataset TimeGroupDataset ElapsedTimeGroupDataset EventGroupDataset The dataset classes organize the numeric data associated with a plot object Plot objects are chart objects derived from the ChartPlot class There are two major types of data supported by the dataset classes The first is simple xy data where for every x value there is one y value The second data type is group data where every x value can have one or more y values A couple of variants of the simple xy datasets include a simple dataset type that can substitute ChartCalendar values or TimeSpan as the x or y values Also there is a dataset type that is used to plot contour data Except in the case of the ChartEvent datasets EventSimpleDataset and EventGroupDatast copies of the original data arrays are stored The original source data can be deleted once the dataset is created If you want to make any changes to the data you must change the data in the dataset not the original source data The ChartEvent datasets are different Because they contain an array of ChartEvent objects and these objects can be quite large a copy of the ChartEvent objects is NOT made Instead the dataset classes reference the ChartEvent objects passed into the constructor Datasets can be initialized using CSV comma separated value files The CSV file is a common file structure that can share data between spreadshe
365. impleDataset it is initialized with TimeSpan objects or milliseconds in place of the x or y values EventSimpleDataset A subclass of SimpleDataset it is initialized with ChartEvent objects where the data is to be plotted using one of the simple plot types ContourDataset A subclass of SimpleDataset it adds a third dimension z values to the x and y values of the simple dataset Class Architecture 32 GroupDataset Represents group data where every x value can have one or more y values TimeGroupDataset A subclass of GroupDataset it uses ChartCalendar dates a wrapper around the System DateTime value class as the x values and floating point numbers as the y values ElapsedTimeGroupDataset A subclass of GroupDataset it uses TimeSpan objects or milliseconds as the x values and floating point numbers as the y values EventGroupDataset A subclass of GroupDataset it uses ChartEvent objects where the data is to be plotted using one of the group plot types Scale Classes ChartScale LinearScale LogScale TimeScale ElapsedTimeScale EventScale The ChartScale abstract base class defines coordinate transformation functions for a single dimension It is useful to be able to mix and match different scale transform functions for x and y dimensions of the PhysicalCoordinates class The job of a ChartScale derived object is to convert a dimension from the current physical coordinate system into the current working coordinate
366. implementation of the AutoScaleclass It calculates scaling values based on the numeric values in EventSimpleDatasetand EventGroupDatasetobjects The evnet classes use it for auto scale calculations Class Architecture 36 Chart Object Classes Chart objects are graph objects that can be rendered in the current graph window This is in comparison to other classes that are purely calculation classes such as the coordinate conversion classes All chart objects have certain information in common This includes instances of ChartAttribute and PhysicalCoordinates classes The ChartAttribute class contains basic color line style and gradient information for the object while the PhysicalCoordinates maintains the coordinate system used by object The majority of classes in the library derive from the GraphObj class each class a specific charting object such as an axis an axis label a simple plot or a group plot Add GraphObj derived objects axes plots labels title etc to a graph using the ChartView AddChartObject method GraphObj This class is the abstract base class for all drawable graph objects It contains information common to all chart objects This class includes references to instances of the ChartAttribute and PhysicalCoordinates classes The ChartAttribute class contains basic color line style and gradient information for the object while the PhysicalCoordinates maintains the coordinate system used by object The majority of class
367. in that range So if your events are spaced approximately 5 seconds apart you will get a minor tick mark for approximately every three events If you choose a MajorTickCrossoverEvent of ChartObj MINUTE and an AxisMajorNthTick of 1 this will cause a major tick mark to be displayed every minute if an event falls within that range Tick marks only show up on an event so if there are no events within the time interval no tick mark will appear Scaling and Coordinate Systems 152 Every tick mark can have a custom label So if you do not want to use the default time date labels but instead want label the event tick marks with a custom string you can do that The string will track the exact tick mark associated with a given event This makes scrolling through the data easier because the custom tick mark strings stick to the tick mark and don t have to be recalculated Candlestick Chart OHLC Custom Axis Labels Elapsed Time Vertical Event Axis Numeric Multiline Sales Are On Fire Millions XYO XY1 XY2 XY3 XY4 XY5 XY6 XY7 XY8 Bar plots can have the values of the bars displayed above or inside each bar After scrolling the data to the left 153 Scaling and Coordinate Systems E Form Candlestick Chart OHLC Custom Axis Labels Elapsed Time Vertical Event Axis Numeric Multiline Sales Are On Fire 121 121 113 114 15 Millions XY35 XY36 XY37 XY38 XY39 XY40 XY41 XY42 X
368. inates PhysicalCoordinates CartesianCoordinates ElapsedTimeCoordinates The ElapsedTimeCoordinates class scales the chart plot area for a physical coordinate system which uses an elapsed time scale in combination with a linear or logarithmic scaling The elapsed time scale uses milliseconds as the time base so all time values should be represented using their milliseconds equivalent value i e a value of 30 seconds is represented by the value 30000 The axis labeling class ElapsedTimeAxisLabels converts the millisecond values to equivalent seconds values i e the value 30000 milliseconds will be displayed as 30 seconds in the format 00 00 30 There are three main ways to scale the plot area Scale the minimum and maximum x and y values explicitly You can scale the the elapse time axis using TimeSpan objects or using millisecond values i e an elapsed time range of 0 30 seconds would be scaled for 0 30000 S Use an auto scale method to calculates appropriate minimum and maximum x and y values based on the x and y values in one or more datasets Use a combination of the first two methods It is useful to be able to run an auto scale function and then change the minimum or maximum value of one or more coordinate endpoints ElapsedTime Coordinate Scaling The default coordinate system for the ElapsedTimeCoordinates class is elapsed time for the x dimension and linear for the y dimension If you
369. indows Applications chartVu AddChartObject thePlot3 End Sub End Class End Namespace T 5 Reference and initialize the newly created SimpleScatterPlot class in the Window1 xaml vb behind code file The WPFChartApplicationlexample program also includes printer and image routines in to support the printer and image menus items defined in the Window1 xaml file You may or may not want to include those in your program Imports com quinncurtis chart2dwpf Imports System Printing Imports Microsoft Win32 Imports System IO Namespace WpfChartApplicationl ree lt summary gt TTT Interaction logic for Windowl xaml TTT lt summary gt Partial Public Class Windowl Inherits Window Private sp As SimpleScatter Nothing Private cp As ChartPrint Nothing Public Sub New InitializeComponent InitializeCharts End Sub Private Sub InitializeCharts sp New SimpleScatter chartViewl chartViewl PreferredSize New Size 600 400 End Sub End Class The reference to chartView1 PreferredSize tells the software that the font sizes specified in the graph are with respect to a chart window of size 600 400 If the chart is sized larger than this the fonts will be larger if it is sized smaller the fonts will be smaller Build the Solution Build Build Solution If the project fails to compile you need to go back and check the errors and the previous steps When it runs properly it the SimpleScatterPlot chart looks like
370. inePlot object dataset The antenna line plot represents the antenna coordinate values in this dataset The x values of the dataset represent the radial values and the y values represent the antenna angular values in degrees attrib Specifies the attributes line color and line style for the line plot The antenna line plot class interpolates between adjacent data points in antenna coordinates and not using straight lines as in the Cartesian coordinate plotting functions This gives the lines between adjacent data points in a antenna plot a curved look Antenna line plot and scatter plot chart extracted from the example program PolarCharts AntennaLineMarkerChart Datasetl new SimpleDataset First magl angl Dataset2 new SimpleDataset Second mag2 angl SimpleDataset datasetarray Datasetl Dataset2 pAntennaTransform new AntennaCoordinates pAntennaTransform AutoScale datasetarray ChartObj AUTOAXES FAR pAntennaTransform SetGraphBorderDiagonal 0 25 15 75 0 85 Background background new Background pAntennaTransform ChartObj GRAPH BACKGROUND Colors White chartVu AddChartObject background AntennaAxes pAntennaAxis pAntennaTransform GetCompatibleAxes pAntennaAxis LineColor Colors Black chartVu AddChartObject pAntennaAxis AntennaGrid pAntennaGrid new AntennaGrid pAntennaAxis AntennaGrid GRID ALL pAntennaGrid ChartObjAttributes new ChartAttribute Colors LightBlue 1 DashSty
371. inear or logarithmic scale for the y coordinate Use the EventCoordinates if you have discontinuous or irregular time suchs as that found in worldwide financial markets Use the ElapsedTimeCoordinates class when you want a elapsed time scale no date information for the x coordinate and a linear or logarithmic scale for the y coordinate Use the PolarCoordinates for polar coordinates where the magnitude coordinate is linear and the polar angle coordinate extends from 0 to 360 degrees or 0 to 2 pi radians counter clockwise starting at 3 00 Use the AntennaCoordinates for antenna coordinates where the radius value is linear and the angle coordinate extends from 0 to 360 degrees clockwise starting at 12 00 115 Scaling and Coordinate Systems Normalized coordinates Normalized coordinates are a special case of linear physical coordinates where the linear physical scale 0 0 1 0 0 0 1 0 is applied to either the graph area or the plot area of the chart Graph normalized coordinates maps the upper left corner of the graph window to the xy coordinates 0 0 0 0 and the lower right corner of the graph area to the xy coordinate 1 0 1 0 Plot normalized coordinates maps the upper left corner of the plot area to the xy coordinates 0 0 0 0 and the lower right corner of the plot area to the xy coordinates 1 0 1 0 A copy of a concrete instance of the PhysicalCoordinates class is stored in every GraphObj derived object This includes all axes
372. ing Simple magnify example Adapted from the ZoomExamples Window1 xaml cs vb example C private MagniViewChart magniViewChartl private MagniViewChart magniViewChart2 DLL HLL In this example we make the common to both charts for both because we must use the same data instances of this chart You will probably be initializing the data externally Regardless of how you do it when using the MagniView class you will need two instances of the same class with the same data private double xl null private double yl null private double y2 null private SimpleDataset Datasetl private SimpleDataset Dataset2 public void InitializeMagniViewCharts magniViewChartl new MagniViewChart magniView1 magniViewChart2 new MagniViewChart magniView2 InitializeData Define charts using data magniViewChartl InitializeChart Datasetl Dataset2 Click and drag on the top graph using left mouse button false magniViewChart2 InitializeChart Datasetl Dataset2 The area bounded by the mouse magnify icon is displayed full scale in the bottom graph true Hook up the MagniView class to the source and target classes MagniView magnifyObj new MagniView magniViewl magniView2 magniViewChartl pTransforml new Dimension 0 05 0 2 ChartAttribute attribl new ChartAttribute Colors Black 1 DashStyles Solid magnifyObj ChartObjAttributes a
373. ing is inactive It is possible to treat the unused portion of the day in a manner analogous to weekends It is possible to eliminate unused hours Scaling and Coordinate Systems 126 and minutes of a day from the chart coordinate system The QCChart2D for WPF coordinate system allows the programmer to specify a starting and ending time for a days worth of data In the NYSE stock market example the starting time is 9 30 AM EST and the ending time is 4 00 PM EST Any data outside of this range is invalid and not plotted In terms of the resulting chart one minute after 4 30 PM is 9 31 AM Combine the starting and ending time parameters with the option of deleting weekends from consideration and one minute after 4 30 PM Friday is 9 31 AM Monday Non Uniformity of Date Time Tick Marks There even more complications associated with date time scales The axis that delineates a date time scale must take into account the non uniform nature of date time tick marks and tick mark labels A month has a variable number of days When months are used as the major tick mark interval and days are the minor tick mark interval the software must be capable of plotting 28 29 30 or 31 minor tick marks days for every major tick mark months depending on the month Another example is the use of months as the major tick mark interval and weeks as the minor tick mark interval Some months will have four minor tick marks start of each new week while others will hav
374. initialized in the UserControl s behind code file The UserControl derived class is then referenced in the main Window xaml file The UserControlChartExamplel demonstrates this method Or You can add a UserControl to your program but change the inheritance from UserControl to ChartView Since ChartView is a subclass of UserControl this is valid In this case you want to remove the Grid section from the xaml file of the ChartView derived class The Grid panel is opaque and the chart will not show through The ChartView derived class is then referenced in the main Window xaml file See the UserControlChartExample2 program for an example of this technique Or You can just reference the ChartView class in the main Windows xaml file Define the chart in the behind code file Windows xaml cs or Windows xaml vb See the UserControlChartExample3 program for an example of this technique Using QCChart2D for WPF to Create Windows Applications 418 Visual Basic for Net If you do not already have an application program project create one using the Visual Studio project wizard File New Project Visual Basic Projects WPF Application On the left select a project type of Visual Basic Windows Give the project a unique name In our examples wpf folder this example is the WPFChartApplication1 so give your example a different name such as WPFApplicationl You will end with a basic WPF based application For purposes of this example the chart wi
375. int Change the datapoint Simple Date Time Dataset Class TimeSimpleDataset ChartObj ChartDataset SimpleDataset TimeSimpleDataset The TimeSimpleDataset uses ChartCalendar dates as one set of the x or y values and floating point values as the other Starting with Revision 2 0 of the software you can have ChartCalendar dates as either the x or y values in a TimeSimpleDatset ChartCalendar values are actually stored internally as their equivalent millisecond values The TimeSimpleDataset class adds a large number of methods to the SimpleDataset class that make it easy to create and modify datasets that use ChartCalendar values Note Do not use the TimeSimpleDataset if you want to display data using the elapsed time The TimeSimpleDataset uses a full GregorianCalendar date time and it is not suitable for the display of elapsed time since time intervals do not have an explicit date i e 10 11 2008 Use the ElapsedTimeSimpleDataset class in combination with an ElapsedTimeCoordinateSystem if you plan to create an elapsed time chart It has two main constructors The following constructor creates a time dataset using the x and y values stored in arrays 79 Chart Datasets TimeSimpleDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As ChartCalendar _ ByVal y As Double Overloads Public Sub New _ ByVal sname As String _ ByVal x As Double ByVal y
376. intObjl bfound2 thePlot2 CalcNearestPoint location ChartObj FNP NORMDIST nearestPointObj2 if bfoundl amp amp bfound2 choose the nearest point if nearestPointObjl GetNearestPointMinDistance lt nearestPointObj2 GetNearestPointMinDistance nearestPoint nearestPointObjl GetNearestPoint else nearestPoint nearestPointObj2 GetNearestPoint create marker object at place it at the nearest point Marker amarker new Marker GetChartObjScale MARKER BOX nearestPoint GetX nearestPoint GetY 10 0 PHYS POS chartview AddChartObject amarker rNumericLabelCntr 1 0 Add a numeric label the identifies the marker pointLabel new NumericLabel GetChartObjScale textCoordsFont rNumericLabelCntr nearestPoint GetX nearestPoint GetY PHYS POS DECIMALFORMAT 0 Nudge text to the right and up so that it does not write over marker pointLabel SetTextNudge 5 5 chartview AddChartObject pointLabel chartview UpdateDraw Visual Basic Public Class CustomChartDataCursor Inherits DataCursor Private pointLabel As NumericLabel Private textCoordsFont As New ChartFont Microsoft Sans Serif 8 FontStyles Normal Private rNumericLabelCntr As Double 0 0 Private thePlotl As SimpleLinePlot Private thePlot2 As SimpleLinePlot Public Sub New achartview As ChartView thetransform As CartesianCoordinates plotl As SimpleLinePlot plot2 As SimpleLinePlot nmarkertype As Intege
377. ints 1 Dim yl As Double New Double numPoints 1 Using QCChart2D for WPF to Create Windows Applications 424 Dim y2 As Double New Double numPoints 1 Dim y3 As Double New Double numPoints 1 Dim i As Integer For i 0 To numPoints 1 xl i CDbl i 1 yl i 20 0 50 0 1 Math Exp x1 i y2 1 yl i 20 0 2 xl 1 0 6 yoti Iti 20 0 4 xl 1 0 4 Next y2 94 10 y3 0 95 theFont New ChartFont Microsoft Sans Serif 20 0 ChartSupport GetRandomDouble ChartSupport GetRandomDouble 10 FontStyles Normal Dim Datasetl As New SimpleDataset First xl yl Dim Dataset2 As New SimpleDataset Second xl y2 Dim Dataset3 As New SimpleDataset Third x1 y3 Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Dataset3 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 chartVu AddChartObject background chartVu AddChartObject xAxis chartVu AddChartObject yAxis xAxisLab SetTextFont theFont chartVu AddChartObject xAxisLab yAxisLab SetTextFont theFont chartVu AddChartObject yAxisLab chartVu AddChartObject yaxistitle chartVu AddChartObject xaxistitle chartVu AddChartObject xgrid chartVu AddChartObject ygrid Dim attribl As New ChartAttribute Co attribl SetFillColor Colors Blue attri
378. io Visual C and Visual Basic Chapter 25 is a tutorial that describes how to use QCChart2D to create WPF web applications using Visual Studio Net Visual C and Visual Basic Chapter 26 is a collection of Frequently Asked Questions about QCChart2D for WPF 2 Class Architecture of the QCChart2D for WPF Class Library Major Design Considerations This chapter presents an overview of the QCChart2D for WPF class architecture Some of the major design considerations are 5 It is based on the Net WPF DirectX Retained Graphics API model New charting objects can be added to the library without modifying the source of the base classes There are no limits regarding the number of data points in a plot the number of plots in graph the number of axes in a graph the number of coordinate systems in a graph There are no limits regarding the number of legends arbitrary text annotations bitmap images geometric shapes titles data markers cursors and grids in a graph 5 Users can interact with charts using classes using WPF routed event handling The chapter also summarizes the classes in the QCChart2D for WPF library There are five primary features of the overall architecture of the QCChart2D for WPF classes These features address major shortcomings in existing charting software for use with both Net and other computer languages First QCChart2D for WPF uses the standard Net WPF window architecture Charts a
379. ioning the Plot Area in Graph Area The WorkingCoordinates class has a group of methods SetGraphBorderFrame SetGraphBorderDiagonal and SetGraphBorderlInsets that position the plot area of the chart in the graph viewport Since the coordinate system scaling classes are subclasses of WorkingCoordinates these methods are part of those classes These methods are redundant and only one need be called The default position of the plot area in the graph view port is at x 0 2 y 0 2 width 0 6 height 0 6 specified using graph normalized coordinates This method initializes the position and size of the plot area inside the graph area specified using a rectangle to specify graph normalized coordinates SetGraphBorder methods Visual Basic Overloads Public Sub SetGraphBorderFrame _ ByVal border As Rectangle2D _ C public void SetGraphBorderFrame Rectangle2D border border Specifies the rectangle defining the plot area border This method initializes the position and size of the plot area inside the graph area specified using graph normalized position and size values Visual Basic Overloads Public Sub SetGraphBorderFrame _ ByVal rLeft As Double _ ByVal rTop As Double _ ByVal width As Double _ ByVal height As Double C4 public void SetGraphBorderFrame 117 Scaling and Coordinate Systems double rLeft double rTop double width double height where rLeft The left
380. is and extends across the plot area using the minimum and maximum values of the other axis For example an x axis grid has lines aligned with the tick marks of the x axis and extending from the minimum y value to the maximum y value of the y axis parallel to the y axis ChartGrid constuctor Visual Basic Overloads Public Sub New ByVal xaxis As Axis _ ByVal yaxis As Axis _ ByVal gridaxistype As Integer _ ByVal gridtype As Integer _ Ct public ChartGrid Axis xaxis Axis yaxis int gridaxistype 245 Axis Grids int gridtype xaxis yaxis gridaxistype gridtype The x axis associated with the grid The y axis associated with the grid The grid is aligned with the tick marks of this axis The grid is parallel to the other axis Use one of the axis constants X AXIS or Y AXIS Specifies if the grid aligns with the major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID ALL of the reference axis Other grid properties are associated with the line properties used to draw the grid The default values of the grid use a black dotted line of thickness 1 0 Change the default values using the GraphObj methods below SetColor method Visual Basic Overridable Public Sub SetColor ByVal rgbcolor As Color _ Cf public virtual void SetColor Color rgbcolor LE SetLineWidth method Visual Basic Overridable Public Sub SetLineWidth ByVa
381. is a concrete implementation of the AntennaPlot class and displays data in a simple scatter plot format AntennaScatterPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As AntennaCoordinates ByVal dataset As SimpleDataset _ ByVal symtype As Integer _ ByVal attrib As ChartAttribute C public AntennaScatterPlot AntennaCoordinates transform SimpleDataset dataset int symtype ChartAttribute attrib transform The coordinate system for the new AntennaScatterPlot object dataset The antenna scatter plot represents the antenna coordinate values in this dataset The x values of the dataset represent the radial values of the points and the y values the angular values in degrees symtype The symbol used in the scatter plot Use one of the scatter plot symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR CIRCLE attrib Specifies the attributes size line and fill color for the scatter plot See previous example for a programming example using AttennaScatterPlot Class AntennaLineMarkerPlot GraphObj ChartPlot AntennaPlot Polar and Antenna Charts 356 AntennaLineMarkerPlot The AntennaLineMarkerPlot class is a concrete implementation of the AntennaPlot class and displays data in a simple line marker plot format AntennaScatterPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As AntennaCoordin
382. is the value of x Length property The number of columns in the y array must match the length of the x array and every element must be initialized to a valid value All values in the arrays are plotted If the data is outside of the current chart scale the values will be clipped The next constructor creates a dataset using the x and y values stored in a file that uses the CSV Comma Separated Value format There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the x values and subsequent columns represent the y values where each column is a group If you use the ROW MAJOR format the first row represents the x values and subsequent rows represent the y values where each row is a group Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ C4 public ElapsedTimeGroupDataset CSV csv string filename int rowskip int columnskip Chart Datasets 106 CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before reading the first value from the row The only supported format for elapsed time values in a CSV file is d hh mm ss fff
383. isual Studio Designer You must therefore explicity size the ChartView component to produce a memory bitmap of the size you want the chart rendered at ChartView chartVu new ChartView chartVu Size new Size 850 600 using using using using using using using using using using using using using using using using using 405 File and Printer Rendering Second since the ChartView component is not to be viewed you do NOT want it added to some underlying XAML filet You create a ChartView object and draw the chart to it You then render the chart as an image file using our BufferedImage class The example program below extracted from the ImageChart example program Candlestick Plots in Technical Analysis 3 02 09 4 01 09 5 01 09 The Open Close box is filled if the open price is greater than the close price C System System Collections Generic System Ling System Text System Windows System Windows Controls System Windows Data System Windows Documents System Windows Input System Windows Media System Windows Media Imaging System Windows Navigation System Windows Shapes com quinncurtis chart2dwpf System Printing Microseft Wwing2 System IO namespace ImageCharts lt summary gt Interaction logic for Windowl xaml lt summary gt public partial class Windowl Window File and Printer Rendering 406 ChartView chartView4 public Windowl
384. j CURRENCYFORMAT bardatavalue SetDecimalPos 0 Simple Plot Objects 266 bardatavalue SetColor Colors White thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue true chartVu AddChartObject thePlot1 Visual Basic Dim attribl As New ChartAttribute Colors Green 0 DashStyles Solid Colors Green Dim barcolors As Color Colors Red Colors Orange Colors Yellow Colors White Dim barbreakpoints As Double 0 0R 80 160 240 Dim gradmode As Integer ChartGradient GRADIENT MAPTO PLOT PHYSICAL COORDINATES Dim cg As New ChartGradient pTransforml gradmode barcolors barbreakpoints 90 attribl Gradient cg attribl SetFillFlag True thePlotl New SimpleVersaPlot pTransforml Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj MONTH 8 0 0R attribl ChartObj JUSTIFY CENTER Dim bardatavalue As NumericLabel thePlotl GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj CURRENCYFORMAT bardatavalue SetDecimalPos 0 bardatavalue SetColor Colors White thePlotl SetPlotLabelTemplate bardatavalue thePlotl SetShowDatapointValue True chartVu AddChartObject thePlotl 11 Group Plot Objects GroupPlot ArrowPlot BubblePlot CandlestickPlot CellPlot ErrorBarPlot FloatingBarPlot GroupBarPlotChartPlot HistogramPlot LineGapPlot MultiLinePlot OHLCPlot StackedBarPlot StackedLinePlot The GroupPlot class is an abstr
385. j Y AXIS ChartObj GRID MAJOR gridl SetZOrder 40 This is actually the default value for the grid z order chartVu AddChartObject gridli ChartGrid grid2 new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MINOR grid2 SetZOder 150 ChartGrid is drawn after ChartPlot objects which have default z value of 50 chartVu AddChartObject grid2 Visual Basic Dim chartVu As ChartView new ChartView Dim gridl As ChartGrid new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR gridl SetZOrder 40 This is actually the default value for the grid z order chartVu AddChartObject gridl Dim grid2 As ChartGrid new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MINOR grid2 SetZOder 150 ChartGrid is drawn after ChartPlot objects which have default z value of 50 chartVu AddChartObject grid2 FAQs 460 18 How to I use a ScrollBar object to control horizontal scrolling of the data in my chart The ChartView class has two built in scroll bars you can use in your program to control chart scrolling The example program FormControlExamples LinePlotScrollBar uses two scroll bars a horizontal scroll bar to control scrolling of the x axis and a vertical scroll bar that controls the magnitude of the y axis You need to enable the HScrollBarl and VScrollBarl scrollbars in the ChartView Hook up the the hScrollBarl Scroll and vScrollBarl Scroll event listeners to the Scroll event of each scroll bar
386. ject legend 20 Text Classes ChartText ChartTitle AxisTitle ChartLabel StringLabel TimeLabel NumericLabel ElapsedTimeLabel The software uses the ChartText classes to position and format text in a chart Examples of classes derived from the ChartText include the ChartLabel AxisLabels ChartTitle and AxisTitle classes The Legend PieChart and ChartPlot classes while not derived from the text classes use them internally Simple Text Classes Class ChartText GraphObj ChartText The ChartText class is the base class for all text output classes The ChartText class formats and places text in a chart Position the ChartText objects using any of the coordinate systems Rotate and justify the text vertically and horizontally Insert a CR carriage return ASCII 13 character at line breaks for multiline text The most common constructors are ChartText constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont _ ByVal tstring As String _ ByVal x As Double _ ByVal y As Double _ ByVal npostype As Integer _ ByVal xjust As Integer ByVal yjust As Integer _ ByVal rotation As Integer Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont _ ByVal tstring As String ByVal x As Double _ ByVal y As Double Text Classes 370 ByVal npostype As Integer Cf public
387. l ChartCalendar dstart long starttod double x2 ChartCalendar dstop long stoptod int nweektype Scaling and Coordinate Systems 136 SetTimeCoordinateBounds example for a 5 day week and 9 30 AM to 4 00 PM time of day range SetWeekType method C long starttod 9 60 30 60 1000 msecs cooresponding to 9 30 AM long stoptod 16 60 60 1000 msecs cooresponding to 4 00 PM ChartCalendar dstart new ChartCalendar 1996 ChartObj FEBRUARY 5 ChartCalendar dstop new ChartCalendar 1997 ChartObj JANUARY 5 double yl 0 0 double y2 55 0 TimeCoordinates stockTimeScale StockTimeScale new TimeCoordinates StockTimeScale SetTimeCoordinateBounds dstart starttod yl dstop stoptod p v2 ChartObj WEEK 5D Visual Basic Dim starttod As Long 9 60 30 60 1000 msecs cooresponding to 9 30 AM Dim stoptod As Long 16 60 60 1000 msecs cooresponding to 4 00 PM Dim dstart As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 Dim dstop As ChartCalendar New ChartCalendar 1997 ChartObj JANUARY 5 Dim yl As Double 0 0 Dim y2 As Double 55 0 Dim stockTimeScale As TimeCoordinates New TimeCoordinates stockTimeScale SetTimeCoordinateBounds dstart starttod yl _ dstop stoptod y2 ChartObj WEEK 5D If you use the auto scale routines set the week type and the time of day range before you call the TimeCoordinates AutoScale method because the auto scale routines
388. l Datasetl attribl chartVu AddChartObject thePlotl Dim thePlot2 As SimpleLinePlot New SimpleLinePlot pTransforml Dataset2 attrib2 chartVu AddChartObject thePlot2 Dim thePlot3 As SimpleLinePlot New SimpleLinePlot pTransforml Dataset3 profitAttrib chartVu AddChartObject thePlot3 Dim legendFont As New ChartFont SansSerif 14 FontStyles Normal FontWeights Bold Dim legendAttributes As New ChartAttribute Colors Gray 1 DashStyles Solid Color FromRgb 155 155 155 legendAttributes SetFillFlag True legendAttributes SetLineFlag True Undersized legend rectangle tests auto legend rectangle Dim legend As New StandardLegend 0 2 0 15 0 25 0 3 legendAttributes StandardLegend VERT DIR legend AddLegendItem Expenses ChartObj LINE thePlotl legendFont legend AddLegendItem Revenue ChartObj LINE thePlot2 legendFont legend AddLegendItem Profit ChartObj HBAR thePlot3 legendFont legend AddLegendItem Loss ChartObj HBAR lossAttrib legendFont chartVu AddChartObject legend Bubble Plot Legends Class BubblePlotLegend GraphObj 365 Legends BubblePlotLegend The BubblePlotLegend is the primary legend class for bubble plots The class manages a list of BubblePlotLegendItem that holds the symbols and descriptive text for the symbols BubblePlotLegend constructors Visual Basic Overloads Public Sub New ByVal plot As BubblePlot _ ByVal rx As Double _ ByVa
389. l Basic Overloads Public Sub New _ ByVal baseaxis As Axis _ Ct public NumericAxisLabels Axis baseaxis E baseaxis This is the axis the axis labels are for Other axis label properties font rotation numeric format axis labels direction and numeric precision are automatically set These properties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Overloads Public Sub SetAxisLabels ByVal font As ChartFont _ ByVal rotation As Double _ ByVal labdir As Integer _ ByVal decimalpos As Integer _ ByVal labelends As Integer _ ByVal labcolor As Color Ct public void SetAxisLabels ChartFont font double rotation int labdir int decimalpos int labelends Color Jlabcolor SetAxisLabelsFormat method Visual Basic Public Sub SetAxisLabelsFormat _ ByVal format As Integer _ Ct public void SetAxisLabelsFormat int format font The font object used to display the axis label text rotation The rotation in degrees of label text in the normal viewing plane 221 Axis Labels labdir The justification of the axis label AXIS MIN or AXIS MAX with respect to the tick mark endpoint decimal Sets the number of digits to the right of the decimal point for numeric axis labels labelends Specifies whether there should be labels for the axis minimum LABEL MIN maximum LABEL MAX or tick mark starting point
390. l columnskip As Integer _ Chart Datasets 80 C public TimeSimpleDataset CSV csv string filename int rowskip int columnskip CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before starting this read operation A DateTimeFormatInfo object and a date time format string in the CSV class control the interpretation of the ChartCalendar values The format in the file must match the format specified for the CSV class The underlying conversion mechanism calls the DateTime ToString String formatstring DateTimeFormatInfo info method for the conversion The default format for the date time formatstring object is M dd yy Call the SetDateTimeFomatString method to change the default date time format See the documentation for the Net DateTime ToString method to figure out the various formatting options for the date time format string If you are into internationalization and difficult to understand Net documentation you can also create your own DateTimeFormatInfo object installing it in the CSV object using CSV SetTimeDateFormat method The date time format string and the DateTimeFormatlInfo object apply to both CSV files used for input and CSV files used for output If an attempt is made to read date time values that do not match the desired format the data values are set to invalid date time values
391. l four sides of the graph window If mousepos GetY boundingbox GetHeight 1 Then mousepos SetLocation mousepos GetX mousepos GetY _ boundingbox GetHeight stockpanel SetLocation mousepos ChartObj DEV POS End If Draws the tooltip text panel to the chart graphics context Stockpanel Draw GetToolTipGraphics End If End Sub OnMouseDown End Class CustomToolTip oa DI DD Dm AAD HA D DW 17 Pie and Ring Charts PieChart RingChart Everyone is familiar with the ubiquitous pie chart Pie charts are 1 dimensional not because they are shallow but because they represent a simple 1 dimensional series of numbers 3 5 2 7 3 rather than the parametric set of data points 3 2 6 3 7 3 used in the other plot types described in this software The best use of pie charts involves data that has 10 or fewer elements Otherwise the text used to label the pie charts starts to overlap in adjacent small pie wedges The x values of a dataset represent the datavalues for each pie wedge The y values of the dataset explode a pie wedge from its normal centered position A ring chart is a variant of the pie chart Instead an entire circle or pie being the basis of the chart a ring is used instead Using the Pie Chart Class Class PieChart GraphObj ChartPlot SimplePlot PieChart RingChart The PieChart and RingChart classes extends the ChartPlot cla
392. l linewidth As Double Cf public virtual void SetLineWidth double linewidth SetLineStyle method Visual Basic Overridable Public Sub SetLineStyle _ ByVal linestyle As DashStyle Cf public virtual void SetLineStyle DashStyle linestyle rgbcolor Sets the primary line color for the chart object Axis Grids 246 linewidth Sets the line width in device coordinates for the chart object linestyle Sets the line style for the chart object Use one of the Net DashStyles enumerated constants Dash DashDot DashDotDot Dot or Solid ChartGrid example C Define the coordinate system double xMin 5 double xMax 15 double yMin 0 double yMax 105 CartesianCoordinates simpleScale new CartesianCoordinates xMin yMin xMax yMax Create the x and y axes LinearAxis xAxis new LinearAxis simpleScale ChartObj X AXIS LinearAxis yAxis new LinearAxis simpleScale ChartObj Y AXIS Create the grids ChartGrid gridX new ChartGrid xAxis yAxis ChartObj X AXIS ChartObj GRID MAJOR Change default grid line properties gridX SetLineWidth 2 0 gridX SetLineStyle DashStyles Dot gridX SetColor Colors Gray ChartGrid gridY new ChartGrid xAxis yAxis ChartObj Y AXIS ChartObj GRID MAJOR Change default grid line properties gridY SetLineWidth 1 0 gridY SetLineStyle DashStyles Solid gridY SetColor Colors Black Create the Chart
393. l ry As Double _ ByVal rwidth As Double _ ByVal rheight As Double ByVal attrib As ChartAttribute Overloads Public Sub New _ ByVal plot As BubblePlot _ ByVal rx As Double _ ByVal ry As Double _ ByVal attrib As ChartAttribute C public BubblePlotLegend BubblePlot plot double rx double ry double rwidth double rheight ChartAttribute attrib E public BubblePlotLegend BubblePlot plot double rx double ry ChartAttribute attrib plot The bubble plot object the legend is associated with rx The x position in chart normalized coordinates of the legend rectangle ry The y position in chart normalized coordinates of the legend rectangle rwidth The width in chart normalized coordinates of the legend rectangle rheight The height in chart normalized coordinates of the legend rectangle attrib Specifies the outline color outline line style and fill color for the legend rectangle Add legend items to a legend using one of the AddLegendItem methods AddLegendItem methods Visual Basic Overloads Public Function AddLegendItem _ ByVal stext As String _ ByVal rsize As Double ByVal attrib As ChartAttribute _ ByVal thefont As ChartFont _ As Integer Overloads Public Sub New ByVal plot As BubblePlot _ ByVal rx As Double ByVal ry As Double _ ByVal rwidth As Double _ ByVal rheight As Double _ ByVal attrib As ChartAttribute
394. l tickorigin As Double _ ByVal tickspace As Double _ ByVal nminortickspermajor As Integer ByVal minorticklength As Double _ ByVal majorticklength As Double _ ByVal tickdir As Integer Ct public void SetAxisTicks double tickorigin double tickspace int ntickspermajor public void SetAxisTicks double tickorigin double tickspace int nminortickspermajor double minorticklength double majorticklength int tickair intercept tickorigin tickspace ntickspermajor minorticklength majorticklength tickdir Sets the intercept of this axis with the perpendicular axis in physical coordinates The tick marks start at this value Specifies the spacing between minor tick marks Specifies the number of minor tick marks per major tick mark The length of minor tick marks in WPF device coordinates The length of major tick marks in WPF device coordinates The direction of the tick marks Use one of the tick mark direction constants AXIS MIN AXIS CENTER or AXIS MAX Use the SetLineWidth SetLineStyle and SetColor methods to customize the drawing properties of the lines used to draw the axis line and tick marks Simple linear axis example C Define the coordinate system double xMin m double xMax Loy double yMin OF Axes 186 double yMax 105 CartesianCoordinates simpleScale new CartesianCoordinates xMin yMin xMax yMax Create the x and y axes LinearAxis xAxis new Linear
395. l y As ChartCalendar Cf public TimeGroupDataset string sname ChartCalendar as ChartCalendar y E If you manually scale the TimeCoordinates object you can proceed as in all the other examples that use a date time x axis If you need to use the auto scaling capability you will need to add a few additional steps Place the data in a TimeGroupDataset dataset and use it to auto scale a TimeCoordinates scaling object The only problem here is that since the y values are the time values the chart y axis will end up as the time axis and the x axis will end up the numeric axis Call the TimeCoordinates SwapScaleOrientation in order to get it back to the orientation we want This swaps the scale orientation so the x axis is the time axis and the y axis is the numeric axis See the second of the two examples below for more details about how to use date time values to specify the bar ends of a floating bar plot Floating bar plot example that uses numeric values as the floating bar endpoints extracted from the example program Bargraphs class FloatingBars C GroupDataset Datasetl new GroupDataset Actual Sales x1 y1 CartesianCoordinates pTransforml new CartesianCoordinates Simple Plot Objects 284 Transforml SetScaleStartX 0 Transforml SetScaleStartY 0 Transforml SetScaleStopX 12 Transforml SetScaleStopY 7 Ka crt m Define axes axes labels and grids nj loatingBarPlot thePlotl
396. laced in 329 Zooming transforms An array size numtransforms of the PhysicalCoordinates objects associated with the zoom operation brescale True designates that the all of the scales should be re scaled once the final zoom rectangle is ascertained Call the ChartZoom SetEnable true method to enable the zoom object Restrict zooming in the x or y direction using the SetZoomXEnable and SetZoomY Enable methods Set the rounding mode associated with rescale operations using the SetZoomXRoundMode and SetZoomY RoundMode methods Call the ChartZoom PopZoomStack method at any time and the chart scale reverts to the minimum and maximum values of the previous zoom operation Repeated calls to the PopZoomStack method return the chart scale is to its original condition after which the PopZoomStack method has no effect Starting with Revision 2 0 zoom stack processing is internal to ChartZoom class There is no need to subclass the ChartZoom class in order to implement a zoom stack Just set the ChartZoom InternalZoomStackProcessing property true zoomObj InternalZoomStackProcesssing true Return to a previous zoom level by right clicking the mouse Change the zoom stack button using the ZoomStackButtonMask property Setting it to MouseButton Left MouseButton Right or MouseButton Middle Super zoom example Adapted from the SuperZoom example In this example a new class derives from the ChartZoom class and the MousePressed event overri
397. lar often reside on the edge or outside of the plot area Important parts of the axis the tick marks and tick mark 113 Scaling and Coordinate Systems labels are usually outside of the plot area The tick marks and tick mark labels must align perfectly with the coordinate system inside the plot area There are many different techniques to align the coordinate system inside the plot area with the coordinate system used in drawing chart objects outside of the plot area One technique is to maintain the physical coordinate system inside the plot area and use a normalized coordinate system for the graph area Whenever a chart object in the graph area a y axis tick mark for example needs to be aligned with the coordinate system inside the plot area the software converts the tick mark placement value from physical coordinates to normalized coordinates using standardized coordinate conversion routines The drawback of this technique is what I will call the odd pixel problem The odd pixel problem shows up when you try map physical normalized and user coordinate systems based on floating point numbers onto a pixel coordinate system using an integer coordinate system Unless the corners of the plot area fall on exact pixel boundaries converting from plot area coordinates to graph area coordinates once translated to pixels can be up to one pixel off The alternative technique used in this software library is to use a single coordinate system The
398. lass and displays simple datasets in a line plot format where scatter plot symbols highlight individual data points SimpleLineMarkerPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As SimpleDataset ByVal symtype As Integer ByVal lineattrib As ChartAttribute ByVal symbolattrib As ChartAttribute ByVal nsymbolstart As Integer ByVal nsymbolskip As Integer _ Cf public SimpleLineMarkerPlot PhysicalCoordinates transform SimpleDataset dataset int symtype ChartAttribute lineattrib ChartAttribute symbolattrib int nsymbolstart int nsymbolskip transform dataset symtype lineattrib symbolattrib nsymbolstart nsymbolskip The coordinate system for the new SimpleLineMarkerPlot object The line marker plot represents the values in this dataset The symbol used in the line marker plot Use one of the scatter plot symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR CIRCLE Specifies the attributes line color and line style for the line part of the line marker plot Specifies the attributes line and fill color for the symbol part of the line marker plot Specifies the starting index for symbols in the line marker plot Specifies the skip factor for placing symbols in the line marker plot Simple Plot Objects 262 An ChartAttribute object sets the obj
399. lasses The coordinate transform classes handle the conversion of Attribute class Auto Scale classes Charting object classes Mouse interaction classes File and printer rendering Miscellaneous utility classes physical coordinate values to working coordinate values for a parametric 2D coordinate system The attribute class encapsulates the most common attributes line color fill color line style line thickness etc for a chart object The coordinate transform classes use the auto scale classes to establish the minimum and maximum values used to scale a 2D coordinate system The axis classes also use the auto scale classes to establish proper tick mark spacing values The chart object classes includes all objects placeable in a chart That includes axes axes labels plot objects line plots bar graphs scatter plots etc grids titles backgrounds images and arbitrary shapes These classes permit the user to create and move data cursors move plot objects display tooltips and select data points in all types of graphs These classes render the chart image to a printer to a variety of file formats including JPEG and BMP or to a WPF System Windows Media Imaging object Other classes use these for data storage file I O and data processing A summary of each category appears in the following section Chart Window Classes System Windows Controls UserControl ChartView 31 Class Architecture The star
400. le ChartView to a bitmap image use the constructor which passes in a ChartView If you want to save multiple ChartView objects to a single image use the constructor which passes in a Panel object BufferedImage constructor Visual Basic Overloads Public Sub New _ ByVal component As ChartView _ ByVal imgformat As ImageFormat _ Visual Basic Overloads Public Sub New _ ByVal component As ChartView Overloads Public Sub New _ ByVal component As Panel _ ByVal imgformat As ImageFormat _ Visual Basic Overloads Public Sub New _ ByVal component As Panel _ Ct public BufferedImage ChartView component ImaqeFormat imgformat E public BufferedImage ChartView component LE public BufferedImage Panel component ImageFormat imgformat public BufferedImage Panel component LE component The ChartView or WPF Panel object that is the source for the chart image File and Printer Rendering 402 imageformat An image format object specifying the format of the rendered image The BufferedImage GetRenderedBitmap method converts the chart to the RenderTargetBitmap object specified by the imageformat object and returns a reference to the resulting bitmap BufferedImage example saving a ChartView object extracted from the example program WpfChartApplication1 class Window1 C public void SaveAsFile object sender RoutedEventArgs e ChartView currentChart chartViewl String filename
401. leScatter public SimpleScatter ChartView chartvu InitializeChart chartvu private void InitializeChart ChartView chartVu ChartFont theFont int numPoints 95 double xl new double numPoints double yl new double numPoints double y2 new double numPoints double y3 new double numPoints int 1 for i20 i lt numPoints i xl i double i 1 yg1 i 20 0 50 0 Math Expi x1 1i 20 0 y2 i ylli 20 0 2 x1 i 0 6 ChartSupport GetRandomDouble y3 i yl i 20 0 4 xl i 0 4 ChartSupport GetRandomDouble theFont new ChartFont Microsoft Sans Serif 10 FontStyles Normal SimpleDataset Datasetl new SimpleDataset First xl yl SimpleDataset Dataset2 new SimpleDataset Second x1 y2 SimpleDataset Dataset3 new SimpleDataset Third x1 y3 CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Dataset3 ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 15 90 0 725 Background background new Background pTransforml ChartObj PLOT BACKGROUND Colors White chartVu AddChartObject background LinearAxis xAxis new LinearAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis 415 Using QCChart2D for WPF to Create Windows Applications Chartorid sgrid hartVu AddC ChartGrid ygri
402. lendar New ChartCalendar 1996 ChartObj FEBRUARY 5 Dim xMax As ChartCalendar New ChartCalendar 2002 ChartObj JANUARY 5 Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleTimeScale As TimeCoordinates simpleTimeScale New TimeCoordinates xMin yMin xMax yMax Create the time axis x axis is assumed Dim xAxis As TimeAxis New TimeAxis simpleTimeScale Create the linear y axis Dim yAxis As LinearAxis _ New LinearAxis simpleTimeScale ChartObj Y AXIS Dim xAxisLabels As TimeAxisLabels New TimeAxisLabels xAxis Dim yAxisLabels As NumericAxisLabels New NumericAxisLabels yAxis Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis chartVu AddChartObject xAxisLabels chartVu AddChartObject yAxisLabels Custom time axis labels example C ChartFont labelfont new ChartFont Helvetica 10 FontStyles Normal FontWeights Bold double xAxisLabelsRotation 0 0 int xAxisLabelsDir ChartObj AXIS MIN int xAxisLabelsEnds ChartObj LABEL ALL Color xAxisLabelsColor Colors Black int xAxisNumericFormat ChartObj TIMEDATEFORMAT MY xAxisLabels SetAxisLabels labelfont xAxisLabelsRotation xAxisLabelsDir xAxisLabelsEnds xAxisLabelsColor xAxisLabels SetAxisLabelsFormat xAxisNumericFormat Visual Basic Dim labelfont As Ch
403. lendar 2002 ChartObj JANUARY 5 TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Visual Basic Dim xMin As ChartCalendar Dim xMax As ChartCalendar Dim yMin As Double 0 Dim yMax As Double 105 New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 2002 ChartObj JANUARY 5 Dim simpleTimeScale As TimeCoordinates simpleTimeScale new TimeCoordinates xMin yMin xMax yMax TimeCoordinates constructor with explicit scaling of a numeric based x scale and a time based y scale C double xMin OF double xMax 105 ChartCalendar yMin ChartCalendar yMax new ChartCalendar 1996 ChartObj FEBRUARY 5 new ChartCalendar 2002 ChartObj JANUARY 5 TimeCoordinates simpleTimeScale simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Visual Basic Scaling and Coordinate Systems 128 Dim xMin As Double 0 Dim xMax As Double 105 Dim yMin As ChartCalendar Dim yMax As ChartCalendar New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 2002 ChartObj JANUARY 5 Dim simpleTimeScale As TimeCoordinates simpleTimeScale new TimeCoordinates xMin yMin xMax yMax Another technique uses the default constructor and scales the coordinates using the TimeCoordinates SetTimeCoordinateBounds method Example of explicit scaling of a TimeCoordinates object time x scale and numeric y scale using the TimeCoordinates SetTimeCoordinateBounds metho
404. lendar _ x As Double y As Double _ npostype As Integer _ timeformat As Integer _ xjust As Integer _ yjust As Integer _ rotation As Double meLabel alCoordinates transform Charte alendar date int timeformat E public TimeLabel PhysicalCoordinates transform Chartront tfont ChartCalendar date double x double y int npostype int timeformat int Xj0st int eier double rotation date The calendar value used to initialize the label Text Classes 378 timeformat The format used to convert the calendar value to a text string Use one of the calendar format constants TIMEDATEFORMAT XXX ElapsedTimeLabel constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal timespan As TimeSpan _ ByVal timeformat As Integer Visual Basic Declaration Public Sub New _ transform As PhysicalCoordinates _ tfont As ChartFont _ timespan As TimeSpan _ x As Double y As Double _ npostype As Integer _ timeformat As Integer _ xjust As Integer _ yjust As Integer _ rotation As Double CH public ElapsedTimeLabel PhysicalCoordinates transform ChartCalendar date int timeformat public ElapsedTimeLabel PhysicalCoordinates transform ChartFont tfont TimeSpan timespan double x double y int npostype int timeformat 379 Text Classes int Just int just double rotation timespan The time span
405. lendar objects and it is not a reference to the underlying data The underlying data is stored as double values that represent the millisecond equivalent of the date time values The TimeGroupDataset GetXData and GetYData methods return references to the underlying data You can also modify a point at a time using one of the TimeGroupDataset SetTimeXDataValue and SetYDataValue methods If you need to add new points to dataset increasing its size use one of the AddTimeGroupDataPoints or InsertTimeGroupDataPoints methods Delete data points using the DeleteDataPoint method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a group time datasets C int nNumPnts 50 nNumGroups 4 int weekmode ChartObj WEEK 5D ChartCalendar xValues new ChartCalendar nNumPnts double stockPriceData new double nNumGroups nNumPnts double minval 0 0 maxval 0 0 nt ij ChartCalendar currentdate new ChartCalendar ChartCalendar SetTOD currentdate 0 0 1 currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode Make sure not to start on a weekend xValues 0 ChartCalendar currentdate Clone currentdate ChartCalendar CalendarDaysAdd currentdate 1 weekmode stockPriceData 3 0 25 close stockPriceData 0 0 stockPriceData 1 0 stockPriceData 2 0 257 open 26 high 24 low 103 Chart Datasets for is1 i lt nNumPnts
406. les Solid chartVu AddChartObject pAntennaGrid ntennaAxesLabels pAntennaAxisLabels AntennaAxesLabels pAntennaAxis GetCompatibleAxesLabels hartVu AddChartObject pAntennaAxisLabels G m H Color transparentRed Color FromRgb 180 255 0 0 Color transparentBlue Color FromRgb 180 0 0 255 ChartAttribute attribl new ChartAttribute transparentRed 1 DashStyles Solid attribl SymbolSize 7 ChartAttribute attrib2 new ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue attrib2 SymbolSize 7 Polar and Antenna Charts 354 ChartAttribute attrib3 new ChartAttribute Colors Yellow 3 DashStyles Solid Colors Yellow ChartAttribute attrib4 new ChartAttribute Colors MediumPurple 2 DashStyles Dot Colors MediumPurple AntennaLinePlot thePlotl new AntennaLinePlot pAntennaTransform thePlotl InitAntennaLinePlot Datasetl attribl chartVu AddChartObject thePlotl1 AntennaScatterPlot thePlot2 new AntennaScatterPlot pAntennaTransform thePlot2 InitAntennaScatterPlot Datasetl ChartObj SQUARE attrib2 chartVu AddChartObject thePlot2 Visual Basic Datasetl New SimpleDataset First magl angl Dataset2 New SimpleDataset Second mag2 angl Dim datasetarray As SimpleDataset Datasetl Dataset2 pAntennaTransform New AntennaCoordinates pAntennaTransform AutoScale datasetarray ChartObj AUTOAXES FAR pAntennaTransform SetGraphBorderDiagonal 0 25 0 15 0 75 0 8
407. lic void SetAxisLabels ChartFont font double rotation int Labdir int labelends Color labcolor string tickstrings int numtickstrings font The font object used to display the axis label text Axis Labels 224 rotation The rotation in degrees of label text in the normal viewing plane labdir The justification of the axis label AXIS MIN or AXIS MAX with respect to the tick mark endpoint decimal Sets the number of digits to the right of the decimal point for numeric axis labels labelends Specifies whether there should be labels for the axis minimum LABEL MIN maximum LABEL MAX or tick mark starting point LABEL ORIGIN The value of these constants can be OR d together The value of LABEL MIN LABEL MAX LABEL ORIGIN is LABEL ALL labcolor The color of the label text tickstrings Array of strings one for each major tick mark that you want labeled numtickstrings The number of strings in the tickstrings array If you want the first major tick mark usually the intercept of the y axis with the x axis to remain empty just initialize the first element of the tickstrings array to the empty string as in the example below Simple string axis labels example extracted from the BarGraphs LandOfTheFry example program C int NumberOfCountries 13 int NumberOfGroups 2 String CountryNames we China Japan Russia Italy Sweden Denmark Mexico Brazil France Australia
408. lication gf Class Library DocProject ASP NET Web Application S ASP NET Web Service Application Report jor snore WCF a Console Application BZ wcr Service Application Workflow gai Windows Forms Control Library 8 Dynamic Data Entities Web Application Other Languages Si Dynamic Data Web Application Other Project Types My Templates amp fIDocProject g DocSite Web Application Search Online Templates Windows Presentation Foundation browser application NET Framework 3 5 Name WpfBrowserApplication 1 l Location E Quinn Curtis WPF Development DotNet QCChart2D Visual CSharplexamples wpf v Solution Create new Solution v Create directory for solution Solution Name WpfBrowserApplication 1 L a Io Ina WPF browser application the main ASML file is named Pagel whereas in the standard Windows application it is named Windowsl The XAML of Pagel looks like lt Page x Class WpfBrowserApplicationl Pagel xmlins http schemas microsoft com winfx 2006 xaml presentation xmlins x http schemas microsoft com winfx 2006 xaml lt Grid gt lt Grid gt lt Page gt The window does not yet have any content First define a default size for the window and add a reference to the QCChart2D namespace In this case the namespace is com quinncurtis chart2dwpf and it is located in the assembly DLL with the name QCChart2DWPF3 So add the following line under the other x
409. lid date time value specified using the class ChartCalendar The axis maximum value should be later in time than the minimum Create an inverted axis by first defining an inverted physical coordinate system using the TimeCoordinates class The axis minimum and maximum do not have to fall on even time or date intervals and can assume any date compatible with the ChartCalendar class For example Starting Date and Time Ending Date and Time Range 1 1 1972 00 00 00 1 1 1999 00 00 00 27 years 11 04 1997 8 30 00 11 04 1997 16 00 00 7 hours 30 minutes 11 28 2000 8 31 22 1 14 2001 15 14 33 48 days 6 hours 43 minutes 11 sec Date Time Minor and Major Tick Mark Intervals The predefined date time axis tick mark constants listed below specify both major and minor tick mark spacing Date Time Axis Tick Mark Constants Description TIMEAXIS 50YEARIOYEAR 50 year major tick mark spacing 10 year minor tick mark spacing TIMEAXIS 20YEARSYEAR 20 year major tick mark spacing 5 year minor tick mark spacing TIMEAXIS IlOYEARYEAR 10 year major tick mark spacing 1 year minor tick mark spacing TIMEAXIS SYEARYEAR 5 year major tick mark spacing 1 year minor tick mark spacing TIMEAXIS YEAR 1 year major tick mark spacing TIMEAXIS YEARQUARTER 1 year major tick mark spacing 1 quarter minor tick mark spacing TIMEAXIS YEARMONTH 1 year major tick mark spacing 1 month minor tick mark spacing TIMEAXIS QUARTER TIMEAXIS QUARTERMONTH TIMEAXIS MONTH TIMEA
410. ll placed in the initial default window New Project Project types Templates NET Framework 3 5 v IS E Visual C Visual Studio installed templates Windows Web el Windows Forms Application dass Library DocProject P4 WPF Application Fig WPF Browser Application Reporting m Console Application vg Empty Project WCF e WPF Custom Control Library X WPF User Control Library Workflow Ge Windows Forms Control Library Other Languages Visual Basic My Templates Windows a Web Search Online Templates DocProject Reporting WCF Workflow LO Mie sl C A3 v Windows Presentation Foundation dient application NET Framework 3 5 Name WpfApplication 1 E Quinn Curtis WPF Development DotNet QCChart2D Visual Basic examples wpf Create new Solution v Create directory for solution WpfApplication 1 e jJ ewe Default Namespace Issues There is an annoying difference in the default files generated by the VB project wizard versus the C project wizard The C wizard includes a namespace reference in the class definition found in the main Windows xaml file as in WpfApplication1 Window1 In Visual Basic the default Windows xaml file does not include the namespace reference as in the example below If you stick with the default VB class definition no namespace you must be consistent across all of your source files and not specify a project namespace Most all
411. llBarl Scroll AddHandler chartVu VScrollBarl Scroll AddressOf vScrollBarl Scroll UpdateYScaleAndAxes CInt Math Truncate chartVu VScrollBarl Value UpdateXScaleAndAxes CInt Math Truncate chartVu HScrollBarl Value End Sub Friend Sub hScrollBarl Scroll sender As Object e As System Windows Controls Primitives ScrollEventArgs UpdateXScaleAndAxes CInt Math Truncate e NewValue End Sub FAQs 462 Friend Sub vScrollBarl Scroll sender As Object e As System Windows Controls Primitives ScrollEventArgs End Sub UpdateYScaleAndAxes CInt Math Truncate e NewValue There are many other examples of Form components interacting with charts The ContourPlots ContourLinePlot example program uses a CheckBox object to specify which contours are to be displayed In the MultipleAxes OHLCChart example a Scrollbar controls the time axis of a stock market OHLC chart The MultiAxes MultiAxesChart example uses Button objects to select the x axis range 19 I am trying to plot 100 000 000 data points and it takes too long to draw the graph What is wrong with the software and what can I do to make it faster The software runs as fast as we can make it We do not have any hidden switches that will speed up the software What you need to do is to step back and think about the best way to display your data A fundamental issue that many programmers fail to consider is the relationship between the resolution of the rasterized screen image of t
412. log GetLineColor selectedObj SetLineStyle linedialog GetLineStyle selectedObj SetLineWidth linedialog GetLineWidth End If End Sub Public Sub InvokeTextDialog ByVal textobj As ChartText Dim textdialog As EditTextDialog textdialog New EditTextDialog textobj If textdialog ShowDialog Me GetChartObjComponent DialogResult OK Then textobj SetTextString textdialog GetString textobj SetTextFont textdialog GetFont End If End Sub Public Overrides Sub OnMouseDown ByVal mouseevent As MouseButtonEventArgs MyBase OnMouseDown mouseevent Dim selectedObj As GraphObj GetSelectedObject If selectedObj Is Nothing Then Return Check for a specific object If selectedObj Is currentOb sAxis Or selectedObj Is currentObj yAxis Or ChartSupport IsKindOf selectedObj SimpleLinePlot Or ChartSupport IsType selectedObj com quinncurtis chart2dwpf ChartGrid Then InvokeLineDialog selectedObj ElseIf ChartSupport IsKindOf selectedObj ChartText Then InvokeTextDialog selectedObj End If Me GetChartObjComponent UpdateDraw End Sub End Class The LineDialog and TextDialog classes need to be written by the programmer Sample classes are found in the EditChartExample example This example reveals two strange weaknesses of WPF there is no common control color picker dialog and no common font chooser dialog We use a simple scroll list box for to choose a color and a public domain
413. lotl AddPopulation Houston 2 hePlotl AddPopulation SanFrancisco 3 hePlotl AddPopulation Boston 4 hePlotl AddPopulation Pittsburgh 5 ET PE EE PE EE hePlotl BWFormat ChartObj BW IOR15 WHISKER OUTLIERS hePlotl BarDatapointLabelPosition ChartObj CENTERED BAR hePlotl PlotLabelTemplate TextFont _ New ChartFont Microsoft Sans Serif 8 FontStyles Normal ct ct ct hePlotl PlotLabelTemplate DecimalPos 1 hePlotl ShowDatapointValue True label outliers thePlotl ScatterPlot ShowDatapointValue True hePlotl AutoBWChart CL G et chartVu AddChartObject thePlotl Bubble Plots Class BubblePlot GraphObj ChartPlot GroupPlot BubblePlot The BubblePlot class is a concrete implementation of the GroupPlot class It displays bubble plots A group dataset specifies the position and size of each bubble in a bubble plot The numer of groups must be two BubblePlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As GroupDataset _ ByVal bubblesizetype As Integer _ ByVal attrib As ChartAttribute Ct public BubblePlot PhysicalCoordinates transform GroupDataset dataset 275 Simple Plot Objects int bubblesizetype ChartAttribute attrib transform The coordinate system for the new bubble plot object dataset A group dataset specifying the location and size of the bubbles in
414. ls 1 for i20 i lt numcontourlevels i Color color Color FromRgb int 255 ChartSupport GetRandomDouble int 255 ChartSupport GetRandomDouble int 255 ChartSupport GetRandomDouble attribs i new ChartAttribute color 2 DashStyles Solid color attribs i SetFillFlag true 1 attribs 0 SetColor Colors Black attribs 1 SetColor Colors Blue attribs 2 SetColor Colors DarkGray attribs 3 SetColor Colors Green attribs 4 SetColor Colors Red attribs 5 SetColor Colors Cyan attribs 6 SetColor Colors Magenta attribs 7 SetColor Colors Orange attribs 8 SetColor Colors Yellow for i20 i lt numcontourlevels i if i 3 0 lineflags i true else lineflags i false if i 3 0 labelflags i true else labelflags i false ll thePlotl new ContourPlot pTransforml datasetl contourlevels attribs lineflags labelflags numcontourlevels ChartObj CONTOUR LINE thePlotl SetPolygonGridOn true thePlotl SetContourLineAlgorithm ChartObj CONTOUR LINEWALK NumericLabel contourlabel thePlotl GetPlotLabelTemplate ChartFont contourLabelFont new ChartFont SansSerif 8 FontStyles Normal contourlabel SetDecimalPos 0 contourlabel SetTextFont contourLabelFont contourlabel TextBgMode true contourlabel TextBgColor Colors White thePlotl SetPlotLabelTemplate contourlabel chartVu AddChartObject
415. lues Visual Basic Public Sub SetGraphBorderInsets ByVal rLeft As Double _ ByVal rTop As Double _ ByVal rRight As Double _ ByVal rBottom As Double public void SetGraphBorderInsets double rLeft double rTop double rRight double rBottom rLeft The left inset of the plot area inside the graph area specified using graph normalized coordinates rTop The top inset of the plot area inside the graph area specified using graph normalized coordinates rRight The right inset of the plot area inside the graph area specified using graph normalized coordinates rBottom The bottom inset of the plot area inside the graph area specified using graph normalized coordinates The following examples all position the plot area of the chart in the upper right quadrant of the graph viewport C CartesianCoordinates simpleScale simpleScale new CartesianCoordinates xMin yMin xMax yMax Use ONE of the example below Example 41 simpleScale SetGraphBorderFrame new Rectangle2D 0 5 0 0 0 5 0 5 Example 42 simpleScale SetGraphBorderFrame 0 5 0 0 0 5 0 5 119 Scaling and Coordinate Systems Example 43 simpleScale SetGraphBorderDiagonal 0 5 0 0 1 0 0 5 Example 44 simpleScale SetGraphBorderInsets 0 5 0 0 0 0 0 5 Visual Basic Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleScale As CartesianCoordinates
416. lues stockPriceData pTransforml New TimeCoordinates pTransforml SetWeekType weekmode pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR pTransforml SetGraphBorderDiagonal 0 1 0 15 0 9 0 75 SetInitialDates pTransforml Dim graphbackgroundl As New Background pTransforml ChartObj GRAPH BACKGROUND Colors White Colors LightGray ChartObj Y AXIS chartVu AddChartObject graphbackgroundl Dim plotbackground1l As New Background pTransforml ChartObj PLOT BACKGROUND Colors White Dim attribl As New ChartAttribute Colors Red 1 DashStyles Solid Colors Red Dim attrib2 As New ChartAttribute Colors Yellow 1 DashStyles Solid Colors Yellow Dim attrib3 As New ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue Dim attrib4 As New ChartAttribute Colors Green 1 DashStyles Solid Colors Green Dim attribArray As ChartAttribute attribl attrib2 attrib3 attrib4 attribl SetFillFlag True thePlotl New FloatingStackedBarPlot pTransforml Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj DAY OF YEAR 0 75 attribArray ChartObj JUSTIFY CENTER thePlotl SetFastClipMode ChartObj FASTCLIP X chartVu AddChartObject thePlot1 Simple Plot Objects 288 Group Bar Plots Class GroupBarPlot GraphObj ChartPlot GroupPlot GroupBarPlot The GroupBarPlot class extends the GroupPlot class and displays data in a group bar format Individual bars the height of w
417. mDouble 0 5 z 2000 950 Math Sin Math Sqrt x x y yyy Return z End Function CalcZValue End Class ZValueFunctionClass Sub CreateRegularGridPolysurface Dim zValueFunction As New ZValueFunctionClass dataset New ContourDataset Contour Dataset 32 32 _ s fall Vol Tel zValuoeFunction End Sub CreateRegularGridPolysurface Simple Event Dataset Class EventSimpleDataset ChartObj Chart Datasets 90 ChartDataset SimpleDataset EventSimpleDataset Background for ChartEvent datasets Most coordinate systems used in plotting represent a continuous domain In the QCChart2D software these includes linear logarithmic simple time date elapsed time polar and antenna coordinate systems The one exception is a variant of the time date scale which allows for periodic yet discontinuous time In the time date scale case it is possible to remove weekends from the time scale and to define the hours of the day to be some subset of the standard 24 hour cycle The most often used example is the stock trading day used in the US which is from 9 30 to 16 00 and does not include weekends Unfortunately the time coordinate system even with discontinuous time is still insufficient to plot the great variety of time plots needed in the financial services and other industries Some of these special requirements are Must be able to remove arbitrary non periodic days holidays for example from t
418. major tick marks GRID MAJOR the minor tick marks GRID MINOR or the major and minor tick marks GRID_ALL of the reference polar axis The SetLineWidth SetLineStyle and SetColor methods are used to customize the drawing properties of the lines used to draw the axes lines and tick marks Polar grid example C double polarmagnitude 5 0 PolarCoordinates polarscale new PolarCoordinates polarmagnitude PolarAxes polarAxes new PolarAxes polarscale PolarGrid polarGrid new PolarGrid polarAxes ChartObj GRID MAJOR Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes chartVu AddChartObject polarGrid Visual Basic Dim polarmagnitude As Double 5 0 Dim polarscale As PolarCoordinates New PolarCoordinates polarmagnitude Dim polarAxes As PolarAxes New PolarAxes polarscale Dim polarGrid As PolarGrid New PolarGrid polarAxes ChartObj GRID MAJOR 249 Axis Grids Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes chartVu AddChartObject polarGrid Antenna Grids Class AntennaGrid GraphObj ChartGrid AntennaGrid The AntennaGrid class defines a grid for antenna axes The antenna grid consists of two parts the circular grid and the radi
419. mark every AxisMajorNthTick event MINORCROSSOVEREVENT MAJORCROSSOVEREVENT display a minor tick mark every AxisMinorNthTick minor crossover event and a major tick mark every AxisMajorNthTick major crossover event The minor and major crossover events are controlled by the MajorTickCrossoverEvent and MinorTickCrossoverEvent properties of the EventAxis The default is ChartObj TICK RULE MINORCROSSOVEREVENT MAJORCROSSOVEREVENT The term crossover event means that an element of date time timestamp changes If you specify a MinorTickCrossoverEvent of ChartObj SECOND and an AxisMinorNthTick of 15 this will cause a minor tick mark to be displayed every 15 second if an event falls within that range So if your events are spaced approximately 5 seconds apart you will get a minor tick mark for approximately every three events If you choose a MajorTickCrossoverEvent of ChartObj MINUTE and an AxisMajorNthTick of 1 this will cause a major tick mark to be displayed every minute if an event falls within that range Tick marks only show up on an event so if there are no events within the time interval no tick mark will appear Creating a Event Axis There are two main constructors for EventAxis objects The first EventAxis constructor assumes that the axis extents match the extents of the underlying coordinate system transform The second EventAxis constructor sets the axis extents to the specified minimum and maximum values regardless of the
420. mat the Chart Datasets 102 first row represents the time values and subsequent rows represent the y values where each row is a group Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation A DateTimeFormatInfo object and a date time format string in the CSV class control the interpretation of the ChartCalendar values The format in the file must match the format specified for the CSV class The underlying conversion mechanism calls the DateTime ToString String formatstring DateTimeFormatInfo info method for the conversion The default format for the date time formatstring object is M dd yy Call the SetDateTimeFomatString method to change the default date time format See the documentation for the Net DateTime ToString method to figure out the various formatting options for the date time format string If you are into internationalization and difficult to understand Net documentation you can also create your own DateTimeFormatInfo object installing it in the CSV object using CSV SetTimeDateFormat method The date time format string and the DateTimeFormatlInfo object apply to both CSV files used for input and CSV files used for output If an attempt is made to read date time values that do not match the desired format the data values are set to invalid date time values You can retrieve a copy of the date time data using the TimeGroupDataset GetTimeXData method It returns an array of ChartCa
421. me Chartes te aet QU ER ende tes ob tiu eis 166 Chart View Object Resize Modes o ee uar eite eege erger eet 167 Chart View View La sees pesi ies oege ccntavesdagh eegene Edert eege du eae era ed 168 Finding C Bart ODBIeete aao to Oen hale ia EN das eodein AED CLE dete MED uli Rad 169 Colors Gradients and Backarounds s eot de eet erste ex top de ou ea rn iaa Rada 171 Class EE ee EE 171 Class WEE 172 Class Dackoroufid a ee EE ee unita es 176 PRIS ML UU 180 Chart ARCS os san TEC U 181 IE at EE 182 Logarithmic eege edet stead puto ea Viu deni Dado alice ecd teu DT 187 Tae BURIAL FREE C MC 192 Elapsed TIME A68 caecos der eter EES 201 e E 204 Polar e cR MM m pU 208 Antenna AXES noen E T DT TET YE 211 AS T abest ss peiora tegi aa dp vex Rap E cea E REN Gales eden ONT i uals eee Shon Sanus bruce qui ins 216 PNAS Uae CT T OP 216 IN reric Axis E osi ehe co EDO Ties ates ae o ope d bte de Du Ud ansiedad oed eu Duden se Ru uds 218 Nr elio T DM E ER 222 Time aud Date Axts Labels aceto oe EE td ear desde Ub Der etia Face bosques da ox Ri A RS RUE 225 Elapsed Time AxisLbabelizi c aet eie eebe eebe 231 Byent E e esed E E M E Ce e A ppt T 234 Polar Axembdbelsa cu eodd ta ast ao radiant dieci TE Motu EE 239 Antenna Axes Labels ice vm rtp d eem or pda eh vcre Ne d eebe 242 SAXIS GdS MD Tm 244 Linear Logarithmic and Time Axis Gris io ao de eoe odo t oet d op e UR Ts Cop
422. mer to override the existing behavior of the class The programmer is able to use the built in search routines to identify what plot object is selected the dataset the coordinate system and the actual data values associated with the plot object Using this information the programmer can customize the text displayed in the ChartText object used to display the tooltip text Use the following steps to create a custom tooltip Subclass the DataToolTip class with one of your own Enable the custom mode by calling DataToolTip SetDataToolTipFormat ChartObj DATA TOOLTIP CUSTOM method SS Override the OnMouseDown and OnMouseUp events and add the code needed to customize the display In your custom OnMouseDown event make sure you call super OnMouseDown first since this selects the plot object for you and makes the plot objects coordinate system dataset and selected data point available using get methods You can place your tooltip text in the ChartText object internal to the DataToolTip class Get a reference to this object using the DataToolTip GetTextTemplate method In your custom OnMouseUp event call super OnMouseUp followed by a call to the ChartView repaint method chartVu UpdateDraw in the example below Oo Custom DataToolTip example Adapted from the FinancialExamples OHLCChart example In this example a new class is derived from the DataToolTip class and the OnMouseDown and OnMouseUp events are overridden C ChartView ch
423. ml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 15 90 0 8 xAxis new LinearAxis pTransforml ChartObj X AXIS 163 The Chart View chartVu AddChartObject xAxis Visual Basic Dim chartVu As ChartView New ChartView Dim Datasetl As New SimpleDataset First xl yl Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE _ Charto LINEAR_SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 7 Dim xAxis As New LinearAxis pTransforml ChartObj X AXIS chartVu AddChartObject xAxis Rendering Order of GraphObj Objects The z order of a graph object defines the order in which it is rendered to the screen Objects with a low z order are rendered first and underneath objects with a high z order This is critically important because you want plot objects line plots bar plots etc on top of background objects Graph objects which have the same z order are plotted in the order they are added to the ChartView Each GraphObj object has a default z order value summarized below Base Class Default z order value Comments Background 10 Backgrounds are drawn first A plot area background has a z value of 10 and a graph area background has a z value of 9 forcing graph area backgroun
424. mlns namespace tags Title Windowl Height 600 Width 900 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 429 Using QCChart2D for WPF to Create Web Applications This line needs to be resolved by adding a reference to the QCChart2DWPF3 library to the project Right click on Reference in the Solution Explorer window and select Add Reference Browse to the Quinn Curtis DotNet lib subdirectory and select the QCChart2DWPF3 DLL Add Reference NET COM Projects Browse Recent Look in lib Meee h oacuti exe 55 QCRTGraphWPF 3 dll 55 QCChart2DNet dll X QCsPCChartNet dll DESEE occa 9 QCChart3DNet dl X QCChart3DVisionAux dll 5 QcMatPackNet d 5 QcMatViewNet d 5 QCRTGraphNet dil Filename QCChatt2DWPF3 dl Files of type Component Files dll tlb olb ocx exe manifest as Ice View the Pagel xaml code and add the reference to ChartView in the Grid layout panel The Window1 xaml file now looks like lt Page x Class WpfBrowserApplication Pagel xmlIns http schemas microsoft com winfx 2006 xaml presentation xmlins x http schemas microsoft com winfx 2006 xaml Title Window1 Height 600 Width 900 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 gt lt Grid gt lt my ChartView Margin 18 11 16 6 Name chartView1 gt lt Grid gt lt Page gt Usi
425. mple if the desired chart plot area uses a physical coordinate system of 0 0 0 0 100 0 100 0 and the plot area is centered in the graph area with the plot area 4 the width and height of the graph area then the coordinate system 50 50 150 150 is calculated and used to scale the graph area The WorkingCoordinates class uses the underlying WorldCoordinates class to scale the viewport to the final world coordinates scale Physical Coordinates The PhysicalCoordinates abstract class is responsible for mapping the plot area coordinate system whether it is linear logarithmic date time polar antenna continuous or discontinuous into a continuous linear coordinate system It uses the WorkingCoordinates class to map this plot area coordinate system to the entire viewport The PhysicalCoordinates system uses independent scale objects derived from ChartScale to manage coordinate conversions for the x and y dimensions This way the x coordinate can use one coordinate conversion object LinearScale LogScale TimeScale and the y coordinate another There are six concrete implementations of the PhysicalCoordinates class CartesianCoordinates TimeCoordinates ElapsedTimeCoordinates EventCoordinates PolarCoordinates and AntennaCoordinates Use the CartesianCoordinates class for any combination of linear and logarithmic scaling for the x and y coordinate Use the TimeCoordinates class when you want a time date scale for the x coordinate and a l
426. mples is the tick mark starting point or origin In the first example the tick mark origin is 0 0 and in the second case the tick mark origin is 0 88769 The tick mark origin is an important property because often it should not be the minimum value of the axis but rather some intermediate value between the minimum and maximum value of the axis In the example above the data may range from 0 88769 to 19 9 and the chart is to have exactly that range It is still appropriate that the tick mark origin be set to 0 0 rather than the axis minimum value of 0 88769 The tick mark origin should reside in the bounds defined by the axis minimum and maximum inclusive of the endpoints It does not need to be near an endpoint however For example an axis with endpoints 16 to 19 should use a minor tick mark interval of 1 0 or 2 0 a major tick mark interval of 5 0 or 10 0 and a tick mark origin of 0 0 Usually if the axis minimum and maximum bracket 0 0 i e the axis minimum is less than or equal to 0 0 and the axis maximum is greater than or equal to 0 0 the best tick mark origin to use is 0 0 Creating a Linear Axis There are two main constructors for LinearAxis objects The first LinearAxis constructor assumes that the axis extents match the extents of the underlying coordinate system transform The second LinearAxis constructor sets the axis extents to the specified minimum and maximum values regardless of the underlying coordinate system
427. mum values for a scale set to logarithmic coordinates make sure you use valid values i e non negative values greater than 0 0 The auto scale routines work for both linear and logarithmic scales If you use the auto scale methods it is important that you call the auto scale methods after you establish if a scale is linear or logarithmic This is because the auto scale routines will allow zero and negative values for the minimum and maximum of a linear scale but not a logarithmic scale If you call the auto scale routines first while the scales are set to the default linear scale mode and change one or both of the scales to logarithmic mode you can introduce invalid negative and zero values into the logarithmic coordinate system Scaling and Coordinate Systems 124 Example of auto scaling a CartesianCoordinates object that has a logarithmic y scale using a single dataset C double xData 2 3 4 5 6 7 8 9 double yData 2 33 440 5554 46123 332322 5435541 64567551 SimpleDataset dataset new SimpleDataset Sales xData yData CartesianCoordinates simpleScale new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LOG SCALE simpleScale AutoScale dataset simpleScale SetScaleStopX 10 simpleScale SetScaleStartX 1 0 Visual Basic Dim xData As Double Dim yData As Double 2 3 4 5 6 7 8 9 2 33 440 5554 46123 332322 5435641 64567551 Dim dataset As SimpleDataset New SimpleDataset
428. n auto scale method C double T Data 2 3 4 5 9 7 8 9 double yData 22 33 44 55 46 33 25 14 SimpleDataset dataset new SimpleDataset Sales xData yData CartesianCoordinates simpleScale new CartesianCoordinates simpleScale AutoScale dataset simpleScale SetScaleStopX 10 Scaling and Coordinate Systems 122 simpleScale SetScaleStartX 1 0 Visual Basic Dim xData As Double Dim yData As Double 1iQ2 3 8 9 9 7 9 9 20 10 22 33 44 55 46 323 25 14 9 Dim dataset As SimpleDataset New SimpleDataset Sales Dim simpleScale As CartesianCoordinates simpleScale AutoScale dataset simpleScale SetScaleStartX 1 0 simpleScale SetScaleStopX 10 0 xData yData new CartesianCoordinates The auto scale methods that use an array of datasets to determine the proper range are very similar Example of auto scaling a CartesianCoordinates object using the multiple datasets C double xDatal 1 2 3 4 5 6 7 8 9 10 double II yDatal 10 22 33 44 55 46 33 25 14 Sie double xData2 10 9 8 7 6 5 4 3 2 1 double yData2 20 12 43 54 15 26 63 25 24 19 double xData3 5 6 7 6 5 4 5 6 7 8 double yData3 30 52 13 4 25 76 13 35 24 19 SimpleDataset datasetl SimpleDataset dataset2 SimpleDataset dataset3 new SimpleDataset Sales1 xDatal yDatal new SimpleDataset Sales2 xData2 yData2 new SimpleDatas
429. nal arrays used to store the data using the GroupDataset methods GetXData and GetGroupData Change the values in the data arrays using these references You can also modify a point at a time using one of the SetYDataValue and SetXDataValue methods If you need to add new points to dataset increasing its size use one of the AddGroupDataPoints or InsertGroupDataPoints methods Delete data points using the DeleteDataPoint method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a group datasets from numeric arrays C double xl 10 20 30 40 50 double lyl 9 21 20 40 30 t B5 15 35 10 591 0154 253 154 20440 EE GroupDataset Datasetll new GroupDataset First x1l yl Visual Basic Dim x1 As Double 10 20 30 40 50 Dim yl As Double 9 21 20 40 30 _ 55 15 35 10 56 _ 115 25 15 30 42074 Dim Datasetl As GroupDataset New GroupDataset First xl yl Chart Datasets 100 Example of creating a group datasets from a CSV file C CSV csvDataFile new CSV GroupDataset Datasetl new GroupDataset csvDataFile GroupDataset csv 0 0 Write out dataset as a CSV file under a different file name Datasetl WriteGroupDataset csvDataFile GroupDataset2 csv Visual Basic Dim csvDataFile As CSV New CSV Dim Datasetl As GroupDataset _ New GroupDataset csvDataFile GroupDataset csv 0 0 Write
430. nd of the bounding lines LineGapPlot constructor Visual Basic Overloads Public Sub New ByVal transform As PhysicalCoordinates _ ByVal dataset As GroupDataset ByVal attrib As ChartAttribute Ct public LineGapPlot PhysicalCoordinates transform GroupDataset dataset ChartAttribute attrib Simple Plot Objects 294 transform The coordinate system for the new LineGapPlot object dataset The line gap plot represents the values in this group dataset The number of groups in this group dataset must be two attrib Specifies the attributes line and fill color for the fill area A segment between adjacent x values in the line gap plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Line gap bar plot example extracted from the example program MiscCharts class LineGapChart C int nNumPnts 5 nNumGroups 2 ChartCalendar xValues new ChartCalendar nNumPnts double groupBarData new double nNumGroups nNumPnts theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold xValues 0 new ChartCalendar 1998 ChartObj JANUARY E groupBarData 0 0 43 groupBarData 1 0 71 xValues 1 new ChartCalendar 1999 ChartObj JANUARY js groupBarData 0 1 40 groupBarData 1 1 81 xValues 2 new ChartCalendar 2000 ChartObj JANUARY js
431. nd 9 in each decade minorticklength The length of minor tick marks in WPF device coordinates majorticklength The length of major tick marks in WPF device coordinates ticdir The direction of the tick marks Use one of the tick mark direction constants AXIS MIN AXIS CENTER or AXIS MAX 191 Axes The SetLineWidth SetLineStyle and SetColor methods are used to customize the drawing properties of the lines used to draw the axis line and tick marks Simple log axis example C double xMin 0 double xMax 1000 double yMin 0 2 double yMax 2000 CartesianCoordinates logYScale new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LOG SCALE logYScale SetCoordinateBounds xMin yMin xMax yMax Create a linear x axis and a logarithmic y axis LinearAxis xAxis new LinearAxis logYScale ChartObj X AXIS LogAxis yAxis new LogAxis logYScale ChartObj Y AXIS Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Visual Basic Dim xMin As Double 0 Dim xMax As Double 1000 Dim yMin As Double 0 2 Dim yMax As Double 2000 Dim logYScale As CartesianCoordinates _ New CartesianCoordinates ChartObj LINEAR SCALE ChartObj LOG SCALE logYScale SetCoordinateBounds Min yMin xMax yMax Create a linear x axis and a logarithmic y axis Dim xAxis
432. ndowl xaml lt summary gt public partial class Windowl Window public Windowl InitializeComponent Add a reference to the QCChart2DWPF namespace com quinncurtis chart2dwpf in the using section of the program using com quinncurtis chart2dwpf In our WPFChartApplicationl example we also add references to some other Net libraries in support of printing and Image files 413 Using QCChart2D for WPF to Create Windows Applications using System Printing using Microsoft Win32 using System IO Add a new simple class file named SimpleScatterPlot to the project Alternatively select Add Existing Item and select the file SimpleScatterPlot cs from our WPFChartApplicationl example folder If you do that make sure you change the declared namespace at the top of the file namespace WpfChartApplicationl to the one your project uses probably namespace WpfApplicationl Add New Item WpfApplication1 Categories Templates E Visual C Code Data General Web Windows Forms WPF Reporting Workflow Visual Studio installed templates E About Box a Application Configuration File c amp t Assembly Information File amp t Class c Code File Cursor File Custom Control WPF Ec Debugger Visualizer 73 Flow Document WPF 90 Icon File z d Interface UNO to SQL Classes F JLocal Database Cache d ADO NET Entity Data Model EN Application Manifest File 42 Bitmap
433. neWidth SetLineStyle and SetColor methods are used to customize the drawing properties of the lines used to draw the axes lines and tick marks Antenna grid example C AntennaAxes pAntennaAxis pAntennaTransform GetCompatibleAxes pAntennaAxis LineColor Colors Black chartVu AddChartObject pAntennaAxis AntennaGrid pAntennaGrid new AntennaGrid pAntennaAxis AntennaGrid GRID ALL pAntennaGrid ChartObjAttributes new ChartAttribute Colors LightBlue 1 DashStyles Solid chartVu AddChartObject pAntennaGrid Visual Basic Dim pAntennaAxis As AntennaAxes pAntennaTransform GetCompatibleAxes pAntennaAxis LineColor Colors Black chartVu AddChartObject pAntennaAxis Dim pAntennaGrid As New AntennaGrid pAntennaAxis AntennaGrid GRID_ALL pAntennaGrid ChartObjAttributes New ChartAttribute Colors LightBlue 1 DashStyles Solid chartVu AddChartObject pAntennaGrid 10 Simple Plot Objects SimplePlot SimpleBarPlot SimpleLineMarkerPlot SimpleLinePlot SimpleScatterPlot SimpleVersaPlot The SimplePlot class is an abstract class representing plot types that use data organized as a simple array of xy points where there is one y for every x Simple plot types include line plots scatter plots bar graphs and line marker plots When used in the simplest mode simple plot objects use a single ChartAttribute object to control the plot objects color line and gradient styles In terms of memory usage this is the mo
434. need to take into account the number of seconds per day and the week type For example C the tradingDay array is initialized with the stock trading dates the stockPrice array is initialized with stock price data TimeSimpleDataset Datasetl new TimeSimpleDataset First tradingDay stockPrice long startTime 9 60 30 60 1000 msecs cooresponding to 9 30 AM long stopTime 16 60 60 1000 msecs cooresponding to 4 00 PM TimeCoordinates stockTimeScale new TimeCoordinates stockTimeScale SetWeekType ChartObj WEEK 5D stockTimeScale SetScaleStartTOD startTime StockTimeScale SetScaleStopTOD stopTime StockTimeScale AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Visual Basic the tradingDay array is initialized with the stock trading dates the stockPrice array is initialized with stock price data Dim Datasetl As TimeSimpleDataset _ New TimeSimpleDataset First tradingDay stockPrice Dim startTime As Long 9 60 30 60 1000 msecs cooresponding to 9 30 AM Dim stopTime As Long 16 60 60 1000 msecs cooresponding to 4 00 PM Dim stockTimeScale As TimeCoordinates new TimeCoordinates stockTimeScale SetWeekType ChartObj WEEK 5D stockTimeScale SetScaleStartTOD startTime 137 Scaling and Coordinate Systems stockTimeScale SetScaleStopTOD stopTime stockTimeScale AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Class ElapsedTimeCoord
435. neralizedTableDisplay TABLE SINGLE COLOR BACKGROUND GRIDCELL datasetviewer UseStripedGridBackground True datasetviewer RowHeaderFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal datasetviewer ColumnHeaderFont New ChartFont Microsoft Sans Serif 10 FontStyles Normal datasetviewer GridCellFont New ChartFont Microsoft Sans Serif 9 FontStyles Normal datasetviewer SyncChart True Group DatasetViewer example extracted from the example program NewDemosRev2 GroupDatasetViewer A DatasetViewer displaying a TimeGroupDataset display open high low close data TabItem Header GroupDatasetViewerChart Name tabItem6 IsSelected True Grid lt Grid RowDefinitions gt lt RowDefinition Height 5 gt lt RowDefinition Height 2 gt lt Grid RowDefinitions gt lt my ChartView Grid Row 0 Margin 18 11 16 6 Name chartView6 gt my DatasetViewer Grid Row 1 Margin 18 11 16 6 Name datasetViewer2 gt lt Grid gt lt TabItem gt Dead 8 3110 souno s0210 Bang 825710 8260 Sze E2410 The classic stock price chart combines a open nigh low ciose piot line plot and bar pict Press and hold left mouse bution over a stock value to get detalls tor that Cata 0 1 2 3 4 5 6 7 8 5 10 11 Day 81510 8 2010 8 2310 8 24 10 amp 2510 8 26 70 8 2710 83010 amp 3110 9 0110 5 0210 5 03 10 d 25 0 265 262 268 257 252 232 240 236 234 244 24 5 25 0 266 265 270 272 284 241
436. ng QCChart2D for WPF to Create Web Applications 430 Display the Pagel asml cs behind code file It will look something like this using System using System Collections Generic using System Ling using System Text using System Windows using System Windows Controls using System Windows Data using System Windows Documents using System Windows Input using System Windows Media using System Windows Media Imaging using System Windows Navigation using System Windows Shapes namespace WpfBrowserApplicationl lt summary gt Interaction logic for Pagel xaml lt summary gt public partial class Pagel Page public Pagel InitializeComponent Add a reference to the QCChart2DWPF namespace com quinncurtis chart2dwpf in the using section of the program using com quinncurtis chart2dwpf Add a new simple class file named SimpleBars to the project Alternatively select Add Existing Item and select the file SimpleBars cs from our WPFChartBrowserApplicationl example folder If you do that make sure you change the declared namespace at the top of the file namespace WpfChartBrowserApplicationl to the one your project uses probably namespace WpfBrowserApplicationl 431 Using QCChart2D for WPF to Create Web Applications Add New Item WpfBrowserApplication 1 Templates Visual Studio installed templates E About Box d ADO NET Entity Data Model Application Conf
437. ng the supplied SurfaceFunction class evaluated for the range x1 y1 to x2 y2 at intervals equal to x2 x1 columns for the x direction and y2 yl1 rows in the y direction This forms a regular grid surface Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal rows As Integer _ ByVal columns As Integer _ ByVal x1 As Double _ ByVal yl As Double _ ByVal x2 As Double ByVal y2 As Double _ ByVal sf As SurfaceFunction Ct public ContourDataset string sname int rows int columns double xl double yl double x2 double y2 SurfaceFunction sf LE The next constructor creates a dataset using the x y and z values stored in a file that uses the CSV Comma Separated Value format There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the x values and the second and third columns the y and z values If you use the ROW MAJOR format the first row represents the x values and the second and third row the y and z values Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation 87 Chart Datasets Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ C public ContourDataset CSV csv string filename int rowskip int columnskip sname Specifies the n
438. nified state The target chart displays the chart in the magnified state The mouse positions a MagniView rectangle within the source chart and the target chart is re scaled and redrawn to match the extents of the MagniView rectangle from the source chart This class extends the MouseListener class and it can move the coordinate system of the underlying chart analogous to moving chaging the coordinates of an internet map by grabbing it with the mouse and dragging it This class is used by the ChartView class to support multiple mouse listeners at the same time File and Printer Rendering Classes ChartPrint BufferedImage ChartPrint This class implements printing using the WPF System Printing print related services It can select setup and output a chart to a printer 65 Class Architecture BufferedImage This class will convert a ChartView object to a System Windows Control Image object Optionally the class saves the buffered image to an image file Miscellaneous Utility Classes ChartCalendar CSV Dimension Point2D GroupPoint2D DoubleArray DoubleArray2D BoolArray Point3D NearestPointData TickMark Polysurface Rectangle2D ChartCalendar CSV Dimension Point2D GroupPoint2D DoubleArray DoubleArray2D This class contains utility routines used to process ChartCalendar date objects This is a utility class for reading and writing CSV Comma Separated Values files This is a utility cla
439. ning starts at 1 not 0 If 0 was used the first data point would exactly on the edge of the clipping window and this would cut off half of a bar scatter plot candlestick or OHLC symbol positioned in the first position The default auto scaling values scale the ChartCoordinates scale from 0 to N 1 where N is then number of unique ChartEvent Positon values This way ChartEvent objects are not cut off on the left or the right There is a specialized axis class EventAxis and axis labels class EventAxisLabels to use with event data Unlike our regular LinearAxis and TimeAxis classes which are independent of the 151 Scaling and Coordinate Systems data in the chart the EventAxis is dependent on the underlying data The tick marks of the EventAxis are placed at the x position of the associated ChartEvent objects If there are more than 10 20 ChartEvent objects in the graph the tick mark labels would start to overlap so we divide the tick marks into major tick marks which are those that get a label and minor tick marks which do not get a label Further if there are more than 100 200 ChartEvent objects in the graph then the tick marks may start to overlap So the software has the option of drawing a minor or a major tick mark every Nth event to keep them from overlapping Most of this is taken care of by the auto axis routines Though it is possible you do not like the results you can t please everybody So once the axis is created yo
440. nsform2 AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR pTransform2 SetTimeScaleStart New ChartCalendar 1997 ChartObj JANUARY 1 pTransform2 SetTimeScaleStop New ChartCalendar 2003 ChartObj JANUARY 1 pTransform2 SetGraphBorderDiagonal 0 55 0 1 0 95 0 75 pTransform2 SetScaleStartY 0 Define axes axes labels and grids Dim thePlot2 As New StackedBarPlot pTransform2 Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj YEAR 0 75 0 0 _ attribArray ChartObj JUSTIFY CENTER Dim bardatavalue As NumericLabel thePlot2 GetPlotLabelTemplate Simple Plot Objects 302 bardatavalue SetTextFont theFont bardatavalue SetNumericFormat ChartObj CURRENCYFORMAT bardatavalue SetDecimalPos 1 bardatavalue SetColor Colors Black thePlot2 SetPlotLabelTemplate bardatavalue thePlot2 SetBarDatapointLabelPosition ChartObj CENTERED BAR thePlot2 SetShowDatapointValue True chartVu AddChartObject thePlot2 Stacked Line Plots Class StackedLinePlot GraphObj ChartPlot GroupPlot StackedLinePlot The StackedLinePlot class extends the GroupPlot class and displays data in stacked line format In a stacked line plot each group is stacked on top of one another each group line a cumulative sum of the groups before it StackedLinePlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As GroupDataset _ ByVal attribs
441. nt number but is never less considered invalid by the user Often when data is outside of a predetermined range it is invalid Mark a data value in a dataset invalid using the ChartDataset SetValidData method If a data value equals Double MAX VALUE it is also considered invalid Taking the logarithm of 0 or a negative number If a charting package is capable of logarithmic and semi logarithmic plotting it must be protected against the error condition of taking the log of any number lt 0 0 This often happens when a chart is initially setup with a linear scale with a minimum physical coordinate value of 0 0 and a maximum coordinate value equal to some large number The user changes to a logarithmic scale but forgets to change the minimum coordinate value of the scale from 0 0 to some positive non zero number The coordinate conversion routines will halt the first time the log 0 0 is in a calculation The same is also true if the minimum coordinate value is any negative number This software always checks for this condition and changes the minimum Scaling and Coordinate Systems 116 coordinate value using the following criteria If the minimum coordinate value for a logarithmic scale is less than or equal to 0 0 it is assumed that the user made an error and coordinate value is set to 1 0 If the minimum coordinate value is greater than 0 0 but less than the value of MIN LOG VALUE the minimum coordinate value is set to MIN LOG VALUE Posit
442. nteger ChartObj AXIS CENTER polarAxes SetPolarAxesTicks axestickspace axesntickspermajor angletickspace anglentickspermajor minorticlength majorticlength tickdir Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes Antenna Axes Antenna axes provide the visual scale needed to compare data values that use antenna coordinates An antenna axis consists of two parts The first part is a linear y axis extending from Axes 212 the origin to the outer edge of the radial scale The second part of an antenna axis is a circle with a radius equal to the range of the radial scale centered on the origin Class AntennaAxes GraphObj Axis LinearAxis AntennaAxes The AntennaAxes class creates an antenna axes object that combines a linear y axis for measurement of the radial values and a circular axis for the measurement of the angular values The AntennaAxes class extends the LinearAxis class This is useful because the LinearAxis already has member variables that define properties and draw the tick marks for the circular axis Antenna Axis Minimum and Maximum Antenna axes use two scaling values a minimum and maximum radius value The radius minimum value is set at the origin of the coordinate system and the radius maximum value at the outer edge The radius starting and ending values
443. ntenna Charts 352 Cf public PolarScatterPlot PolarCoordinates transform SimpleDataset dataset int symtype ChartAttribute attrib LE transform The coordinate system for the new PolarScatterPlot object dataset The polar scatter plot represents the polar coordinate values in this dataset The x values of the dataset represent the magnitudes of the points and the y values the polar angles in radians symtype The symbol used in the scatter plot Use one of the scatter plot symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR CIRCLE attrib Specifies the attributes size line and fill color for the scatter plot See previous example for a programming example using PolarScatterPlot Antenna Plots Class AntennaLinePlot GraphObj ChartPlot AntennaPlot AntennaLinePlot The AntennaLinePlot class is a concrete implementation of the AntennaPlot class and displays data in a simple line plot format The lines drawn between adjacent data points use antenna coordinate interpolation AntennaLinePlot constructor Visual Basic Overloads Public Sub New ByVal transform As AntennaCoordinates _ ByVal dataset As SimpleDataset _ 353 Polar and Antenna Charts ByVal attrib As ChartAttribute Ct public AntennaLinePlot AntennaCoordinates transform SimpleDataset dataset ChartAttribute attrib transform The coordinate system for the new AntennaL
444. nvokeTextDialog ChartText textobj currentObj ChooseFont Click textobj public void InvokeLineDialog GraphObj graphobj currentObj LineEdit Click graphobj public override void OnMouseDown MouseButtonEventArgs mouseevent base OnMouseDown mouseevent GraphObj selectedObj GetSelectedObject if selectedObj null Check for a specific object if selectedObj currentObj xAxis selectedObj currentObj yAxis or check for for all classes inheriting from a specific type ChartSupport IsKindOf selectedObj SimpleLinePlot or Check for a specific object type ChartSupport IsType selectedObj com quinncurtis chart2dwpf ChartGrid InvokeLineDialog selectedObj else if ChartSupport IsKindOf selectedObj ChartText InvokeTextDialog ChartText selectedObj this GetChartObjComponent UpdateDraw Visual Basic Public Class LinePlot Inherits EditChartExample UserChartControll Public xAxis As TimeAxis Public yAxis As LinearAxis FAQs 452 Class CustomFindObj Inherits FindObj Dim currentObj As LINEPLOT Public Sub New ByVal component As ChartView MyBase New component currentObj component End Sub New Sub InvokeLineDialog ByVal graphobj As GraphObj Dim linedialog As EditLineDialog linedialog New EditLineDialog graphobj If linedialog ShowDialog Me GetChartObjComponent _ DialogResult OK Then selectedObj SetColor linedia
445. ny of the coordinate systems Rotate and justify the text vertically and horizontally NumericLabel constructors Visual Basic Overloads Public Sub New ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont _ ByVal initialvaluel As Double _ ByVal x As Double ByVal y As Double _ ByVal npostype As Integer _ ByVal nnumformat As Integer _ ByVal ndecimal As Integer _ Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont _ ByVal initialvaluel As Double _ ByVal x As Double _ ByVal y As Double _ ByVal npostype As Integer _ ByVal nnumformat As Integer _ ByVal ndecimal As Integer _ ByVal xjust As Integer _ ByVal yjust As Integer _ ByVal rotation As Double Ct public NumericLabel LE PhysicalCoordinates transform ChartFont tfont double initialvaluel double x double y int npostype int nnumformat int ndecimal public NumericLabel PhysicalCoordinates transform ChartFont tfont double initialvaluel double x double y int npostype int nnumformat int ndecimal int st int wiet double rotation H transform tfont initialvalue X y Places the text in the coordinate system defined by transform A reference to a ChartFont object The initial value of the numeric label Specifies the x value of the text position Specifies the y value of the text position T
446. oating Bar Plots Class FloatingBarPlot Simple Plot Objects 282 GraphObj ChartPlot GroupPlot t FloatingBarPlot The FloatingBarPlot class extends the GroupBarPlot class and displays floating bar plots The bars are free floating because each bar does not reference a fixed base value as do the simple bar plots stacked bar plots and group bar plots The number of groups must be two The X Y 0 values of the group dataset represent the starting points of each bar the X Y 1 values of the group dataset represent the ending points of each bar All bars in a given FloatingBarPlot object have the same width FloatingBarPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal rbarwidth As Double _ ByVal attrib As ChartAttribute _ ByVal nbarjust As Integer _ Ct public FloatingBarPlot PhysicalCoordinates transform GroupDataset dataset double rbarwidth ChartAttribute attrib int nbarjust Ke transform The coordinate system for the new FloatingBarPlot object dataset The floating bar plot represents the values in this group dataset The number of groups must be two The X Y 0 values of the group dataset represent the starting points of each bar the X Y 1 values of the group dataset represent the ending points of each bar rbarwidth The width of the floating bars in units of the independent axi
447. ober 23 2000 A day can also have a custom range for example a range of 9 30 AM to 4 00 PM The chart time axis excludes time outside of this range This makes the class very useful for the inter day display of financial market information stock bonds commodities options etc across several days months or years T T T T T T T j T T T T T T T T T T T T T ElapsedTimeAxis 8 00 00 16 00 00 1D 0 00 00 The elapsed time axis is very similar to the linear axis and is subclassed from that class The main difference is the major and minor tick mark spacing calculated by the CalcAutoAxis method takes into account the base 60 of seconds per minute and minutes per hour and the base 24 of hours per day It is a continuous linear scale 41 Class Architecture 7 0312 EventAxis PolarAxes 7 05 12 7 06 12 7 09 12 710 12 71 12 The event axis is a hybrid of the a time axis and the linear axis It places major and minor tick marks on the axis based on the event data attached to the coordinate system Every ChartEvent object in the coordinate system does not necessarily have a tick mark because where the data values are bunched together this would create too many tick marks and they would overlap Every tick mark though will have at least one ChartEvent object associated with it In the case where multiple plots have ChartEvent objects with the same time stamp a tick mark can have multiple ChartEvent objects associated wit
448. of our other examples use 419 Using QCChart2D for WPF to Create Windows Applications O namespaces throughout the project largely because they were translated directly from the C examples and all of the C examples use namespaces The XAML portion of the project looks like lt Window x Class Window1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Window1 Height 300 Width 300 gt lt Grid gt lt Grid gt lt Window gt The window does not yet have any content First define a default size for the window and add a reference to the QCChart2D namespace In this case the namespace is com quinncurtis chart2dwpf and it is located in the assembly DLL with the name QCChart2DWPF3 So add the following line under the other xmlns namespace tags Title Windowl Height 631 Width 878 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 This line needs to be resolved by adding a reference to the QCChart2DWPF3 library to the project Right click on Reference in the Solution Explorer window and select Add Reference Browse to the Quinn Curtis DotNet lib subdirectory and select the QCChart2DWPF3 DLL Using QCChart2D for WPF to Create Windows Applications 420 Add Reference NET COM Projects Browse Recent Look in ib 5 Chart2DWPF 2 dil 5 QCMatViewNet dl 55 Chart2DWPF 3 dll X QCRTGraphNet
449. oint When the mouse button is released the MouseUp event the tooltip popup window is deleted The tooltip data point search algorithm is complicated by the situation that many chart objects occupy a much larger area than the data point that is represented Bars are a good example A bar can occupy a large area yet the actual data value represented by the bar is only a small point at the top The tooltip algorithm searches for an intersection of the bar and the mouse cursor not an intersection of the data point and the mouse cursor If a hit on the bar is detected the data values represented by the bar are used as the values displayed in the tooltip The tooltip symbol will highlight the actual data point at the top of the bar The tooltip window will always popup at the cursor location not the data point location If you click anywhere on a bar the tooltip window will popup at that location and display the data value represented by the top of the bar The tooltip data point search algorithm works with both simple and group data When used with simple plot objects SimpleLinePlot SimpleBarPlot etc it locates the xy data point associated with the mouse event When used with group plot objects it locates Data ToolTips 336 the x value and the y group value associated with the mouse event It is able to differentiate between stacked group plot objects StackedBarPlot StackedLinePlot and the other group plot objects that are not stacked
450. olarTransform ChartObj GRAPH BACKGROUND Colors White hartVu AddChartObject background Q PolarTransform AutoScale Dataset1 olarAxes pPolarAxis pPolarTransform GetCompatibleAxes chartVu AddChartObject pPolarAxis O O PolarGrid pPolarGrid new PolarGrid pPolarAxis PolarGrid GRID MAJOR chartVu AddChartObject pPolarGrid PolarAxesLabels pPolarAxisLabels PolarAxesLabels pPolarAxis GetCompatibleAxesLabels chartVu AddChartObject pPolarAxisLabels ChartAttribute attribl new ChartAttribute Colors Blue 2 0 PolarLinePlot thePlotl new PolarLinePlot pPolarTransform Datasetl attribl chartVu AddChartObject thePlot1 ChartAttribute attrib2 new ChartAttribute Colors Red 1 0 Colors Red ttrib2 SetFillFl g true PolarScatterPlot thePlot2 new PolarScatterPlot pPolarTransform Datasetl ChartObj CIRCLE attrib2 chartVu AddChartObject thePlot2 w Visual Basic Dim nump1 As Integer 100 Dim magl numpl 1 As Double Dim angl numpl 1 As Double Dim i As Integer For i 0 To numpl 1 ngl i e Cha rtoupport ToBadians CDbl i 360 0 Z CDbl numpl nagl i r e Math Abs 30 Matn Sin 2 angl i1 Math Cost 2 a amp sgl 1 2 Next i 351 Polar and Antenna Charts theFont chartVu New ChartFont SansSerif 10 FontStyles Normal FontWeights Bold Me Dim Datasetl As New SimpleDataset First magl angl Dim pPolarTransform As New PolarCo
451. olution If the project fails to compile you need to go back and check the errors and the previous steps When it runs properly it the SimpleBars chart looks like WpfChartBrowserApplication1 xbap application x ms xbap Object Mozilla Firefox File Edit View History Bookmarks Tools Help wb oo QB G 3 d fle E Quinn Curtis WPF Development DotNet QCChart2D Visual CSharp examples wpf WpfChe 7 S Coosle Bj Most Visited Getting Started Latest Headlines WpfChartBrowserApplicationlxbap 26 Frequently Asked Questions FAQs 1 Is the QCChart2D for WPF software backward compatible with the Net Forms version of QCChart2D 2 How do you create a chart with multiple coordinate systems and axes 3 Can I add new axes text objects plot objects and images to a chart after it is already displayed or must I create a new chart from scratch taking into account the additional objects 4 How do you zoom charts that use multiple coordinate systems 5 How do you select a chart object and create a dialog panel that permits editing of that objects properties 6 How do you handle missing data points in a chart 7 How do you update a chart in real time 8 How do I prevent flicker when updating my charts on real time 9 How do you implement drill down or data tool tips in a chart 10 I do not want to my graph to auto scale How do I setup the graph axes for a specific range 11 How do I u
452. oordinates minvalue maxvalue AntennaAxes antennaAxes new AntennaAxes antennascale Add the Antenna axes to the chartVu object chartVu AddChartObject antennaAxes Visual Basic Dim minvalue As Double 40 Dim maxvalue As Double 20 Dim antennascale As AntennaCoordinates _ New AntennaCoordinates minvalue maxvalue Dim antennaAxes As AntennaAxes New AntennaAxes antennascale Add the Antenna axes to the chartVu object chartVu AddChartObject antennaAxes Custom antenna axes example double minvalue 40 maxvalue 20 AntennaCoordinates antennascale new AntennaCoordinates minvalue maxvalue AntennaAxes antennaAxes new AntennaAxes antennascale double axestickspace 1 int axesntickspermajor 5 double angletickspace 5 int anglentickspermajor 6 double minorticlength 5 double majorticlength 10 int tickdir ChartObj AXIS CENTER antennaAxes SetAntennaAxesTicks axestickspace axesntickspermajor angletickspace anglentickspermajor minorticlength majorticlength tickdir Add the Antenna axes to the chartVu object chartVu AddChartObject antennaAxes Visual Basic Dim minvalue As Double 40 215 Axes Dim maxvalue As Double 20 Dim antennascale As AntennaCoordinates _ New AntennaCoordinates minvalue maxvalue Dim antennaAxes As AntennaAxes New AntennaAxes antennascale Dim axestickspace As Double 1 Dim axesntickspermajor As Integer 5 Dim anglet
453. operty to specify the aspect ratio correction mode ZOOM NO AR CORRECTION Allow the x and y dimension of the zoom rectangle to change the overall charts physical aspect ratio This is the default mode and the only mode supported prior to Revision 2 0 ZOOM X AR CORRECTION Track the x dimension of the zoom rectangle and calculate the y dimension in order to maintain a fixed aspect ratio ZOOM Y AR CORRECTION Track the y dimension of the zoom rectangle and calculate the x dimension in order to maintain a fixed aspect ratio The target aspect ratio is the aspect ratio of the coordinate system s at the time the ChartZoom object is intitialized zoomObj ArCorrectionMode ChartObj ZOOM X AR CORRECTION Simple zoom example Adapted from the SimpleZoom example In this example a new class derives from the ChartZoom class and the MousePressed event overridden The event invokes the PopZoomStack method Otherwise the default operation of the ChartZoom class controls everything else C ChartZoom zoomObj new ChartZoom chartVu pTransforml true zoomObj SetButtonMask MouseButton Left zoomObj SetZoomYEnable true zoomObj SetZzoomXEnable true zoomObj SetZoomXRoundMode ChartObj AUTOAXES FAR zoomObj SetZoomYRoundMode ChartObj AUTOAXES FAR zoomObj SetEnable true zoomObj SetZzoomStackEnable true set range limits to 1000 ms 1 degree zoomObj SetZoomRangeLimitsRatio new Dimension 1 0 zoomObj InternalZoomStackProc
454. or SetSegmentLineColor and SetSegmentColors Stacked bar plot example extracted from the example program Bargraphs class GroupBargraphs C TimeCoordinates pTransform2 new TimeCoordinates User same dataset as Group bar plot set stacked mode flag Dataset1 SetStackMode ChartObj AUTOAXES STACKED pTransform2 AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR pTransform2 SetTimeScaleStart new ChartCalendar 1997 ChartObj JANUARY 1 pTransform2 SetTimeScaleStop new ChartCalendar 2003 ChartObj JANUARY 1 pTransform2 SetGraphBorderDiagonal 0 55 1 95 0 75 pTransform2 SetScaleStartY 0 Define axes axes labels and grids StackedBarPlot thePlot2 new StackedBarPlot pTransform2 Datasetl ChartCalendar GetCalendarWidthValue ChartObj YEAR 0 75 0 0 attribArray ChartObj JUSTIFY CENTER NumericLabel bardatavalue thePlot2 GetPlotLabelTemplate bardatavalue SetTextFont theFont bardatavalue SetNumericFormat Char LOR CURRENCYFORMAT bardatavalue SetDecimalPos 1 bardatavalue SetColor Colors Black thePlot2 SetPlotLabelTemplate bardatavalue thePlot2 SetBarDatapointLabelPosition ChartObj CENTERED BAR thePlot2 SetShowDatapointValue true chartVu AddChartObject thePlot2 Visual Basic Stacked Bar Graph Dim pTransform2 As New TimeCoordinates User same dataset as Group bar plot set stacked mode flag Datasetl SetStackMode ChartObj AUTOAXES STACKED pTra
455. or and postion This class is a concrete implementation of the GroupPlot class and displays cell plots A cell plot is a collection of rectangular objects with independent positions widths and heights specified using the values of the associated group dataset This class is a concrete implementation of the GroupPlot class and displays error bars Error bars are two lines positioned about a data point that signify the statistical error associated with the data point 49 Class Architecture Media Schedule WSJ DSP Journal D S E L EDN PC Mag Computer Week FloatingBarPlot Price 35 30 1 r S 7 TB o 25 Info Age 2003 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2004 Year of 2003 Floating bars are useful for creating scheduling charts This class is a concrete implementation of the GroupPlot class and displays free floating bars in a graph The bars are free floating because each bar does not reference a fixed base value as do simple bar plots stacked bar plots and group bar plots Daily Stock Price NASDAQ TTT oo E T T 1 05 09 FloatingStackedBarPlot mu ns i 1128 09 2102109 This class is a concrete implementation of the GroupPlot class and displays free floating stacked bars The bars are free floating because each bar does not reference a fixed base value as do simple bar plots stacked bar plots and group bar plots GroupBarPlot StackedB
456. or j 0 To ncols 1 pointarray count New Point3D tempx x 1 75 ChartSupport GetRandomDouble 0 5 tempy y 1 75 ChartSupport GetRandomDouble 0 5 z 2000 950 Math Sin Math Sqrt tempx tempx tempy tempy pointarray count SetLocation tempx tempy z x stepx 69 Chart Datasets count 1 Next j y stepy Next i datasetl New ContourDataset Contour Dataset pointarray This method uses the characteristic that the data is an even spaced grid Dim dataset2 As ContourDataset _ New ContourDataset Contour Dataset pointarray nrows ncols Example of creating a contour dataset from a function C ContourDataset datasetl null class ZValueFunctionClass SurfaceFunction public override double CalcZValue double x double y double z x x 1 75 ChartSupport GetRandomDouble 0 5 yy 1 75 ChartSupport GetRandomDouble 0 5 z 1500 1500 0 Math Sin Math Sqgrt x xt y y return z void CreateRegularGridPolysurface ZValueFunctionClass zValueFunction new ZValueFunctionClass datasetl new ContourDataset Contour ChartDataset 11 11 6 0 96 0 6 0 6 0 zValueFunction Visual Basic Class ZValueFunctionClass Inherits SurfaceFunction Public Overrides Function CalcZValue ByVal x As Double ByVal y As Double As Double Dim z As Double x x 0 5 ChartSupport GetRandomDouble 0 5 y yt0 5 ChartSupport GetRando
457. ordinates pPolarTransform SetGraphBorderDiagonal 0 25 0 2 0 75 0 8 Dim background As New Background pPolarTransform ChartObj GRAPH BACKGROUND Colors White chartVu AddChartObject background pPolarTransform AutoScale Datasetl Dim pPolarAxis As PolarAxes pPolarTransform GetCompatibleAxes hartVu AddChartObject pPolarAxis je Dim pPolarGrid As New PolarGrid pPolarAxis PolarGrid GRID MAJOR hartVu AddChartObject pPolarGrid Q Dim pPolarAxisLabels As PolarAxesLabels _ CType pPolarAxis GetCompatibleAxesLabels PolarAxesLabels chartVu AddChartObject pPolarAxisLabels Dim attribl As New ChartAttribute Colors Blue 2 0 Dim thePlotl As New PolarLinePlot pPolarTransform Datasetl attribl hartVu AddChartObject thePlotl Q Dim attrib2 As New ChartAttribute Colors Red 1 0 Colors Red attrib2 SetFillFlag True Dim thePlot2 As New PolarScatterPlot pPolarTransform Datasetl ChartObj CIRCLE ttrib2 chartVu AddChartObject thePlot2 Class PolarScatterPlot GraphObj ChartPlot PolarPlot PolarScatterPlot The PolarScatterPlot class is a concrete implementation of the PolarPlot class and displays data in a simple scatter plot format PolarScatterPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PolarCoordinates ByVal dataset As SimpleDataset ByVal symtype As Integer _ ByVal attrib As ChartAttribute Polar and A
458. orldCoordinates This class derives from the UserCoordinates class and maps a device independent world coordinate system on top of the Net device coordinate system WorkingCoordinates This class derives from the WorldCoordinates class and extends the physical coordinate system of the plot area the area typically bounded by the charts axes to include the complete graph area the area of the chart outside of the plot area PhysicalCoordinates This class is an abstract base class derived from WorkingCoordinates and defines the routines needed to map the physical coordinate system of a plot area into a working coordinate system Different scale objects ChartScale derived are installed for converting physical x and y coordinate values into working coordinate values Cartesian Coordinates TimeCoordinates ElapsedTimeCoordinates PolarCoordinates AntennaCoordinates EventCoordinates Attribute Class ChartAttribute ChartGradient Class Architecture 34 This class is a concrete implementation of the PhysicalCoordinates class and implements a coordinate system used to plot linear logarithmic and semi logarithmic graphs This class is a concrete implementation of the PhysicalCoordinates class and implements a coordinate system used to plot GregorianCalenar time based data This class is a subclass of the CartesianCoordinates class and implements a coordinate system used to plot elapsed time data This class is a subclass of
459. orm SimpleDataset dataset int symtype ChartAttribute attrib transform The coordinate system for the new SimpleScatterPlot object dataset The scatter plot represents the values in this dataset symtype The symbol used in the scatter plot Use one of the scatter plot symbol constants NOSYMBOL SQUARE TRIANGLE DIAMOND CROSS PLUS STAR LINE HBAR VBAR CIRCLE attrib Specifies the attributes size line and fill color for the scatter plot A ChartAttribute object sets the objects global outline and fill attributes Change the simple plot objects ChartAttribute object using the objects SetChartObjAttributes method For a simple color change of the scatter plot symbol use the scatter plot objects SetColor method Should you need additional symbols create your own Any PathGeometry object can be used as a symbol The coordinates of the symbol should assume that 1 0 is the standard symbol size with a symbol center at the relative coordinates 0 5 0 5 The example below demonstrates how to create a diamond symbol public PathGeometry GetDiamondShape PathGeometry result ChartSupport NewPath result Figures 0 StartPoint new Point 0 5 ChartSupport AddPointToPath result new Point ChartSupport AddPointToPath result new Point ChartSupport AddPointToPath result new Point ChartSupport AddPointToPath result new Point 0 58 5 Dy cy he oom EH H EN oF a C result Figures 0 IsClosed true
460. orml As New EventCoordinates Datasetl pTransforml SetScaleStartY 0 pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 8 Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 30 70 70 Color FromRgb 90 20 155 ChartObj Y AXIS chartVu AddChartObject background Dim xAxis As New EventAxis pTransforml EventAxis TICK RULE MAJOREVENT ChartObj X AXIS 239 Axis Labels xAxis SetColor Colors White chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS yAxis SetColor Colors White chartVu AddChartObject yAxis Dim xAxisLab As New EventAxisLabels xAxis xAxisLab SetAxisLabelsFormat ChartObj TIMEDATEFORMAT Y2000 xAxisLab SetColor Colors White chartVu AddChartObject xAxisLab Custom time axis labels example ChartFont labelfont new ChartFont Helvetica 10 FontStyles Normal double xAxisLabelsRotation 0 0 int xAxisLabelsDir ChartObj AXIS MIN int xAxisLabelsEnds ChartObj LABEL ALL Color xAxisLabelsColor Color Black int xAxisNumericFormat ChartObj TIMEDATEFORMAT MY xAxisLabels SetAxisLabels labelfont xAxisLabelsRotation xAxisLabelsDir xAxisLabelsEnds xAxisLabelsColor xAxisLabels SetAxisLabelsFormat xAxisNumericFormat Visual Basic Dim labelfont As ChartFont New ChartFont Helvetica 10 FontStyles Normal Dim xAxisLabelsRotation As Double 0 0 Dim xAxisLabelsDir As Integer ChartObj AXIS MIN Dim xAxi
461. ors GRADIENT MAPTO OBJECT applied to a simple bar graph CBirtormt 0 x SimpleBars DoubleBarPlot GroupBargraphs HistogramBars FloatingBars FloatingBars2 BostonClimate Japariworkforce LandOfTheFry NasaSpending MedicareDrugCosts Production of Green Bars is Up v o c 2 z 1999 2000 2001 2002 2003 2004 2005 Bar plots can have the values of the bars displayed above or inside each bar Note how in this example each bar displays the full range of colors red orange yellow and white regardless of the bar height GRADIENT MAPTO PLOT PHYSICAL COORDINATES In this mapping mode the breakpoints are expected to be in the range of the physical coordinate system of the plot area of the chart If the y scale of the coordinate system has been scaled for 0 50 000 then the breakpoints are expected to be in the range of 0 50 000 This allows for the most interesting gradient effects If you define your gradient breakpoints as extending from 0 50 000 and you plot a bar that is only 10 000 high only the lower 209 of the gradient will be visible This way you can have bars change color as they increase in value The best analogy would be if you were plotting temperature in a bar graph As the temperature increases and the height of the bar the bar would display as a color gradient The color gradient would transition from a dull red color through orange yellow and finally white representing the highest color bre
462. oser As New SaveFileDialog imagefilechooser Filter Image Files BMP JPG GIF TIFF PNG d BME Eer GIF TIFF ENGL EL files w imagefilechooser FileName filename Show save file dialog box Dim result As Nullable Of Boolean imagefilechooser ShowDialog If result True Then filename imagefilechooser FileName Dim fileinformation As New FileInfo filename Dim fileext As String fileinformation Extension fileext fileext ToUpper Dim imageencoder As BufferedImage ImageFormats If fileext BMP Then imageencoder BufferedImage ImageFormats Bmp ElseIf fileext JPG OrElse fileext JPEG Then imageencoder BufferedImage ImageFormats Jpg ElseIf fileext GIF Then imageencoder BufferedImage ImageFormats Gif ElseIf fileext TIF OrElse fileext TIFF Then imageencoder BufferedImage ImageFormats Tif ElseIf fileext PNG Then imageencoder BufferedImage ImageFormats Png ElseIf fileext WMP Then imageencoder BufferedImage ImageFormats Wmp Else imageencoder BufferedImage ImageFormats Jpg End If Dim bufimage As New BufferedImage gridl imageencoder bufimage Savelmage filename End If End Sub Image Rendering of Charts You may want to create a chart bitmap image without actually placing the image in an XAML form First since the ChartView component of your chart is not added to a form size information is not assigned to it by the V
463. ouble x double y sname Specifies the name of the dataset x An array that specifies the x values of a dataset y An array that specifies the y values of a dataset The length of the y array must match the length of the x array Chart Datasets 76 The number of data points is the value of x Length property The x and y arrays must be the same length and every element must be initialized to a valid value All values in the arrays are plotted If the data is outside of the current chart scale the values will be clipped The next constructor creates a dataset using the x and y values stored in a file that uses the CSV Comma Separated Value format There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the x values and the second column the y values If you use the ROW_MAJOR format the first row represents the x values and the second row the y values Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ Ct public SimpleDataset CSV csv string filename int rowskip int columnskip CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip thi
464. out dataset as a CSV file under a different file name Datasetl WriteGroupDataset csvDataFile GroupDataset2 csv Date Time Group Dataset Class TimeGroupDataset ChartObj ChartDataset GroupDataset TimeGroupDataset The TimeGroupDataset uses ChartCalendar dates as the x values and floating point numbers as the y values ChartCalendar values are actually stored internally as their equivalent millisecond values The TimeGroupDataset class adds a large number of methods to the GroupDataset class that make it easy to create and modify datasets that use ChartCalendar values Note Do not use the TimeGroupDataset if you want to display data using the elapsed time The TimeGroupDataset uses a full GregorianCalendar date time and it is not suitable for the display of elapsed time since time intervals do not have an explicit date i e 10 11 2008 Use the ElapsedTimeGroupDataset class in combination with an ElapsedTimeCoordinateSystem if you plan to create an elapsed time chart This constructor creates a new group TimeGroupDataset object where the x values are ChartCalendar values and the y values are floating point numbers TimeGroupDataset constructors Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As ChartCalendar 101 Chart Datasets ByVal y As Double Ct public TimeGroupDataset string sname ChartCalendar x double y sname Specifies the name of the d
465. ow plot is under program control ArrowPlot This class is a concrete implementation of the GroupPlot class and it displays a collection of arrows as defined by the data in a group dataset The position size and rotation of each arrow in the collection is independently controlled 47 Class Architecture BubblePlot This class is a concrete implementation of the GroupPlot class and displays bubble plots The values in the dataset specify the position and size of each bubble in a bubble chart Box and Whisker Plots are used in Descriptive Statistics New York Houston SanFrancisco Boston Pittsburgh BoxWhiskerPlot This class is a concrete implementation of the GroupPlot class and displays box and whisker plots The BoxWhiskerPlot class graphically depicts groups of numerical data through their five number summaries the smallest observation lower quartile Q1 median Q2 upper quartile Q3 and largest observation CandlestickPlot CellPlot ErrorBarPlot Distance from Closest Walmart Miles Class Architecture 48 Technical Analysis Uses Candlestick Plots The Open Close box is filled if the open price is greater than the close price This class is a concrete implementation of the GroupPlot class and displays stock market data in an open high low close format common in financial technical analysis Cell Plot of Population Density Mean Family Income 1000 The Cell plot will plot rectangles of any size col
466. pTransforml SetScaleStartX 0 pTransforml SetScaleStartY 0 Dim background As New Background pTransform Color FromRgb 255 255 255 chartVu AddChartObject background pTransforml SetGraphBorderDiagonal 0 15 0 Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Blu attribl SetFillFlag True attribl SetLineFlag False Dim attribArray numGroups As ChartAttribute For i 0 To numGroups 1 attribArray i attribl Clone Next i attribArray 0 SetFillColor Colors Blue attribArray 1 SetFillColor Colors Yellow attribArray 2 SetFillColor Colors Magenta attribArray 3 SetFillColor Colors Orange attribArray 4 SetFillColor Colors Gray attribArray 5 SetFillColor Colors Red attribArray 6 SetFillColor Colors Green Dim thePlotl As New StackedLinePlot pTransfo chartVu AddChartObject thePlotl Simple Plot Objects 304 yl KED ChartObj LINEAR SCALE ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR ChartObj PLOT BACKGROUND By 0 9 D 75 e 1 rml Datasetl DashStyles Solid attribArray 12 Contour Plotting ChartPlot ContourPlot The ContourPlot class displays contour data organized in a ContourDataset dataset The line contour graph draws contituous lines through the data at xy values representing equal values of z analogous to the equal pressure lines isobars of a weather map A filled contor graph fills the area between two conto
467. parentGreen profltAttrib SetFillFlag true lossAttrib SetFillFlag true profitAttrib SetLineFlag false lossAttrib SetLineFlag false Must call the linePlot or similar function before setting segment attributes so that it know size of segment buffer to allocate thePlot3 new SimpleLinePlot pTransforml Dataset3 profitAttrib double yValues Dataset3 GetYData thePlot3 SetSegmentAttributesMode true for i90 i lt Dataset3 GetNumberDatapoints i rt et ct ct if yValues i gt 0 0 thePlot3 SetSegmentAttributes i profitAttrib else thePlot3 SetSegmentAttributes i lossAttrib chartVu AddChartObject thePlot3 Simple Plot Objects 254 Visual Basic Dim DatasetArray As TimeSimpleDataset Datasetl Dataset2 Dataset3 Dim pTransforml As TimeCoordinates New TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 1 0 92 0 75 Dim background As New Background pTransforml ChartObj GRAPH BACKGROUND _ Color FromRgb 100 50 255 Color FromRgb 40 25 120 ChartObj Y AXIS chartVu AddChartObject background Dim plotbackground As New Background pTransforml _ ChartObj PLOT BACKGROUND Colors Black chartVu AddChartObject plotbackground Define and add axes axes labels and grids to the chart Dim attribl As New ChartAttribute Colors Blue 3 DashStyles Solid Datase
468. pdate my data and auto rescale the chart scales and axes to reflect the new data after it has already been drawn 12 When I use the auto scale and auto axis routines my semi log chart has the logarithmic axis scaled using powers of 10 1 10 100 1000 etc as the starting and ending values or as the major tick interval for labeling How do I make my log graphs start at 20 and end at 50 000 with major tick marks at 20 200 2000 and 20000 13 How do I create and use custom multi line string labels as the axis labels for my graph 14 How do I place more than one graph in a view 445 FAQs 15 How do I use your software to generate GIF files 16 Sometimes the major tick marks of an axis are missing the associated tick mark label 17 How do I change the order the chart objects are drawn For example I want one of my grid objects to be drawn under the charts line plot objects and another grid object to be drawn top of the charts line plot objects 18 How to I use a scrollbar object to control horizontal scrolling of the data in my chart 19 I am trying to plot 100 000 000 data points and it takes too long to draw the graph What is wrong with the software and what can I do to make it faster 20 How do I get data from my database into a chart 21 How do I use this charting software to generate chart images on the fly 22 Can QCChart2D for WPF be used to create programs that run like Java applets in web browsers 1
469. phical objects which use the area fill solid color ChartAttribute constructors Use the constructor below for simple line and fill attributes There are similar constructors with fewer parameters if all you want to do is set a line color or a line color with a line thickness Visual Basic Overloads Public Sub New _ ByVal rgbcolor As Color _ ByVal rlinewidth As Double _ ByVal nlinestyle As DashStyle _ ByVal rgbfillcolor As Color C public ChartAttribute Color rgbcolor double rlinewidth DashStyle nlinestyle Color rgbfillcoolor rgbcolor The primary line and text color Colors Gradients and Backgrounds 172 rlinewidth The line width for all lines nlinestyle The line style for all lines rgbfillcolor The fill color for solid objects C ChartAttribute attribl new ChartAttribute Colors Blue 3 ChartObj DashStyles Solid SimpleLinePlot thePlotl new SimpleLinePlot pTransforml Datasetl attribl thePlotl SetLineStyle DashDot chartVu AddChartObject thePlotl Visual Basic Dim attribl As New ChartAttribute Colors Blue 3 DashStyles Solid Dim thePlotl As SimpleLinePlot _ New SimpleLinePlot pTransforml Datasetl attribl thePlotl SetLineStyle DashStyles DashDot chartVu AddChartObject thePlot1 All of the ChartAttribute constructors assume you are using a solid area fill color If you want to use a gradient you need to attach a ChartGradient object to the ChartAttribute The
470. pleBarPlot GraphObj 255 Simple Plot Objects ChartPlot SimplePlot SimpleBarPlot The SimpleBarPlot class is a concrete implementation of the SimplePlot class and displays data in a bar format Individual bars the maximum value of which corresponds to the y values of the dataset display justified with respect to the x values SimpleBarPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As SimpleDataset _ ByVal barwidth As Double _ ByVal barbase As Double _ ByVal attrib As ChartAttribute ByVal barjust As Integer Ct public SimpleBarPlot PhysicalCoordinates transform SimpleDataset dataset double barwidth double barbase ChartAttribute attrib int barjust transform The coordinate system for the new SimpleBarPlot object dataset The bar plot represents the values in this dataset barwidth The width of the bars in physical coordinates barbase The base value for bars in physical coordinates attrib Specifies the attributes line color and fill color of the bars barjust Specifies the justification with respect to the independent data value Use one of the justification constants JUSTIFY MIN JUSTIFY CENTER JUSTIFY MAX A ChartAttribute object sets the objects global line color line thickness line style fill color and fill mode Change the ChartAttribute object using the objects Simple Plot Objects 256
471. plicationl A simple WPF application with a single chart WpfChartBrowserApplication1 A simple WPF browser application with a single chart WpfChartBrowserApplication2 A more complicated WPF browser application with multiple charts in a tabebed pane ZoomExamples Zooming simple linear axes super zooming of multiple axes zooming of time data based data Visual Basic VB specific code Examples wpf VB examples Same as the C example list Critical Note Running the Example Programs The example programs for QCChart2D Tools for WPF software are supplied in complete source In order to save space they have not been pre compiled which means that many of the intermediate object files needed to view the main form are not present This means that ChartView derived control will not be visible on the main Form if you attempt to view the main form before the project has been compiled The default state for all of the example projects should be the Start Page Before you do view any other file or form do a build of the project This will cause the intermediate files to be built If you attempt to view the main Form before building the project Visual Studio sometimes decides that the ChartView control placed on the main form does not exist and deletes it from the project There are two versions of the QCChart2D for WPF class library the 30 day trial versions and the developer version Each version has different characterist
472. plot is a collection of rectangular objects with independent widths and heights specified using the values of the associated group dataset The histogram bars share a common base value Sales vs Cost Gap The Line Gap chart is useful for emphasizing the difference between two lines This class is a concrete implementation of the GroupPlot class A line gap chart consists of two lines plots where a contrasting color fills the area between the two lines highlighting the difference MultiLinePlot OHLCPlot Collector Current mA Class Architecture 52 Characteristic Curves for Bipolar Transistor 10 Collector Emitter Voltage The MultLinePlot will plot a multiple y vectors vs a single x vector This class is a concrete implementation of the GroupPlot class and displays group data in multi line format A group dataset with four groups will display four separate line plots The y values for each line of the line plot represent the y values for each group of the group dataset Each line plot share the same x values of the group dataset Daily Stock Price Price Volume NASDAQ Scroll Week 7 29 02 8 05 02 8 12 02 8 19 02 Press and hold left mouse button over a stock value to get details for that date This class is a concrete implementation of the GroupPlot class and displays stock market data in an open high low close format common in financial technical analysis Every item of the plot is a vertical
473. plots The y values for each group of the dataset are the y values for each line in the plot Each line plot share the same x values of the group dataset MultiLinePlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal attribs As ChartAttribute _ C public MultiLinePlot PhysicalCoordinates transform GroupDataset dataset ChartAttribute attribs LE transform The coordinate system for the new MultiLinePlot object dataset The multi line plot represents the values in this group dataset attribs An array of ChartAttribute objects sized the same as the number of groups in the dataset t specify the attributes line color and line style for each group of the multi line plot The attributes for each group can set or modified using the SetSegment methods where the segment number parameter corresponds to the group number These methods include SetSegmentAttributes SetSegmentFillColor SetSegmentLineColor and SetSegmentColors Multi line plot example extracted from the example program MultiLinePlots class MultiLine C int numPoints 100 int numGroups 7 double x1 new double numPoints double yl new double numGroups numPoints int i j for i20 i lt numPoints i xl i double i 0 2 for j 0 j lt numGroups j yiia j i 0 01 double j l 5 0 1 0 Math Exp x1 1 0 7 7
474. proper values CartesianCoordinates constructor with explicit scaling C double xMin 5 double xMax 15 double yMin 0 double yMax 105 CartesianCoordinates simpleScale simpleScale new CartesianCoordinates xMin yMin xMax yMax Visual Basic Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleScale As CartesianCoordinates simpleScale New CartesianCoordinates xMin yMin xMax yMax Another technique uses the default constructor and scales the coordinates using the CartesianCoordinates SetCoordinateBounds method Example of explicit scaling of a CartesianCoordinates object using the CartesianCoordinates SetCoordinateBounds method C double xMin 5 double xMax 15 double yMin 0 double yMax 105 CartesianCoordinates simpleScale new CartesianCoordinates simpleScale SetCoordinateBounds xMin yMin xMax yMax Visual Basic Dim xMin As Double 5 Dim xMax As Double 15 Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleScale As CartesianCoordinates New CartesianCoordinates simpleScale SetCoordinateBounds xMin yMin xMax yMax 121 Scaling and Coordinate Systems It is possible to scale the bounds of the coordinate system based on the data values in a dataset There are constructors and methods that take a single dataset and others that take an array of datasets Example of auto scaling a CartesianCoordinates
475. psed time values in a CSV file is d hh mm ss fff 3 14 23 12 333 as an example of an elapsed time of three days 14 hours 23 minutes 12 seconds and 333 milliseconds Chart Datasets 84 You can also modify a point at a time using SetElapsedTimeXDataValue or SetElapsedTimeYDataValue if you are using TimeSpan objects and SetYDataValue or SetXDataValue if you use millisecond values If you need to add new points to the dataset increasing its size use one of the AddDataPoint or InsertDataPoint methods Delete data points using the DeleteDataPoint method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method Example of creating a simple elapsed time datasets extracted from the NewDemosRev2 ElapsedTimeChart example program C int numPoints 100 TimeSpan xl new TimeSpan numPoints double yl new double numPoints double y2 new double numPoints inb is for i20 i lt numPoints i xl i TimeSpan FromMilliseconds i 30 1000 30000 milliseconds increment Or you can use seconds and the FromSeconds method xl i TimeSpan FromSeconds i 30 30 seconds increment if Math Sin xl il TotalSeconds 20 0 gt 0 yl i 20 0 50 0 0 5 ChartSupport GetRandomDouble Math Sin xl i TotalSeconds 5 else yl i 20 0 5 0 0 5 ChartSupport GetRandomDouble Math Sin xl i TotalSeconds 2 yali ylli A ZC D 2 xl
476. r rsize As Double MyBase New achartview thetransform nmarkertype rsize thePlotl plotl thePlot2 plot2 End Sub Public Overrides Sub OnMouseUp mouseevent As MouseButtonEventArgs Dim nearestPointObj1 As New NearestPointData Dim nearestPointObj2 As New NearestPointData Dim nearestPoint As New Point2D 0 0 Dim chartview As ChartView GetChartObjComponent Dim bfoundl As Boolean False Dim bfound2 As Boolean False MyBase OnMouseUp mouseevent If GetMouseButtonPressed mouseevent GetButtonMask Then Find nearest point for each line plot object Dim location As Point2D GetLocation bfoundl thePlotl CalcNearestPoint location ChartObj FNP NORMDIST nearestPointObjl bfound2 thePlot2 CalcNearestPoint location ChartObj FNP NORMDIST nearestPointObj2 317 Data Markers and Data Cursors If bfound1 AndAlso bfound2 Then choose the nearest point If nearestPointObjl GetNearestPointMinDistance nearestPointObj2 GetNearestPointMinDistance Then nearestPoint nearestPointObjl GetNearestPoint Else nearestPoint nearestPointObj2 GetNearestPoint End If create marker object at place it at the nearest point Dim amarker As New Marker GetChartObjScale MARKER BOX nearestPoint GetX nearestPoint GetY 10 0 PHYS POS chartview AddChartObject amarker rNumericLabelCntr 1 0 Add a numeric label the identifies the marker pointLabel New NumericLabel GetChartObjScale textCoordsFont rNumericLa
477. r and minor tick 61 Class Architecture marks of the polar angle circular axis This class works in conjunction with the PolarAxes class AntennaGrid Analogous to the PolarGrid this class draws radial and circular grid lines for an Antenna chart Chart Text Classes ChartText ChartTitle AxisTitle ChartLabel NumericLabel TimeLabel StringLabel ElapsedTimeLabel The chart text classes draw one or more strings in the chart window Different classes support different numeric formats including floating point numbers date time values and multi line text strings International formats for floating point numbers and date time values are also supported Chart Text ChartTitle AxisTitle ChartLabel NumericLabel TimeLabel This class draws a string in the current chart window It is the base class for the ChartTitle AxisTitle and ChartLabel classes The ChartText class also creates independent text objects Other classes that display text also use it internally This class displays a text string as the title or footer of the chart This class displays a text string as the title for an axis The axis title position is outside of the axis label area Axis titles for y axes are rotated 90 degrees This class is the abstract base class of labels that require special formatting This class is a concrete implementation of the ChartLabel class and it displays formatted numeric values This class is a concrete implementation of t
478. r doubles or TimeSpan objects The length of the y array must match the length of the x array Either x or y values should be TimeSpan based The number of data points is the value of x Length property The x and y arrays must be the same length and every element must be initialized to a valid value All values in the arrays are plotted If the data is outside of the current chart scale the values will be clipped The next constructor creates an elapsed time dataset using the x and y values stored in a file that uses the CSV Comma Separated Value format There are two ways to organize the numeric values in the data file If you use the COLUMN MAJOR format the first column represents the time values and the second column the y values If you use the ROW MAJOR format the first row represents the time values and the second row the y values Use the CSV SetOrientation method to initialize the csv argument for the proper data orientation Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ C4 public ElapsedTimeSimpleDataset CSV csv string filename int rowskip int columnskip CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before starting this read operation The only supported format for ela
479. rageY class2Average Dataset2 GetAverageY 7 StringLabel classlLabel new StringLabel pTransforml subheadFont Class 1 An Average 0 9 0 3 ChartObj NORM GRAPH POS chartVu AddChartObject classlLabel classlAverageLabel new NumericLabel pTransforml subheadFont classlAverage 0 9 0 35 ChartObj NORM GRAPH POS ChartObj DECIMALFORMAT 1 chartVu AddChartObject classlAverageLabel StringLabel class2Label new StringLabel pTransforml subheadFont Class 42 An Average 0 9 0 5 ChartObj NORM GRAPH POS chartVu AddChartObject class2Label class2AverageLabel new NumericLabel pTransforml subheadFont class2Average D 9 D 55 ChartObj NORM GRAPH POS ChartObj DECIMALFORMAT 1 chartVu AddChartObject class2AverageLabel Visual Basic classlAverage Datasetl GetAverageY class2Average Dataset2 GetAverageY Dim classlLabel As New StringLabel pTransforml subheadFont Class 1 ControlChars Lf Average 0 9 0 3 ChartObj NORM GRAPH POS chartVu AddChartObject classlLabel classlAverageLabel New NumericLabel pTransforml subheadFont classlAverage 0 9 0 35 ChartObj NORM GRAPH POS ChartObj DECIMALFORMAT 1 chartVu AddChartObject classlAverageLabel Dim class2Label As New StringLabel pTransforml subheadFont Class 2 ControlChars Lf Average 0 9 0 5 ChartObj NORM GRAPH POS hartVu AddChartObject class2Label class2AverageLabel New Numer
480. ransform The coordinate system for the new ContourPlot object dataset The ContourDataset plot will represent the xyz values in this contour data set contourlevels An array size numcontourlevels of the contour levels used in the contour plot attribs An array of color and fill attributes size numcontourlevels 1 If the contourtype is CONTOUR LINE the colors of elements 0 numcontourlevels 1 set the colors of the contour lines If the contourtype is CONTOUR FILL elements 0 numcontourlevels set the colors of the contour regions blineflags An array size numcontourlevels of boolean flags specifying whether a contour line should be displayed blabelflags An array size numcontourlevels of boolean flags specifying whether a contour line should be labeled with the numeric value of the associated contour level numcontourlevels The number of contour levels contourtype Specifies if the contour plot uses contour lines CONTOUR_ LINE filled contour regions CONTOUR FILL or both CONTOUR LINEANDFILL Contour plots that use the CONTOUR FILL algorithm require one more color than the CONTOUR LINE algorithm The attributes for each contour line can set or modified using the SetSegment methods where the segment number parameter corresponds to the contour value index These methods include SetSegmentAttributes SetSegmentFillColor SetSegmentLineColor and SetSegmentColors Contour line plot example extracted from the ex
481. ray 4 VB Dim Datasetl As New EventGroupDataset Stock Data eventArray 4 Create an EventCoordinateSystem referencing the EventSimpleDataset as a parameter The coordinate system is defined by the content of the EventSimpleDataset It will auto scale the coordinate system to the number of ChartEvents found in the source dataset C pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR VB pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR Define the x axis as an EventAxis The tick marks of the axis are defined using the TickRule property in this case the TickRule is TICK RULE MINORCROSSOVEREVENT MAJORCROSSOVEREVENT This means a minor tick mark is placed every time the time rolls over a minor event and a major tick mark is placed every time the time rolls over a major event More on this later C EventAxis xAxisl new EventAxis pTransforml xAxisl SetColor Colors White xAxisl TickRule ChartObj TICK RULE MINORCROSSOVEREVENT MAJORCROSSOVEREVENT chartVu AddChartObject xAxis1 VB Dim xAxisl As New EventAxis pTransforml xAxisl SetColor Colors White xAxisl TickRule ChartObj TICK RULE MINORCROSSOVEREVENT MAJORCROSSOVEREVENT chartVu AddChartObject xAxis1 Last define the x axis labels using the EventAxisLabels class C EventAxisLabels xAxisLabl new EventAxisLabels xAxis1 xAxisLabl SetColor Colors White chartVu AddChar
482. re placed in a ChartView window that derives from the System Windows Controls UserControl class Position one or more ChartView objects in WPF container windows using the standard container layout managers Mix charts with other components in the same container Charts use the standard WPF routed event processing model for handling mouse and keyboard events Second the library is extensible Hundreds of different vertical markets use computer charting The charts used in each market have a unique look and feel A well designed object oriented charting package allows the programmer to extend the software without modifying the source of the underlying classes Instead the programmer extends the software by deriving a new class from an existing base class The new derived class localizes custom source code and the source of the underlying 29 Class Architecture O O classes remains unchanged In the QCChart2D for WPF classes a user can subclass an existing class and create new custom charting objects Examples of custom charting objects are specialized plots that extend the SimplePlot or GroupPlot classes to include new plot types for applications such as stock market technical analysis statistical process control and medical instrumentation to name a few Third the library has no limits regarding the number of data points in a plot the number of plots in graph the number of axes in a graph and the number of coordinate systems
483. rent data for minimum and maximum values and create a chart scale based on those values Auto scaling and the creation of appropriate axes with endpoints at even values and well rounded major and minor tick mark spacing is quite complicated The AutoScale classes provide tools that make automatic generation of charts easier AutoScale LinearAutoScale LogAutoScale TimeAutoScale ElapsedTimeAutoScale EventAutoScale This class is the abstract base class for the auto scale classes This class is a concrete implementation of the AutoScale class It calculates scaling values based on the numeric values in SimpleDataset and GroupDataset objects Linear scales and axes use it for auto scale calculations This class is a concrete implementation of the AutoScale class It calculates scaling values based on the numeric values in SimpleDataset and GroupDataset objects Logarithmic scales and axes use it for auto scale calculations This class is a concrete implementation of the AutoScale class It calculates scaling values based on the ChartCalendar values in TimeSimpleDataset and TimeGroupDataset objects Date time scales and axes use it for auto scale calculations This class is a concrete implementation of the AutoScale class It calculates scaling values based on the numeric values in ElapsedTimeSimpleDataset and ElapsedTimeGroupDataset objects The elapsed time classes use it for auto scale calculations This class is a concrete
484. revious Marker and DataCursor examples In this example the OnMouseUp event of the subclassed DataCursor object processes the plot objects looking for the nearest point and then places a Marker object and a numeric label at that point Marking a data point Adapted from the DataCursorView and CustomChartDataCursor classes C public class CustomChartDataCursor DataCursor NumericLabel pointLabel ChartFont textCoordsFont new ChartFont Microsoft Sans Serif 8 FontStyles Normal double rNumericLabelCntr 0 0 SimpleLinePlot thePlotl SimpleLinePlot thePlot2 public CustomChartDataCursor ChartView achartview CartesianCoordinates thetransform SimpleLinePlot plotl SimpleLinePlot plot2 int nmarkertype double rsize base achartview thetransform nmarkertype rsize thePlotl thePlot2 plotl plot2 public override void OnMouseUp MouseButtonEventArgs mouseevent NearestPointData nearestPointObjl new NearestPointData NearestPointData nearestPointObj2 new NearestPointData Point2D nearestPoint new Point2D 0 0 ChartView chartview GetChartObjComponent bool bfoundl false bool bfound2 false base OnMouseUp mouseevent if GetMouseButtonPressed mouseevent GetButtonMask Find nearest point for each line plot object Point2D location GetLocation bfoundl thePlotl CalcNearestPoint location Data Markers and Data Cursors 316 ChartObj FNP NORMDIST nearestPo
485. ribute ePlot2 new ChartAttribute ors Red Col new SimpleScatterP titleFont Colors Green new SimpleLinePlot pTransforml Ly ChartObj Y AXIS new NumericAxisLabels xAxis new NumericAxisLabels yAxis 10 UE REIS Y AXIS lors Blue new SimpleScatterPlot pTransforml lors Red lot pTransforml FontStyles Normal Measurable work output MBAs 1000 employees ChartObj GRID MAJOR ChartObj GRID MAJOR l DashStyles Solid Dataset2 3 DashStyles S3olid Datasetl attrib2 1 DashStyles Solid Dataset3 Reference and initialize the newly created SimpleScatterPlot class in the Window1 xaml cs behind code file The WPFChartApplicationl example program also includes printer and image routines in to support the printer and image menus items defined in the Window1 xaml file You may or may not want to include those in your program System System System System System System System System Collections Generic Ling Text Windows Windows Controls Windows Data Windows Documents using using using using using using using using using Using QCChart2D for WPF to Create Windows Applications 416 System Windows Input System Windows Media System Windows Media Imaging System Windows Navigation System Windows Shapes com quinncurtis chart2dwpf System Printing Microsoft Win32j System IO namespace WpfApplic
486. rpendicular axis in physical coordinates tickorigin The tick marks start at this value tickspace Specifies the spacing between minor tick marks ntickspermajor Specifies the number of minor tick marks per major tick mark minorticklength The length of minor tick marks in WPF device coordinates majorticklength The length of major tick marks in WPF device coordinates tickdir The direction of the tick marks Use one of the tick mark direction constants AXIS MIN AXIS CENTER or AXIS MAX Use the SetLineWidth SetLineStyle and SetColor methods to customize the drawing properties of the lines used to draw the axis line and tick marks Simple elapsed time axis example C Define the coordinate system TimeSpan xMin TimeSpan FromSeconds 0 TimeSpan xMax TimeSpan FromSeconds 15 double yMin 0 double yMax 105 ElapsedTimeCoordinates simpleScale new ElapsedTimeCoordinates xMin yMin xMax yMax Create the x and y axes ElapsedTimeAxis xAxis new ElapsedTimeAxis simpleScale ChartObj X AXIS ElapsedTimeAxis yAxis new ElapsedTimeAxis simpleScale ChartObj Y AXIS Axes 204 Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis Visual Basic Define the coordinate system Dim xMin As TimeSpan TimeSpan FromSeconds 0 Dim xMax As TimeSpan TimeSpan FromSeconds 15 Dim yMin As Double Dim yMax As Double 15 Dim simpleScale As ElapsedTimeCoor
487. rs are justified with respect to the x values in the dataset using the rbarjust justification value JUSTIFY MIN JUSTIFY CENTER or JUSTIFY MAX The attributes for each group can set or modified using the SetSegment methods where the segment number parameter corresponds to the group number These methods include SetSegmentAttributes SetSegmentFillColor SetSegmentLineColor and SetSegmentColors Group bar plot example extracted from the example program Bargraphs class GroupBargraphs C TimeGroupDataset Datasetl new TimeGroupDataset GroupTimeData xValues groupBarData TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR pTransforml SetTimeScaleStart new ChartCalendar 1997 ChartObj JANUARY 1 pTransforml SetTimeScaleStop new ChartCalendar 2003 ChartObj JANUARY 1 pTransforml SetGraphBorderDiagonal 0 1 1 45 0 75 Background backgroundl new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 0 120 70 Color FromRgb 0 40 30 ChartObj Y AXIS chartVu AddChartObject backgroundl Define axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Red 1 DashStyles Solid Colors Red ChartAttribute attrib2 new ChartAttribute Colors Yellow 1 DashStyles Solid Colors Yellow ChartAttribute attrib3 new ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue ChartAttribute
488. rt C TimeAxis xAxis new TimeAxis pTransforml chartVu AddChartObject xAxis FAQs 446 TimeAxis xAxis new TimeAxis pTransforml xAxis SetColor Colors White chartVu AddChartObject xAxis LinearAxis yAxis new LinearAxis pTransforml ChartObj Y AXIS Default places y axis at miniumum of x coordinate scale yAxis SetColor Colors White chartVu AddChartObject yAxis LinearAxis yAxis2 new LinearAxis pTransforml ChartObj Y AXIS yAxis2 SetAxisIntercept xAxis GetAxisMax yAxis2 SetAxisTickDir ChartObj AXIS MAX yAxis2 SetColor Colors White chartVu AddChartObject yAxis2 VB Dim xAxis As New TimeAxis pTransforml xAxis SetColor Colors White chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS Default places y axis at miniumum of x coordinate scale yAxis SetColor Colors White chartVu AddChartObject yAxis Dim yAxis2 As New LinearAxis pTransforml ChartObj Y AXIS yAxis2 SetAxisIntercept xAxis GetAxisMax yAxis2 SetAxisTickDir ChartObj AXIS MAX yAxis2 SetColor Colors White chartVu AddChartObject yAxis2 The other common reason to have multiple axes in a chart is to delineate the simultaneous use of different coordinate systems in the chart In this case each coordinate system has an x and or y axis to differentiate it from the other coordinate systems When the different coordinate systems are created they usually overlay the same area o
489. rtObjAttributes arrowAttrib chartVu AddChartObject arrowShape Visual Basic Dim regionArrow As New Arrow 1 40 6 15 Dim arrowAttrib As New ChartAttribute Colors Black 1 DashStyles Solid Colors Black arrowAttrib SetFillFlag True Dim arrowShape As New ChartShape pTransforml regionArrow GetArrowShape ChartObj DEV POS 1 5 40 0 ChartObj PHYS POS 195 arrowShape SetChartObjAttributes arrowAttrib chartVu AddChartObject arrowShape 23 File and Printer Rendering Classes ChartPrint BufferedImage High quality B amp W and color printing is an important feature of the charting library The resulting graph renders on the printer using the resolution of the output device for both text and graphical elements of the chart and does not transfer a grainy image from the computer to the printer The QCChart2D for WPF software uses the System Windows Controls PrintDialog component to implement printing Since the aspect ratio of the printed page is different from the aspect ratio of common displays options are included that allow different modes for positioning and sizing the chart on the printed page The BufferedImage class converts a chart into a System Media Imaging RenderedTargetBitmap object or saves the chart to a file in a bmp jpg gif tif png or wmp format The image file is placeable in a web page or an application program You can create a headless Net application and render charts without displaying a
490. rtSupport GetRandomDouble _ CInt 255 ChartSupport GetRandomDouble CInt 255 ChartSupport GetRandomDouble attribs i New ChartAttribute color 2 DashStyles Solid color attribs i SetFillFlag True Then True i False Then True flags i False ich ES o KR Es er La Il New a en Ani Ure ee datasetl contourlevels 13 Data Markers and Data Cursors Marker DataCursor Data markers are symbols and lines that can be dropped on to the data presented in a graph much like a bookmark in a word processing document Place the markers in a chart under program control or in response to a mouse event in the graph window Data cursors are temporary lines or symbols that are used to help position the mouse cursor over the desired section of a graph Standard data cursors include cross hairs a box and horizontal and or vertical lines Data Markers Class Marker GraphObj Marker Create data markers using the Marker class The constructor below creates a new Marker object using the specified coordinate system marker type marker position and marker size Marker constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal nmarkertype As Integer _ ByVal x As Double ByVal y As Double _ ByVal rsize As Double _ ByVal npostype As Integer C4 public Marker PhysicalCoordinates transform int nmarkert
491. rtView component MouseButton buttonmask string objectifilter public MoveObj ChartView component MouseButton buttonmask component A reference to the ChartView object that the chart is placed in buttonmask Specifies the mouse button that is trapped to invoke a move objectfilter The fully qualified class name of the base class that 1s used to filter the desired class objects The string ChartText causes the routine to move only objects derived from the ChartText class If you want to move only specific objects of a given class create a special subclass of that class Then create your moveable objects using that subclass Then specify your class name i e MyTextClass using the string MyTextClass Create the MoveObj object and then install it using the ChartView SetCurrentMouseListener method This adds the MoveObj object as a MouseListener to the ChartView object Enable Disable the function using MoveObj SetEnable method Call MoveObj SetCurrentMouseListener null to remove the object as a mouse listener for the chart view Not all GraphObj derived object are moveable Call the GraphObj GetMoveableType method and check to see if it returns ChartObj OBJECT MOVEABLE Alternatively you can call the MoveObj IsMoveableObject method passing in a reference to the object Moving Objects and Data Points 320 Most moveable objects move unrestricted in the x and y direction There are exceptions though Axis objects move in t
492. rtial class Windowl Window SimpleScatter sp null public Windowl InitializeComponent InitializeCharts T void InitializeCharts f Sp new SimpleScatter chartViewl chartViewl PreferredSize new Size 600 400 QCChart2D for WPF Dependencies The QCChart2D for WPF class library is self contained It uses only standard classes that ship with the Microsoft Net API The software uses the major Net WPF namespaces listed below System Windows Provides several important Windows Presentation Foundation WPF base element classes various classes that support the WPF property system and event logic and other types that are more broadly consumed by the WPF core and framework System System Windows Automation Provides support for Windows Presentation Foundation WPF UI Automation clients System Globalization The System Globalization namespace contains classes that define culture related information including the language the country region the calendars in use the format patterns for dates currency and numbers and the sort order for strings System IO The IO namespace contains types that allow synchronous and asynchronous reading and writing on data streams and files System Collections The System Collections namespace contains interfaces and classes that define various collections of objects such as lists queues bit arrays hashtables and dictionaries System Windows Controls Provides classes
493. ructor Visual Basic Overloads Public Sub New _ ByVal arrowshafthalfwidth As Double _ ByVal arrayshaftlength As Double ByVal arrowheadhalfwidth As Double E ByVal arrowheadlength As Double Ct public Arrow double arrowshafthalfwidth double arrayshaftlength double arrowheadhalfwidth double arrowheadlength arrowshafthalfwidth Sets the half width of the arrow shaft default 1 arrayshaftlength Sets the length of the arrow shaft default 7 arrowheadhalfwidth Sets the half width of the arrow head default 2 arrowheadlength Sets the length of the arrow head default 3 The default arrow has a length of about 10 pixels and a width of 4 pixels at the head The size of the various parts can be set to whatever values you want to create an arrow of with an aspect ratio appropriate to your application You can scale the arrow by setting the ArrowScaleFactor property Get a PathGeometry object defining the arrow shape by calling the GetArrowShape method Arrow example extracted from the example program MultiLinePlots class MultiLines C Arrow regionArrow new Arrow 1 40 6 15 ChartAttribute arrowAttrib 395 Lines Shapes Images and Arrows new ChartAttribute Colors Black 1 DashStyles Solid Colors Black arrowAttrib SetFillFlag true ChartShape arrowShape new ChartShape pTransforml regionArrow GetArrowShape ChartObj DEV POS 1 5 40 0 ChartObj PHYS PD3 195 arrowShape SetCha
494. rwidth double rheight ChartAttribute attrib int nlayoutimode rx The x position in chart normalized coordinates of the legend rectangle ry The y position in chart normalized coordinates of the legend rectangle rwidth The width in chart normalized coordinates of the legend rectangle rheight The height in chart normalized coordinates of the legend rectangle attrib Specifies the outline color outline line style and fill color for the legend rectangle nlayoutmode Specifies if the legend has a horizontal or vertical layout Use one of the orientation constants HORIZ DIR row major or VERT DIR column major Add legend items to a legend using one of the AddLegendItem methods AddLegendItem methods Visual Basic Overloads Public Func tion AddLegendItem ByVal stext As String ByVal nsymbol As Integer ByVal attrib As Ch artAttribute ByVal thefont As C As Integer Overloads Public Func hartFont tion AddLegendItem ByVal stext As String ByVal symbolshape ByVal attrib As Ch As PathGeometry artAttribute ByVal thefont As C As Integer Overloads Public Func ByVal legenditem A As Integer Overloads Public Func hartFont tion AddLegendItem S LegendItem tion AddLegendItem ByVal stext As String ByVal nsymbol As Integer ByVal chartobj As GraphObj ByVal thefont As C As Integer Overloads Public Func hartFont tion
495. s simpleScale AutoScale datasetsArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR 141 Scaling and Coordinate Systems Class EventCoordinates PhysicalCoordinates CartesianCoordinates EventCoordinates The EventCoordinates class scales the chart plot area for a physical coordinate system which uses an event scale in combination with a linear or logarithmic scaling The underlying event scale uses a simple linear scale scaled from 0 to N 1 where N is the number of ChartEvents with a unique time stamp in the attached ChartEvent based datasets EventSimpleDataset and EventGroupDataset Unlike the other coordinate systems an EventCoordinate object requires an event dataset as part of its definition The ChartEvent class incorporates two x value positioning properties the Position and the TimeStamp and one or more numeric y values for each event A single event therefore defines both the x and y values of the event in the underlying coordinate system A collection or array of ChartEvent objects define the data for a plot the same way as arrays of x and y values define a plot when using a simple dataset class with a Cartesian coordinate system The critical element of the ChartEvent which permit it to be used for the plotting of discontinuous data is that the Position of the event in a chart is related but independent of the TimeStamp of the event Event data can be positioned contiguously and evenly spaced in a chart even if t
496. s pTransform2 SetGraphBorderDiagonal 0 1 7 90 0 875 15 How do I use your software to generate GIF files Unlike the JPEG image file format the GIF file format uses a proprietary data compression algorithm known as LZW The patent on the LZW compression algorithm is owned by the large computer data processing company Unisys Programmers who write commercial applications that use this file format may be subject to paying Unisys royalties The BufferedImage class will out GIF files using the standard Net image encode GifBitmapEncoder According to Wikipedia all of the patents associated with GIF file format have expired and you are free to use that file format in your work 16 Sometimes the major tick marks of an axis are missing the associated tick mark label The axis labeling routines are quite intelligent Before the label is drawn at its calculated position the software does a check to see if the bounding box of the new axis label intersects the bounding box of the previous axis label If the new label is going to overlap the previous label the label is skipped You can override this default behavior by calling the objects SetOverlapLabelMode method SetOverlapLabelMode ChartObj OVERLAP LABEL DRAW Another option for horizontal axes only is to stagger the tick mark labels A stagger automatically alternates the line on which the tick mark label is placed SetOverlapLabelMode ChartObj OVERLAP LABEL STAG
497. s attrib Specifies the attributes line and fill color for the floating bars nbarjust Specifies the justification with respect to the independent data value Use one of the justification constants JUSTIFY MIN JUSTIFY CENTER JUSTIFY MAX 283 Simple Plot Objects An individual bar in a floating bar plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Scheduling charts often use floating bars where the starting and ending values of the bar represent the duration of some aspect of a project The default use of the floating bar class assumes that the ends of the bars are floating point values not date time values Yet the scheduling chart often uses date time values to specify the bar ends Since only the x axis works with time values the floating bars of a scheduling chart need to used in the horizontal orientation mode set using the FloatingBar SetBarOrient method Used in this mode the x values of the dataset position the bars with respect to the y axis and the y values of the dataset position the ends of the bars with respect to the x axis In order to have a group dataset object that stores x values as doubles and the y group values as ChartCalendar dates you must use a special TimeGroupDataset constructor Visual Basic Visual Basic Overloads Public Sub New _ ByVal sname As String _ ByVal x As ChartCalendar ByVa
498. s Many of the examples use this technique including GroupBarPlotChart DoubleBarPlot OHLFinPlot FinOptions DynPieChart PieAndLineChart and PieAndBarChart Multiple charts in a ChartView example extracted from the example program FinancialExamples class OHLCChart The Chart View 166 C pTransforml new TimeCoordinates pTransforml SetGraphBorderDiagonal 0 1 15 90 0 6 pTransform2 new TimeCoordinates pTransform2 SetGraphBorderDiagonal 0 1 7 90 0 875 Visual Basic pTransforml New TimeCoordinates pTransforml SetGraphBorderDiagonal 0 1 15 90 0 6 pTransform2 New TimeCoordinates pTransform2 SetGraphBorderDiagonal 0 1 7 90 0 875 Multiple Coordinate Systems in the Same Chart Often a chart needs more than one coordinate system to in order to support multiple x and y axes each with different scales As in the preceding section this involves creating multiple coordinate systems The plot areas for the coordinate systems can occupy separate space in the chart view or they can overlap at the exact same position As in the previous section the position of each coordinate systems plot area in the chart view is set using one of the coordinate systems SetGraphBorder methods Many of the examples use this technique including OHLFinPlot MultiAxes LinearAxes LogAxes and DateAxes1 and DateAxes2 Multiple coordinate systems in a ChartView example C double xMinl 5 double xM
499. s TimeCoordinates ElapsedTimeCoordinates The starting point for all drawing in a window is the Net 2D device coordinate system The coordinate system uses a default device resolution of the underlying Net window regardless of the output device A Net window maintains a viewport for the client area of the window controlling the position and size of the drawing area in the window Graphics output is clipped to the viewport preventing graphics output in one window from over writing graphics in another window The user coordinate system for the window starts at 0 0 in the upper left corner and extends in the positive direction down and to the right Plot area and graph area The plot area of a graph is the area where the plot data objects line plots bar plots etc are drawn The graph area is the entire area of the chart window The graph area includes the plot area as a subset Usually the plot area is smaller than the graph area and resides roughly centered in the graph area The border around the plot area is sized large enough to display the axis tick mark labels axis titles legends chart titles footers and any other object in the graph Create a physical coordinate system for a chart and you are setting the minimum and maximum values for the x and y dimensions of the plot area Most chart objects require access to the chart coordinate system for proper positioning in the chart window Some chart objects axis objects in particu
500. s Visual Studio installed templates Code Data E About Box A ADO NET Entity Data Model General Ye Class S Class Diagram Web Ye Code File svg COM Class Windows Forms dj Component Class F Custom Control Reporting 5 Custom Control WPF ju DataSet Workflow Dialog 3 Dynamic Data Field WPF TE 73 Flow Document WPF E T Interface g JScript File E LINQ to SQL Classes J Local Database Local Database Cache ES Login Form li Parent Form Module s Page WPF OO Page Function WPF 5i Report E Report Wizard An empty dass definition SimpleScatterPlot vb The resulting SimpleScatterPlot vb file will contain Public Class SimpleScatterPlot End Class Modify the SimpleScatterPlot file to create the desired chart Most all of our examples are structured the same way The constructor is changed to pass in a ChartView object Then a chart initialization routine is called which adds chart objects to the ChartView This defines the chart See the SimpleScatterPlot vb file of the WPFChartApplicationl example Imports com quinncurtis chart2dwpf III lt summary gt Summary description for SimpleScatter LT lt summary gt Public Class SimpleScatter Public Sub New ByVal chartvu As ChartView InitializeChart chartvu End Sub Private Sub InitializeChart ByVal chartVu As ChartView Dim theFont As ChartFont Dim numPoints As Integer 95 Dim x1 As Double New Double numPo
501. s many columns before reading the first value from the row You can retrieve references to the internal arrays used to store the data using the SimpleDataset methods GetXData and GetYData Change the values in the data using these references You can also modify a point at a time using one of the SetDataPoint methods If you need to add new points to a dataset increasing its size use one of the AddDataPoint or InsertDataPoint methods Delete data points using the DeleteDataPoint method In order to see the modified dataset force the graph to redraw using ChartView UpdateDraw method The indexed accessor property of the SimpleGroupDataset will get or set a datapoint as a Point2D object Example of creating simple datasets from numeric arrays Visual Basic 77 Chart Datasets Dim x1 As Double 10 20 30 40 50 Dim yi As Double 9 21 20 40 30 Dim Datasetl As SimpleDataset New SimpleDataset First xl yl Dim n2 As Integer 9 Dim x2 n2 1 As Double Dim d dimension is upper limit not size Dim y2 n2 1 As Double Dim d dimension is upper limit not size x2 0 25 x2 1 1 x2 n2 1 100 yato 15 2401 25 y2 n2 1 100 Dim Dataset2 As SimpleDataset New SimpleDataset Second x2 y2 C double xl 10 20 30 40 50 double yl 9 21 20 40 30 SimpleDataset Datasetl new SimpleDataset First xl yl int nz 9 double x2 new double n2 dimension is size
502. s string label tool tip string position time stamp numeric time stamp y value index index for the y value to use when the ChartEvent contains multiple y values and the y values Visual Basic Overloads Public Sub New _ ByVal csv As CSV _ ByVal filename As String _ ByVal rowskip As Integer _ ByVal columnskip As Integer _ C4 public EventSimpleDataset CSV csv string filename int rowskip int columnskip LE CSV An instance of a CSV object filename The name of the file rowskip Skip this many rows before starting the read operation columnskip For each row of data skip this many columns before starting this read operation A DateTimeFormatInfo object and a date time format string in the CSV class control the interpretation of the ChartCalendar values The format in the file must match the format specified for the CSV class The underlying conversion mechanism calls the Chart Datasets 96 DateTime ToString String formatstring DateTimeFormatInfo info method for the conversion The default format for the date time formatstring object is M dd yy Call the SetDateTimeFomatString method to change the default date time format See the documentation for the Net DateTime ToString method to figure out the various formatting options for the date time format string If you are into internationalization and difficult to understand Net documentation you can also create your own DateTimeFormatInfo object installin
503. s the RectangleF class using doubles as internal storage 67 Class Architecture A diagram depicts the class hierarchy of the QCChart2D for WPF library ChartObj Arrow ChartCalendar ChartEvent CSV Dimension Point3D NearestPointData Polysurface ChartScale LinearScale LogScale TimeScale ElapsedTimeScale EventScale UserCoordinates WorldCoordinates WorkingCoordinates PhysicalCoordinates CartesianCoordinates PolarCoordinates AntennaCoordinates EventCoordiinates TimeCoordinates ElapsedTimeCoordinates ChartDataset SimpleDataset SimpleDataset TimeSimpleDataset ElapsedTimeSimpleDataset ContourDataset EventSimpleDataset GroupDataset TimeGroupDataset ElapsedTimeGroupDataset EventGroupDataset AutoScale LinearAutoScale LogAutoScale TimeAutoScale ElapsedTimeAutoScale EventAutoScale MouseListener MoveObj FindObj DataToolTip ChartZoom MagniView MoveCoordinates MultiMouseListener DataCursor MoveData ChartAttribute ChartGradient ChartPrint BufferedImage System Windows Controls UserControl ChartView Rectangle2D Point2D Point3D GroupPoint2D DoubleArray DoubleArray2D BoolArray Polysurface Class Architecture 68 GraphObj SimpleLinePlot AntennaAnnotation SimpleBarPlot TickMark SimpleScatterPlot Axis SimpleLineMarkerPlot LinearAxis SimpleVersaPlot PolarAxes GroupPlot AntennaAxes ArrowPlot LogAxis BubblePlot TimeAxis CandlestickPlot ElapsedTimeAxis CellPlot EventAxis ErrorBarPlot ChartText Flo
504. s the objects global line color line thickness line style fill color and fill mode Change the ChartAttribute object using the objects SetChartObjAttributes method There is also a group of methods that set individual simple plot properties SetColor SetLineWidth and SetLineStyle The line step style is using the SetStepMode method Individual line segments in a simple line plot object can have unique properties Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods Simple line plot example extracted from the example program SimpleLinePlots class LineFill C TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR ChartAttribute attribl new ChartAttribute Colors Blue 3 ChartObj DashStyles Solid SimpleLinePlot thePlotl new SimpleLinePlot pTransforml Datasetl attribl thePlotl SetLineStyle DashDot chartVu AddChartObject thePlot1 Visual Basic Dim pTransforml As TimeCoordinates New TimeCoordinates pTransforml AutoScale DatasetArray ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR 253 Simple Plot Objects Dim attribl As New ChartAttribute Colors Blue 3 DashStyles Solid Dim thePlotl As SimpleLinePlot _ New SimpleLinePlot pTransforml Datasetl attribl thePlotl SetLineStyle DashStyles DashDot chartVu AddChartObject thePlotl Simple line plot example using segment colors extracted from the ex
505. s using the ElapsedTimeCoordinates SetCoordinateBounds method Example of explicit scaling of a Elapsed TimeCoordinates object using the ElapsedTimeCoordinates SetCoordinateBounds method C double xMin 0 starting elapsed time is 0 double xMax 30 1000 ending elpase time is 30 seconds double yMin 0 double yMax 105 ElapsedTimeCoordinates simpleScale new ElapsedTimeCoordinates simpleScale SetCoordinateBounds xMin yMin xMax yMax Visual Basic Dim xMin As Double 0 starting elapsed time is 0 Dim xMax As Double 30 1000 ending elpase time is 30 seconds Dim yMin As Double 0 Dim yMax As Double 105 Dim simpleScale As ElapsedTimeCoordinates New ElapsedTimeCoordinates simpleScale SetCoordinateBounds xMin yMin xMax yMax It is possible to scale the bounds of the coordinate system based on the data values in a dataset There are constructors and methods that take a single dataset and others that take an array of datasets Example of auto scaling a ElapsedTimeCoordinates object using a single dataset 139 Scaling and Coordinate Systems C double xData 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 double yData 10 22 33 44 55 46 33 25 14 9 ElapsedTimeSimpleDataset dataset new ElapsedTimeSimpleDataset Sales xData yData ElapsedTimeCoordinates simpleScale new ElapsedTimeCoordinates simpleScale AutoScale dataset Visual Basic Dim
506. sDir As Integer ChartObj AXIS MIN Dim xAxisLabelsDecimal As Integer 1 Dim xAxisLabelsEnds As Integer ChartObj LABEL ALL Dim xAxisLabelsColor As Color Colors Black Dim xAxisNumericFormat As Integer ChartObj DECIMALFORMAT xAxisLabels SetAxisLabels labelfont xAxisLabelsRotation _ xAxisLabelsDir xAxisLabelsDecimal xAxisLabelsEnds xAxisLabelsColor xAxisLabels SetAxisLabelsFormat xAxisNumericFormat String Axis Labels Class StringAxisLabels GraphObj ChartText 223 Axis Labels AxisLabels StringAxisLabels Use the StringAxisLabels class to label major tick marks of a linear or logarithmic axis with arbitrary strings StringAxisLabels constructor There is only one main constructor for StringAxisLabels objects Visual Basic Overloads Public Sub New _ ByVal baseaxis As Axis _ Ct public StringAxisLabels Axis baseaxis baseaxis This is the axis the axis labels are for The axis strings and other axis label properties font rotation numeric format axis labels direction and numeric precision are automatically set These properties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Declaration Public Sub SetAxisLabels _ font As ChartFont _ rotation As Double _ labdir As Integer _ labelends As Integer _ labcolor As Color _ tickstrings As String _ numtickstrings As Integer _ CH pub
507. sLabels look to the TimeStamp property for their values not the Position property What you end up with is the clean evenly spaced look of a simple linear chart with the axis tick marks and axis labeling of a dedicated time date axis The graph can be made to scroll or pan left to right or re scale along the y axis smoothly 145 Scaling and Coordinate Systems E Formi EuroDollar CandlestickChart FinLogPlot OHLCChart OpeningScreen FinancialOptions Techrical nalysis Candlestick Plots in Technical Analysis 7 03 12 7 05 12 7 06 12 7 09 12 7 10 12 7 11 12 The Open Close box is filled if the open price is greater than the close price Creating a chart using the event classes uses the same basic sequence as our other coordinate systems First create the data in this case an array of ChartEvent objects Most of the code below is just the simulation of some raw data taking into account a 9 30 to 16 00 working day with no weekends Note that each ChartEvent object is defined using both a TimeStamp value xvalues i and a Position value 1 The value of i controls the position of the ChartEvent object in the plot and the value of the TimeStamp controls the x axis tick marks and labels double minval 0 0 maxval 0 0 int incrementbase ChartObj MINUTE int increment 10 ChartCalendar currentdate new ChartCalendar ChartEvent eventArray new ChartEvent nNumPnts stockPriceData 3 25 5 close
508. sLabelsEnds As Integer ChartObj LABEL ALL Dim xAxisLabelsColor As Color Color Black Dim xAxisNumericFormat As Integer ChartObj TIMEDATEFORMAT MY xAxisLabels SetAxisLabels labelfont xAxisLabelsRotation _ xAxisLabelsDir xAxisLabelsEnds xAxisLabelsColor xAxisLabels SetAxisLabelsFormat xAxisNumericFormat Polar Axes Labels Class PolarAxesLabels GraphObj ChartText AxisLabels NumericAxisLabels Axis Labels 240 PolarAxesLabels The PolarAxesLabels class extends the NumericAxisLabels class and creates labels for objects of the PolarAxes class The PolarAxesLabels class labels the two parts of the polar axes the x and y axes pair defining the polar magnitude and the polar angle circle bounding the x and y axes The class extends the NumericAxisLabels class and uses that class s methods and properties for managing the label properties The x and y axes have extents of R The only labels needed for these axes are for the positive section of the x axis The easiest way to manage this is to create a local x axis that extends from 0 to R This local axis is not drawn but is used to create a NumericAxisLabels object for the class This object draws the labels for the positive section of the x axis PolarAxisLabels constructor There is only one main constructor for PolarAxesLabels objects Visual Basic Overloads Public Sub New _ ByVal baseaxis As PolarAxes _ Ct public PolarAxesLabels
509. sMajorTickLength As Double 10 Dim yAxisTickDirection As Integer ChartObj AXIS MAX yAxis SetAxisIntercept yAxisIntercept yAxis SetAxisTicks yAxisOrigin yAxisLogFormat yAxisMinorTickLength yAxisMajorTickLength yAxisTickDirection Date Time Axes The date time axis is used in combination with a TimeCoordinates physical coordinate system The axis major and minor tick marks correspond to the common date time divisions of second minute hour day week month and year The date time axes supported with this software are very complex because they take into account the varying number of days in months and years The axes also take into account non continuous date time scales where a 5 day week is used or where a full day consists of a specific time interval that can be something less than a 24 hour day Note The TimeAxis class is not used to create an axis to display elapsed time Use a ElapsedTimeCoordinates system in combination with a ElapsedTimeAxis to create an elapsed time axis It is the ElapsedTimeAxisLabels that give the elapsed time axis its time axis look i e 10 30 22 Class TimeAxis GraphObj Axis TimeAxis The TimeAxis class creates an axis with date time specific spacing between minor and major tick marks not necessarily uniform as with a LinearAxis The TimeAxis extends the Axis class 193 Axes Date Time Axis Minimum and Maximum The minimum and maximum values for a date time axis can have any va
510. se the Position values would be out of sync If these two datasets were plotted as is the TimeStamp values for the two datasets would not align with respect to the x axis When multiple datasets are attached to the same EventCoordinate system the coordinate system needs to merge and sort the ChartEvent objects of every dataset The ChartEvents are sorted by the TimeStamp value It may be that many TimeStamps are duplicates since different datasets may have used the same TimeStamps in their event data Other TimeStamps may be singular having occurred in only one dataset It really doesn t matter Next the software runs through the ChartEvents of the sorted list assigning a new Position value to every object in the list If adjacent ChartEvent objects in the sorted list have the same TimeStamp they are assigned the same Position value If the next object in the sorted list has a different TimeStamp value it is assigned a Position value one greater than the previous ChartEvent The net effect 1s that the ChartEvents with the same TimeStamp value will align properly at the same x position in the graph regardless of how the initial Position values were set The EventAxis and EventAxisLabels objects when applied to the EventCoordinate system will see every unique TimeStamp in the merged datasets without double counting duplicate TimeStamp values across dataset 149 Scaling and Coordinate Systems Form1 DER Candlestick Chart OHLC Custom
511. selectedindex Dim volume As Double stockVolumeData selectedindex Dim openObj As String ChartSupport NumToString open ChartObj DECIMALFORMAT 2 Dim highObj As String ChartSupport NumToString high ChartObj DECIMALFORMAT 2 Dim lowObj As String ChartSupport NumToString low ChartObj DECIMALFORMAT 2 Dim closeObj As String ChartSupport NumToString close ChartObj DECIMALFORMAT 2 Dim volumeObj As String ChartSupport NumToString volume ChartObj DECIMALFORMAT 0 Dim nasdaqObj As String ChartSupport NumToString nasdaq ChartObj DECIMALFORMAT 2 Dim timelabel As New TimeLabel transform xValues selectedindex ChartObj TIMEDATEFORMAT STANDARD tockpanel AddNewLineTextString timelabel GetTextString tockpanel AddNewLineTextString Open openObj tockpanel AddNewLineTextString High highObj tockpanel AddNewLineTextString Low lowObj tockpanel AddNewLineTextString Close closeObj tockpanel AddNewLineTextString Volume volumeObj tockpanel AddNewLineTextString NASDAQ nasdaqObj tockpanel SetChartObjEnable ChartObj OBJECT ENABLE im g2 As Graphics GetToolTipGraphics Precalculates the text bounding box so that the size is known before it is drawn Stockpanel PreCalcTextBoundingBox g2 Dim boundingbox As Rectangle2D stockpanel GetTextBox Reposition tooltip text box if top of box near top of graph window You can do the same thing for al
512. sforml ChartObj GRAPH BACKGROUND Color FromRgb 130 170 170 Color FromRgb 190 120 190 ChartObj Y AXIS b Background background new Background pTransforml ChartObj GRAPH BACKGROUND j Colors LightBlue chartVu AddChartObject background Dim xAxis As New TimeAxis pTransforml xAxis SetColor Colors Black chartVu AddChartObject xAxis Dim yAxis As New LinearAxis pTransforml ChartObj Y AXIS yAxis SetColor Colors Black chartVu AddChartObject yAxis Dim xAxisLab As New TimeAxisLabels xAxis xAxisLab SetAxisLabelsFormat ChartObj TIMEDATEFORMAT Y2000 xAxisLab SetColor Colors Black xAxisLab TextRotation 90 chartVu AddChartObject xAxisLab Dim yAxisLab As New NumericAxisLabels yAxis yAxisLab SetColor Colors Black yAxisLab SetAxisLabelsFormat ChartObj CURRENCYFORMAT chartVu AddChartObject yAxisLab Dim yaxistitle As New AxisTitle yAxis theFont Millions yaxistitle SetColor Colors Black chartVu AddChartObject yaxistitle Dim attribl As New ChartAttribute Colors Green 1 DashStyles Solid Colors Yellow Dim barcolors As Color Colors Red Colors Orange Colors Yellow Colors White N double barbreakpoints 0 0 33 660 1 00 g int gradmode ChartGradient GRADIENT MAPTO OBJECT Dim barbreakpoints As Double 0 0 80 160 240 Dim gradmode As Integer ChartGradient GRADIENT MAPTO PLOT PHYSICAL COORDINATES Dim cg As New ChartGradient pTransforml gradmode barcolors
513. simpleScale New CartesianCoordinates xMin yMin xMax yMax Use ONE of the example below Y Example 1 simpleScale SetGraphBorderFrame new Rectangle2D 0 5 0 0 0 5 0 5 Y Example 2 simpleScale SetGraphBorderFrame 0 5 0 0 0 5 0 5 Y Example 3 simpleScale SetGraphBorderDiagonal 0 5 0 0 1 0 0 5 3 Example 4 simpleScale SetGraphBorderInsets 0 5 0 0 0 0 0 5 Linear and Logarithmic Coordinate Scaling Class CartesianCoordinates PhysicalCoordinates t CartesianCoordinates The CartesianCoordinates class scales the chart plot area for a physical coordinate system that uses linear and or logarithmic scaling There are three main ways to scale the plot area Scale the minimum and maximum x and y values explicitly amp Use an auto scale method that calculates appropriate minimum and maximum x and y values based on the x and y values in one or more datasets Use a combination of the first two methods It is useful to be able to run an auto scale function and then change the minimum or maximum value of one or more coordinate endpoints Scaling and Coordinate Systems 120 Linear Coordinate Scaling The default coordinate system for the Cartesian Coordinates class is linear for both x and y If you already know the range for x and y for the plot area you can scale the plot area explicitly The example below uses a CartesianCoordinates constructor to initialize the coordinates to the
514. ss and displays pie ring charts The x values of the simple dataset used for data storage specify the pie ring wedge values The y values of the dataset specify the explode percentage for each pie ring wedge PieChart Constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As SimpleDataset ByVal spiestringls As String _ ByVal attribs As ChartAttribute _ ByVal labelinoutl As Integer _ ByVal pielabelformat As Integer _ Ct public PieChart Pie Charts 344 PhysicalCoordinates transform SimpleDataset dataset strinq spiestringls ChartAttribute attribs int labelinoutl int pielabelformat RingChart Constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As SimpleDataset ByVal spiestringis As String ByVal attribs As ChartAttribute ByVal labelinoutl As Integer _ ByVal pielabelformat As Integer _ Ct public RingChart PhysicalCoordinates transform SimpleDataset dataset strinq spiestringls ChartAttribute attribs int labelinoutl int pielabelformat transform dataset spiestrings attribs labelinout pielabelformat The pie ring chart is placed in the coordinate system defined by transform The pie ring chart represents the values in this dataset The x values of the simple dataset used for data storage specify the pie ring wedge values
515. ss for handling dimension height and width information using doubles rather than the integers used by the Size class This class encapsulates an xy pair of values as doubles more useful in this software than the Net Point and PointF classes This class encapsulates an x value and an array of y values representing the x and y values of one column of a group data set This class is used as an alternative to the standard Net Array class adding routines for resizing of the array and the insertion and deletion of double based data elements This class is used as an alternative to the standard Net 2D Array class adding routines for resizing of the array and the insertion and deletion of double based data elements BoolArray Point3D NearestPointData TickMark Polysurface Rectangle2D Class Architecture 66 This class is used as an alternative to the standard Net Array class adding routines for resizing of the array and the insertion and deletion of bool based data elements This class encapsulates an xyz set of double values used to specify 3D data values This is a utility class for returning data that results from nearest point calculations The axis classes use this class to to organize the location of the individual tick marks of an axis This is a utility class that defines complex 3D shapes as a list of simple 3 sided polygons The contour plotting routines use it This is a utility class that extend
516. st efficient method If memory is not an issue it is also possible to assign every line segment bar and scatter plot symbol a unique ChartAttribute object Used in this mode a single line plot can have unlimited number of multi colored line segments Another option labels each data point with its numeric y value Example program segments presented in this documentation are not complete programs and contain uninitialized and or undefined objects and variables Do not attempt to copy them into your own program Refer to the referenced examples Simple Line Plots Class SimpleLinePlot GraphObj t ChartPlot t SimplePlot SimpleLinePlot The SimpleLinePlot class is a concrete implementation of the SimplePlot class and and displays simple datasets in line plot format Data points are connected using a straight line or a step line SimpleLinePlot constructor Simple Plot Objects 252 Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As SimpleDataset ByVal attrib As ChartAttribute Ct public SimpleLinePlot PhysicalCoordinates transform SimpleDataset dataset ChartAttribute attrib E transform The coordinate system for the new SimpleLinePlot object dataset The line plot represents the values in this dataset attrib Specifies the attributes line color thickness and style fill color and fill mode for the line plot A ChartAttribute object set
517. stockVolumeData stockvolumes NASDAQData nasdaqs stockpanel GetTextTemplate End Sub New Public Overrides Sub OnMouseUp ByVal mouseevent As MouseButtonEventArgs MyBase OnMouseUp mouseevent Redraws the chart Since the stockpanel object has not been added to the chart using addChartObject it will not be redrawn when the chart is redrawn GetChartObjComponent UpdateDraw End Sub OnMouseUp Public Overrides Sub OnMouseDown ByVal mouseevent As MouseButtonEventArgs Dim mousepos As New Point2D mousepos SetLocation mouseevent X mouseevent Y MyBase OnMouseDown mouseevent Dim selectedPlot As ChartPlot CType GetSelectedPlotObj ChartPlot If Not selectedPlot Is Nothing Then Dim selectedindex As Integer GetNearestPoint GetNearestPointIndex Dim transform As PhysicalCoordinates GetSelectedCoordinateSystem Data ToolTips 342 Stockpanel SetChartObjScale transform stockpanel SetLocation mousepos ChartObj DEV POS Stockpanel SetTextString Stock Data Looking to the original arrays because we just have the selectedindex yet we want to display stock O H L C data volume and NASDAQ Only one of these datasets can be selected at a time by the tooltip Dim open As Double stockPriceData 0 selectedindex Dim high As Double stockPriceData 1 selectedindex Dim low As Double stockPriceData 2 selectedindex Dim close As Double stockPriceData 3 selectedindex Dim nasdaq As Double NASDAQData
518. system LinearScale A concrete implementation of the ChartScale class It converts a linear physical coordinate system into the working coordinate system LogScale A concrete implementation of the ChartScale class It converts a logarithmic physical coordinate system into the working coordinate system TimeScale A concrete implementation of the ChartScale class converts a date time physical coordinate system into the working coordinate system ElapsedTimeScale A concrete implementation of the ChartScale class converts an elapsed time coordinate system into the working coordinate system 33 Class Architecture EventScale A concrete implementation of the ChartScale class converts an event coordinate system into the working coordinate system Coordinate Transform Classes UserCoordinates WorldCoordinates WorkingCoordinates PhysicalCoordinates CartesianCoordinates ElapsedTimeCoordinates PolarCoordinates AntennaCoordinates EventCoordinates TimeCoordinates The coordinate transform classes maintain a 2D coordinate system Many different coordinate systems are used to position and draw objects in a graph Examples of some of the coordinate systems include the device coordinates of the current window normalized coordinates for the current window and plotting area and scaled physical coordinates of the plotting area UserCoordinates This contains routines for drawing lines rectangles and text using WPF device coordinates W
519. t DirectX features used in the QCChart2D for WPF library include the following S Resolution independence DirectX s emphasis on vector graphics means that programs can be more easily designed to be independent of the resolution of the output device Arbitrary line thickness and line styles for all lines Gradients fill patterns and color transparency for solid objects Generalized geometry support used to create arbitrary shapes Printer and image output support Improved font support for a large number of fonts using a variety of font styles size and rotation attributes Imaging support for a large number of image formats Advanced matrix support for handling 2D transformations OOOO Oo In addition to the DirectX rendering for the display WPF utilizes a new declarative user interface definition framework known as XAML for Extensible Application Markup Language This framework combines customizable rendering of user interface components with a two tier programming model analogous to the the way you program ASP Net web pages using a combination of HTML in the design mode and C or VB in the behind code section of the page In WPF applications the user interface layout is defined as an XAML page using a text tag format based on XML and user interface events are processed in a C or VB behind code page In a WPF program which uses QCChart2D the QCChart2D class ChartView is referenced as a visual element in a windows the XAML f
520. t anglentickspermajor public void SetPolarAxesTicks double axestickspace int axesntickspermajor double angletickspace int anglentickspermajor double minorticklength double majorticklength int tickdir E axestickspace Specifies the spacing between minor tick marks for the x and y axes axesntickspermajor Specifies the number of minor tick marks per major tick mark for the x and y axes angletickspace Specifies the spacing in degrees between minor tick marks for the radial axis anglentickspermajor Specifies the number of minor tick marks per major tick mark for the radial axis minorticlength The length of minor tick marks in WPF device coordinates majorticlength The length of major tick marks in WPF device coordinates tickdir The direction of the tick marks Use one of the tick mark direction constants AXIS MIN AXIS CENTER or AXIS MAX Use the SetLineWidth SetLineStyle and SetColor methods to customize the drawing properties of the lines used to draw the axes lines and tick marks Simple polar axes example C double polarmagnitude 5 0 PolarCoordinates polarscale new PolarCoordinates polarmagnitude PolarAxes polarAxes new PolarAxes polarscale Create the ChartView object to place graph objects in ChartView chartVu new ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes Visual Basic 211 Axes Dim polarmagnitude As Double 5
521. t axtype E public TimeAxis TimeCoordinates transform int axtype int ntickmarkbase LE public TimeAxis TimeCoordinates transform int axtype ChartCalendar dstart ChartCalendar dstop If the constuctor does not explicitly specify whether the axis is for the x or y axis then the software checks the underlying TimeCoordinates system transform and creates an axis for the dimension of the coordinate system that is time based transform The time coordinate system the axis is placed in If the starting and ending dates of the axis are not explicitly set the axis uses the starting and ending dates of the transform time scale axtype The axis types Use one of the axis type constants X_AXIS or Y_AXIS dstart The starting date value for the axis dstop The ending date value for the axis ntickmarkbase This field defines the major and minor tick mark spacing for a time axis Use one of the Date time axis tick mark mode constants TIMEAXIS YEARMONTH TIMEAXIS DAYHOUR for example Other axis properties axis intercept tick mark lengths tick mark direction are automatically calculated using an auto axis method These properties can be explicitly set if you need to override the automatically calculated values SetAxisIntercept method Visual Basic Public Sub SetAxisIntercept _ ByVal intercept As Double Ct public void SetAxisIntercept double intercept 199 Axes SetAxisTicksAttri
522. t the QCChart2DWPF3 DLL Add Reference NET COM Projects Browse Recent Look in CJ ib od m Pl aaoun eg 8 QCRTGraphWPF 3 dll 55 QCChart2DNet dll X QCsPCChartNet dll VEM SJcsPCChartwPF3 dl X QCChart3DNet dll E QCChart3DVisionAux dll 5 QCMatPackNet dll 55 QCMatViewNet dll 4 QCRTGraphNet dll Filename QCChat2DWPF3 dl Files of type Component Files dll tlb olb ocx eve manifest L o J cw View the Pagel xaml code and add the reference to ChartView in the Grid layout panel The Window1 xaml file now looks like Using QCChart2D for WPF to Create Web Applications 438 lt Page x Class Page1 xmlns http schemas microsoft com winfx 2006 xaml presentation xmlns x http schemas microsoft com winfx 2006 xaml Title Pagel Height 600 Width 900 xmlns my clr namespace com quinncurtis chart2dwpf assembly QCChart2DWPF3 gt lt Grid gt lt my ChartView Margin 18 11 16 6 Name chartView1 gt lt Grid gt lt Page gt Display the Pagel asml vb behind code file It will look something like this Public Class Pagel End Class Add a reference to the QCChart2DWPF namespace com quinncurtis chart2dwpf in the using section of the program Import com quinncurtis chart2dwpf Add a new simple class file named SimpleBars to the project Alternatively select Add Existing Item and select th
523. t2dwpf assembly QCChart2DWPF3 This line needs to be resolved by adding a reference to the QCChart2DWPF3 library to the project Using QCChart2D for WPF to Create Windows Applications 410 Right click on Reference in the Solution Explorer window and select Add Reference Browse to the Quinn Curtis DotNet lib subdirectory and select the QCChart2DWPF3 DLL Add Reference NET COM Projects Browse Recent Look in lib O amp amp 28 Chart2DWPF2 d S Chart2DWPF 3 dll Pl aaoun eg Ziel OCChart2DWPF3 dll Cerea Si 8 QCChart3DVisionAux dll 5 QcMatPackNet dl 55 QCMatViewNet d X QCRTGraphNet di 8 QCRTGraphWP Fie version 1 0 0 3 lllocwocaenme Date Created 4 27 2010 11 58 AM Filename QCChat2DWPF3 dl Files of type Component Files dll tlb olb ocx ee manifest mm Cen If you also want printing in the program you need to add a reference to the Net Printing assembly In this case in the Add Reference tab choose Net and scroll to the System Printing assembly 411 Using QCChart2D for WPF to Create Windows Applications Add Reference NET COM Projects Browse Recent Component Name j Runtime System EnterpriseServices D D v2 0 50727 System IdentityModel 0 0 v2 0 50727 System IdentityModel Selectors D D v2 0 50727 System IO Log 0 0 v2 0 50727 System Management 0 0 v2 0 50727 System M
524. tObject xAxisLabl VB Dim xAxisLabl as New EventAxisLabels xAxis1 xAxisLabl SetColor Colors White Scaling and Coordinate Systems 148 chartVu AddChartObject xAxisLabl Everything else is the same as in our other charts Things are more complicated once you start plotting multiple overlapping datasets in the same coordinate system Each ChartEvent object in the previous example had a unique Position and TimeStamp value The software only needed to auto scale the coordinate system for the range of ChartEvent Position values and plot the data If you want to plot a second dataset in the same chart it is more complicated If every ChartEvent object of the the second dataset uses exactly the same Position and TimeStamp values as the first and only has different y values you could plot it as is You should be able to plot the second dataset directly on top of the first and the TimeStamps of the ChartEvents objects would line up chronologically exactly as you would expect The complication arises if the second dataset overlaps the first with respect to the TimeStamp values but does NOT use exactly the same TimeStamps as the first set of data For example the first set of data is contains ChartEvent objects sampled at 10 minute intervals starting at 8 30 The second dataset contains ChartEvents objects starting at 8 15 and sampled every 15 minutes In this case some of the TimeStamp values would match at every 2 hour but in every ca
525. tObject yAxis3 yAxis4 New LinearAxis pTransform4 ChartObj Y AXIS yAxis4 SetAxisIntercept 52 yAxis4 SetChartObjAttributes attrib4 axis color matches line color chartVu AddChartObject yAxis4 yAxis5 New LinearAxis pTransform5 ChartObj Y AXIS yAxis5 SetAxisIntercept xAxis GetAxisMax yAxis5 SetAxisTickDir ChartObj AXIS MAX yAxis5 SetChartObjAttributes attrib5 axis color matches line color chartVu AddChartObject yAxis5 Dim xAxisLab xAxisLab SetTextFont theFont chartVu AddChartObject xAxisLab Dim yAxisLabl yAxisLabl SetTextFont theFont yAxisLabl SetAxisLabelsForma chartVu AddChartObject yAxis Dim yAxis yAxisLab2 SetTextFont chartVu AddChartObject theFon yAxis E Dim yAxisLab3 As New yAxisLab3 SetTextFont chartVu AddChartObject theFon yAxis t Dim yAxisLab4 As New yAxisLab4 SetTextFont chartVu AddChartObject theFont yAxis New tFont Dim yAxisLab5 As yAxisLab5 SetTex char theFont Dim axisTitleFon Dim xaxistitle As New AxisTi chartVu AddChartObject xaxis Dim xgrid As chartVu AddChartObject xgrid hePlotl As AddChar Dim char New Simpl tObject e thePl hePlot2 As AddChar Dim char New Simpl tObject e thePl lt GC hePlot3 As AddChar Dim char New Simp tObject le thePl Dim thePlot4 As G New Simp chartVu AddChar tObject le thePl thePlot5 As
526. tThreshold method The default values for the DataToolTip class assume the following 337 Data ToolTips The left mouse button pressed event is the trigger for the tooltip Change this using the DataToolTip SetButtonMask method The numeric format for the x and y values are controlled by separate NumericLabel class templates that are both initially set to the ChartObj DECIMALFORMAT format with a decimal precision of 1 Change this by creating a NumericLabel or TimeLabel object that specifies how you want the number formatted Set the x and y value templates independently using the DataToolTip SetXValueTemplate and DataToolTip SetY Value template methods The tooltip will display just the y value of the selected object Change this to display the x value or both the x and y values using the DataToolTip SetDataToolTipFormat method specifying one of the data tooltip format constants DATA TOOLTIP CUSTOM DATA TOOLTIP X DATA TOOLTIP Y DATA TOOLTIP XY ONELINE DATA TOOLTIP TWOLINE DATA TOOLTIP GROUP MULTILINE DATA TOOLTIP OHLC The tooltip popup window uses a default Sans Serif font with a size of 12 The text is justified above and to the right of the mouse cursor The default background color of the data tooltip is a pale yellow RGB 255 255 204 Change this by replacing the ChartText object used as the template for the tooltip popup window Use the DataToolTip SetTextTemplate method to replace the default template with
527. tVu new ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes chartVu AddChartObject polarAxesLabels Visual Basic Dim polarmagnitude As Double 5 0 Dim polarscale As PolarCoordinates New PolarCoordinates polarmagnitude Dim polarAxes As PolarAxes New PolarAxes polarscale Dim polarAxesLabels As PolarAxesLabels New PolarAxesLabels polarAxes polarAxesLabels SetAxisLabelsFormat ChartObj DECIMALFORMAT polarAxesLabels SetAxisLabelsDecimalPos 2 Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the polar axes to the chartVu object chartVu AddChartObject polarAxes chartVu AddChartObject polarAxesLabels Axis Labels 242 Antenna Axes Labels Class AntennaAxesLabels GraphObj ChartText AxisLabels NumericAxisLabels AntennaAxesLabels The AntennaAxesLabels class extends the NumericAxisLabels class and creates labels for objects of the AntennaAxes class The AntennaAxesLabels class labels the two parts of the antenna axes the y axis displaying the radius limits and the angular circle bounding the y axis The class extends the NumericAxisLabels class and uses that class s methods and properties for managing the label properties AntennaAxisLabels constructor There is only one main constructor for AntennaAxesLabels objects Visual Basic Overloads Public Sub New _ ByVal baseaxis As AntennaA
528. tation of the PolarPlot class and displays data in a simple scatter plot format Antenna Plot Classes AntennaPlot AntennaLinePlot AntennaScatterPlot AntennaLineMarkerPlot GraphObj AntennaAnnotation Antenna plots that use data organized as arrays of x and y values where an x value represents the radial value of a point in antenna coordinates and the y value represents the angle in degrees of a point in antenna coordinates Antenna plot types include line plots scatter plots line marker plots and an annotation class AntennaPlot This class is an abstract base class for the polar plot classes 55 Class Architecture 270 AntennaLinePlot AntennaScatterPlot AntennaLineMarkerPlot AntennaAnnotation 180 AntennaLineMarkerPlot This class is a concrete implementation of the AntennaPlot class and displays data in a simple line plot format The lines drawn between adjacent data points use antenna coordinate interpolation This class is a concrete implementation of the AntennaPlot class and displays data in a simple scatter plot format This class is a concrete implementation of the AntennaPlot class and displays data in a simple line markder plot format This class is used to highlight or mark a specific attribute of the chart It can mark a constant radial value using a circle or it can mark a constant angular value using a radial line from the origin to the outer edge of the scale Class Architecture 56 Pi
529. te chartVu AddChartObject xAxisLabl Dim yAxisLabl As New NumericAxisLabels yAxis1 yAxisLabl SetAxisLabelsFormat ChartObj CURRENCYFORMAT yAxisLabl SetColor Colors White chartVu AddChartObject yAxisLabl Dim xgridl As New ChartGrid xAxisl yAxisl ChartObj X AXIS ChartObj GRID MAJOR xgridl SetColor Colors White chartVu AddChartObject xgridl Dim ygridl As New ChartGrid xAxisl yAxisl ChartObj Y AXIS ChartObj GRID MAJOR ygridl SetColor Colors White chartVu AddChartObject ygridl Dim attribl As New ChartAttribute Colors Red 1 DashStyles Solid Colors Red Dim attrib2 As New ChartAttribute Colors Yellow 1 DashStyles Solid Colors Yellow Dim attrib3 As New ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue Dim attrib4 As New ChartAttribute Colors Green 1 DashStyles Solid Colors Green Dim attribArray As ChartAttribute attribl attrib2 attrib3 attrib4 Dim thePlotl As New GroupBarPlot pTransforml1 Datasetl _ ChartCalendar GetCalendarWidthValue ChartObj YEAR 0 75 0 0 attribArray ChartObj JUSTIFY CENTER thePlotl SetBarOverlap 0 0 chartVu AddChartObject thePlotl Histogram Plots Class HistogramPlot GraphObj ChartPlot GroupPlot HistogramPlot The HistogramPlot class extends the GroupPlot class and displays histogram plots A histogram plot is a collection of rectangular objects with independent positions widths and 291 Simple
530. tem gt lt Menultem gt lt Menu gt lt my ChartView Margin 18 11 16 6 Name chartView 1 Grid Row 1 7 lt Grid gt lt Window gt Note how the Grid now has two rows with the second row Grid Row 1 defined as 20 times the height of the first row Grid Row 0 The menu is placed in the first row and the chart placed in the second row Display the Window1 asml vb behind code file It will look something like this Class Windowl End Class Add a reference to the QCChart2DWPF namespace com quinncurtis chart2dwpf in the using section of the program Imports com quinncurtis chart2dwpf In our WPFChartApplicationl example we also add references to some other Net libraries in support of printing and Image files Imports System Printing Imports Microsoft Win32 Imports System IO Add a new simple class file named SimpleScatterPlot to the project Alternatively select Add Existing Item and select the file SimpleScatterPlot vb from our WPFChartApplicationl example folder If you do that and you are using namespaces make sure you change the declared namespace at the top of the file namespace WpfChartApplicationl to the one your project uses probably namespace WpfApplicationl If you aren t using namespaces delete the namespace reference at the top and bottom of the source file 423 Using QCChart2D for WPF to Create Windows Applications Add New Item WpfApplication1 Categories Templates Common Item
531. ter Rendering 200 cp DoPrintPage End If End If End Sub ChartPrint example printing a Grid a Panel object extracted from the example program LinePlotSalesVolume class Windowl ChartPrint cp null private void PrinterDialog object sender RoutedEventArgs e if gridi Fe null cp new ChartPrint gridl cp DoPrintDislog 07 private void PrintGraph object sender RoutedEventArgs e if gridl t null if cp null cp new ChartPrint gridl cp DoPrintDislog O0 else cp DoPrintPage j T VB Dim cp As ChartPrint Nothing Private Sub PrinterDialog ByVal sender As Object ByVal e As RoutedEventArgs If gridl IsNot Nothing Then cp New ChartPrint gridl ecp DoPrintDialog End If End Sub Private Sub PrintGraph ByVal sender As Object ByVal e As RoutedEventArgs If gridl IsNot Nothing Then If cp Is Nothing Then cp New ChartPrint gridl cp DoPrintDialog Else cp DoPrintPage End If End If End Sub Capturing the Chart as a Buffered Image Class BufferedImage ChartObj 401 File and Printer Rendering t BufferedImage The BufferedImage class creates a RenderTargetBitmap object that is used to render a ChartView object into an image buffer The rendering takes place when the BufferedImage Render method or BufferedImage SaveImage method is called Inernally a BitmapEncoder object is used to convert the bitmap to a variety of image file formats If you want to save a sing
532. tercept As Double Ct public void SetAxisIntercept double intercept SetAxisTicks method Visual Basic Overloads Public Sub SetAxisTicks ByVal tickorigin As Double _ ByVal tickspace As Double _ ByVal ntickspermajor As Integer _ Visual Basic Overloads Public Sub SetAxisTicks ByVal tickorigin As Double _ ByVal tickspace As Double _ ByVal nminortickspermajor As Integer ByVal minorticklength As Double _ ByVal majorticklength As Double _ 207 Axes ByVal tickdir As Integer Ct public void SetAxisTicks double tickorigin double tickspace int ntickspermajor LE public void SetAxisTicks double tickorigin double tickspace int nminortickspermajor double minorticklength double majorticklength int tickdir intercept Sets the intercept of this axis with the perpendicular axis in physical coordinates tickorigin The tick marks start at this value tickspace Not used in event axis ntickspermajor Specifies the number of minor tick marks per major tick mark minorticklength The length of minor tick marks in Net device coordinates majorticklength The length of major tick marks in Net device coordinates tickdir The direction of the tick marks Use one of the tick mark direction constants AXIS MIN AXIS CENTER or AXIS MAX Use the SetLineWidth SetLineStyle and SetColor methods to customize the drawing properties of the lines used to draw the axis line and tick marks
533. tesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Arrow plot example extracted from the example program ScatterPlots class ArrowChart C GroupDataset Datasetl new GroupDataset First x1 y1 Datasetl SetAutoScaleNumberGroups 1 CartesianCoordinates pTransforml new CartesianCoordinates ChartObj LINEAR SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleX 0 10 pTransforml SetScaley 0 10 plransforml SetGraphBorderDiagonal 0 15 15 90 O 75 F Define axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Blue 1 DashStyles Solid attribl SetFillColor Colors Blue attribl SetFillFlag true Arrow basearrow new Arrow ArrowPlot thePlotl new ArrowPlot pTransforml Datasetl basearrow attribl chartVu AddChartObject thePlotl1 Visual Basic Dim Datasetl As New GroupDataset First x1 yl Datasetl SetAutoScaleNumberGroups 1 Dim pTransforml As New CartesianCoordinates ChartObj LINEAR SCALE _ ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetScaleX 0 10 pTransforml SetScaleY 0 10 pTransforml SetGraphBorderDiagonal 0 15 0 15 0 9 0 75 Dim background As New Background pTransforml _ ChartObj PLOT BACKGROUND Colors White chartVu AddChartObject background Define axes ax
534. that the scale should be re scaled once the final zoom rectangle is ascertained Enable the zoom object after creation using the ChartZoom SetEnable true method Retrieve the physical coordinates of the zoom rectangle using the ChartZoom GetZoomMin and GetZoomMax methods Restrict zooming in the x or y direction using the SetZoomXEnable and SetZoomY Enable methods Set the rounding mode associated with rescale operations using the SetZoomXRoundMode and SetZoomY RoundMode methods Call the ChartZoom PopZoomStack method at any time and the chart scale reverts to the minimum and maximum values of the previous zoom operation Repeated calls to the PopZoomStack method return the chart scale is to its original condition after which the PopZoomStack method has no effect 327 Zooming Integrated zoom stack processing Starting with Revision 2 0 zoom stack processing is internal to ChartZoom class There is no need to subclass the ChartZoom class in order to implement a zoom stack Just set the ChartZoom InternalZoomStackProcessing property true zoomObj InternalZoomStackProcesssing true Return to a previous zoom level by right clicking the mouse Change the zoom stack button using the ZoomStackButtonMask property Setting it to MouseButton Left MouseButton Right or MouseButton Middle Aspect Ratio Correction Starting with Revision 2 0 you can force the zoom rectangle to maintain a fixed aspect ratio Use the ChartZoom ArCorrectionMode pr
535. the bubble plot The number of groups must be two The dataset values for X and Y 0 set the position of the center of each bubble and the values for Y 1 set the size of each bubble either the area SIZE BUBBLE AREA or the radius SIZE BUBBLE RADIUS bubblesizetype Sets whether the circle representing each bubble plot has a radius or an area proportional to the Y 1 data values in the group dataset Set using one of the bubble plot type constants SIZE BUBBLE RADIUS or SIZE BUBBLE AREA attrib Specifies the attributes line color and fill color of the bubble plot circles An individual bubble in a bubble plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Bubble plot example extracted from the example program ScatterPlots class BubbleChart C TimeGroupDataset Datasetl new TimeGroupDataset First x1 y1 Dataset1 SetStackMode ChartObj AUTOAXES STACKED TimeCoordinates pTransforml new TimeCoordinates ChartObj TIME SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR plransforml SetGraphBorderDiagonal 0 15 15 80 0 75 Define axes axes labels and grids ChartAttribute attribl new ChartAttribute Colors Black 0 DashStyles Solid attribil SetFillOpolor Color Fromkgb 177 33 33 attribl SetFillFlag true BubblePlot thePlotl new B
536. the CartesianCoordinates class and implements a coordinate system used to plot polar coordinate data This class is a subclass of the CartesianCoordinates class and implements a coordinate system used to plot antenna coordinate data The antenna coordinate system differs from the more common polar coordinate system in that the radius can have plus minus values the angular values are in degrees and the angular values increase in the clockwise direction This class is a subclass of the CartesianCoordinates class and implements a coordinate system used to plot ChartEvent based data This class consolidates the common line and fill attributes as a single class Most of the graph objects have a property of this class that controls the color line thickness and fill attributes of the object The ChartGradient class expands the number of color options available in the ChartAttribute class ChartAttribute ChartGradient This class consolidates the common line and fill attributes associated with a GraphObj object into a single class A ChartGradient can be added to a ChartAttribute object defining a multicolor gradient that is applied wherever the color fill attribute is normally used 35 Class Architecture Auto Scaling Classes AutoScale LinearAutoScale LogAutoScale TimeAutoScale ElapsedTimeAutoScale EventAutoScale Usually programmers do not know in advance the scale for a chart Normally the program needs to analyze the cur
537. thirty 30 days If you continue to use the SOFTWARE after the thirty 30 days without paying the license fee you will be using the SOFTWARE on an unlicensed basis Redistribution of 30 Day Trial Copy Bear in mind that the 30 Day Trial version of the SOFTWARE becomes invalid 30 days after downloaded from our web site or one of our sponsor s web sites If you wish to redistribute the 30 day trial version of the SOFTWARE you should arrange to have it redistributed directly from our web site If you are using SOFTWARE on an evaluation basis you may make copies of the evaluation SOFTWARE as you wish give exact copies of the original evaluation SOFTWARE to anyone and distribute the evaluation SOFTWARE in its unmodified form via electronic means Internet BBS s Shareware distribution libraries CD ROMs etc You may not charge any fee for the copy or use of the evaluation SOFTWARE itself You must not represent in any way that you are selling the SOFTWARE itself You must distribute a copy of this EULA with any copy of the SOFTWARE and anyone to whom you distribute the SOFTWARE is subject to this EULA C Redistributable License The standard Developer License permits the programmer to deploy and or distribute applications that use the Quinn Curtis SOFTWARE royalty free We cannot allow developers to use this SOFTWARE to create a graphics toolkit a library or any type of graphics component that will be used in combination with a program development
538. this many rows before starting the read operation Chart Datasets 88 columnskip For each row of data skip this many columns before reading the first value from the row Example of creating a contour dataset from an array of Point3D C int nrows 11 ncols 11 int i J count 0 double x Ye cms double startx 6 0 starty 6 0 double stepx 12 0 nrows 1 stepy 12 0 ncols 1 Point3D pointarray pointarray new Point3D nrows ncols x startx y starty for i 0 i lt nrows Z i x startx for J 0 7 lt neolss j pointarray count new Point3D z 2000 850 Math Sin Math Sqrt x x yty pointarray count SetLocation x y z x stepx count4r y stepy This method triangulates data into a surface ContourDataset datasetl new ContourDataset Contour Dataset pointarray This method uses the characteristic that the data is an even spaced grid ContourDataset dataset2 new ContourDataset Contour Dataset pointarray nrows ncols Visual Basic Dim nrows As Integer 11 Dim ncols As Integer 11 Dim count As Integer Dim i j As Integer Dim x y z As Double Dim tempx tempy As Double Dim startx As Double 6 0 Dim starty As Double 6 0 Dim stepx As Double 12 0 nrows 1 Dim stepy As Double 12 0 ncols 1 Dim pointarray nrows ncols 1 As Point3D ll iwl x startx y starty For i 0 To nrows 1 x startx F
539. though this does not have to be the case TimeSimpleDataset datasetl new TimeSimpleDataset Sales1 xData yDatal TimeSimpleDataset dataset2 new TimeSimpleDataset Sales2 xData yData2 TimeSimpleDataset dataset3 new TimeSimpleDataset Sales3 xData yData3 TimeSimpleDataset datasetsArray new TimeSimpleDataset 3 datasetsArray 0 datasetl datasetsArray 1 dataset2 datasetsArray 2 dataset3 TimeCoordinates simpleTimeScale new TimeCoordinates simpleTimeScale AutoScale datasetsArray Visual Basic Dim xData As ChartCalendar L New ChartCalendar 1996 ChartObj FEBRUARY 5 New ChartCalendar 1996 ChartObj MARCH 5 _ New ChartCalendar 1996 ChartObj APRIL 5 New ChartCalendar 1996 ChartObj MAY 5 _ New ChartCalendar 1996 ChartObj JUNE 5 New ChartCalendar 1996 ChartObj JULY 5 _ New ChartCalendar 1996 ChartObj AUGUST 5 _ New ChartCalendar 1996 ChartObj SEPTEMBER 5 _ New ChartCalendar 1996 ChartObj OCTOBER 5 _ New ChartCalendar 1996 ChartObj NOVEMBER 5 Dim yDatal As Double 10 22 33 44 55 46 33 25 14 9 Dim yData2 As Double 20 12 43 54 15 26 63 25 24 19 Dim yData3 As Double 130 B2 13 4 425 Wh I3 355 94 19 All of the datasets reference the same xData array of ChartCalendar dates though this does not have to be the case Dim datasetl As TimeSimpleDataset New TimeSimpleDataset Sal
540. ting point of a chart is the ChartView class The ChartView class derives from the WPF System Windows Controls UserControl class The ChartView class manages a collection of chart objects in a chart and automatically updates the chart objects whenever the control needs to redraw itself Since the ChartView class is a subclass of the UserControl class it can act as a container for other WPF components such as buttons and checkboxes Data Classes ChartDataset SimpleDataset TimeSimpleDataset ElapsedTimeSimpleDataset ContourDataset EventSimpleDataset GroupDataset TimeGroupDataset ElapsedTimeGroupDataset EventGroupDataset The dataset classes organize the numeric data associated with a plotting object There are two major types of data supported by the ChartDataset class The first is simple xy data where for every x value there is one y value The second data type is group data where every x value can have one or more y values ChartDataset The abstract base class for the other dataset classes It contains data common to all of the dataset classes such as the x value array the number of x values the dataset name and the dataset type SimpleDataset Represents simple xy data where for every x value there is one y value TimeSimpleDataset A subclass of SimpleDataset it is initialized using ChartCalendar dates a wrapper around the System DateTime value class in place of the x or y values ElapsedTimeSimpleDataset A subclass of S
541. tistical error associated with the data point The number of groups must be two The X Y 0 values of the group dataset represent the xy position of the first error bar lines the X Y 1 values of the group dataset represent the xy position of the second error bar lines The error bar lines center on the X Connecting the error bar lines with a perpendicular line is an option ErrorBarPlot constructor Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal rbarwidth As Double _ ByVal attrib As ChartAttribute Ct public ErrorBarPlot PhysicalCoordinates transform GroupDataset dataset double rbarwidth ChartAttribute attrib transform The coordinate system for the new ErrorBarPlot object The number of groups must be two dataset The error bar plot represents the values in this group dataset The number of groups must be two The X Y 0 values of the group dataset represent the xy position of the first error bar lines the X Y 1 values of the group dataset represent the xy position of the second error bar lines rbarwidth The width of the error bars attrib Specifies the attributes line color and line style for the error bars An individual set of error bars in an error bar plot object can have unique attributes Use the objects SetSegmentAttributesMode and SetSegmentAttributes methods in the manner described for SimplePlot objects Fl
542. tl SortByX True Dim thePlotl As SimpleLinePlot _ New SimpleLinePlot pTransforml Datasetl attribl thePlotl SetLineStyle DashStyles DashDot chartVu AddChartObject thePlotl Dim attrib2 As New ChartAttribute Colors Yellow 3 DashStyles Solid Dataset2 SortByX True Dim thePlot2 As SimpleLinePlot New SimpleLinePlot pTransforml Dataset2 attrib2 thePlot2 SetLineStyle DashStyles Dash chartVu AddChartObject thePlot2 Dim transparentRed As Color Color FromArgb 200 255 0 0 Dim transparentGreen As Color Color FromArgb 200 0 255 0 Dim lossAttrib As New ChartAttribute transparentRed 1 DashStyles Solid transparentRed Dim profitAttrib As New ChartAttribute transparentGreen 1 DashStyles Solid transparentGreen profitAttrib SetFillFlag True lossAttrib SetFillFlag True profitAttrib SetLineFlag False lossAttrib SetLineFlag False Must call the linePlot or similar function before setting segment attributes so that it know size of segment buffer to allocate Dim thePlot3 As SimpleLinePlot New SimpleLinePlot pTransforml Dataset3 profitAttrib Dim yValues As Double Dataset3 GetYData thePlot3 SetSegmentAttributesMode True For i 0 To Dataset3 GetNumberDatapoints 1 If yValues i 0 0 Then thePlot3 SetSegmentAttributes i profitAttrib Else thePlot3 SetSegmentAttributes i lossAttrib End If Next i chartVu AddChartObject thePlot3 Simple Bar Plots Class Sim
543. to the change in the font size and line thickness If the charts aspect ratio changes drastically the font size and line thickness will resize to reflect the dimension that was reduced the most This minimizes the condition where text overlaps though it may make the text unreadable if the chart size changes from large to a small with a large aspect ratio change MANUAL RESIZE OBJECTS The Chart View 168 The ResizeMultiplier for each object has an initial value of 1 0 Unlike the NO RESIZE OBJECTS mode the value can be changed The programmer must explicitly set the ResizeMultiplier for any objects requiring a size change using the GraphObj SetResizeMultiplier method Set the ResizeMode to automatically text and line objects when the ChartView size changes chartVu SetResizeMode ChartObj AUTO RESIZE OBJECTS ChartView View Modes A ChartView window can interact with a parent container creating a couple of interesting view modes The first is to place the ChartView object in a WPF window and give it an explicit size as in the example below TabItem Header FixedSizeFrame Name tabItem1 gt Grid my ChartView Margin 18 11 16 6 Name chartView1 Height 500 Width 750 gt lt Grid gt lt TablItem gt Size the parent window smaller than the ChartView size and the window clips out the portion of the ChartView not viewable Size the parent window larger than the ChartView and extra space is left
544. tor to make sure that the scale shows the entire bubble The example under CellPlot demonstrates this Candlestick Plots Class CandlestickPlot GraphObj ChartPlot GroupPlot CandlestickPlot The CandlestickPlot class is a concrete implementation of the GroupPlot class It extends the GroupPlot class and displays stock market data in an open high low close format common in financial technical analysis Every item of the plot is a group of two horizontal lines representing High and Low values which are connected with a vertical line and a box representing the Open and Close values If the Open value is greater than the Close value for a particular candlestick the box is filled otherwise it is unfilled The number of groups must be four The data in the dataset is organized in the following manner The Y 0 values of the group dataset represent the values for Open the Y 1 values for High the Y 2 values for Low and the Y 3 values for Close CandlestickPlot constructor Visual Basic Overloads Public Sub New _ 277 Simple Plot Objects ByVal transform As PhysicalCoordinates ByVal dataset As GroupDataset _ ByVal rwidth As Double _ ByVal defaultattrib As ChartAttribute ByVal fillattrib As ChartAttribute Ct public CandlestickPlot PhysicalCoordinates transform GroupDataset dataset double rwidth ChartAttribute defaultattrib ChartAttribute fillattrib transform The coordinate system
545. transform As CartesianCoordinates _ ByVal nmarkertype As Integer ByVal rsize As Double MyBase New achartview thetransform nmarkertype rsize End Sub New Public Overrides Sub OnMouseUp ByVal mouseevent As MouseButtonEventArgs MyBase OnMouseUp mouseevent Add your own code here End Sub OnMouseUp End Class CustomChartDataCursor Dim dataCursorObj As New _ CustomChartDataCursor chartVu pTransforml ChartObj MARKER HVLINE 8 0 dataCursorObj SetEnable True chartVu SetCurrentMouseListener dataCursorObj A marker can be placed at any xy coordinate location in a graph It is often desirable to place a marker at the exact location of a data point in one of the datasets plotted in the graph Many 315 Data Markers and Data Cursors applications require the user to click on the approximate location of a point and then the software must find the data point nearest that click and mark it The DataCursor and Marker classes in combination with the plot objects CalcNearestPoint methods accomplish this The DataCursor class positions the mouse cursor and retrieves the initial xy coordinates The CalcNearestPoint method for each plot object SimpleLinePlot ScatterPlot etc in the graph determines the nearest data point to the mouse cursor for that object Once all the plot objects are checked the data point nearest the mouse cursor position is marked by placing a Marker object at that exact xy location The example below extends the p
546. tructor for TimeAxisLabels objects Visual Basic Overloads Public Sub New _ ByVal baseaxis As ElapsedTimeAxis _ Cf public ElapsedTimeAxisLabels ElapsedTimeAxis baseaxis LE baseaxis This is the elapsed time axis the axis labels are for Axis Labels 232 Other axis label properties font rotation time format axis labels direction and numeric precision are automatically set These properties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Overloads Public Sub SetAxisLabels ByVal font As ChartFont _ ByVal rotation As Double _ ByVal labdir As Integer _ ByVal decimalpos As Integer _ ByVal timeformat As Integer _ ByVal labelends As Integer _ ByVal labcolor As Color Ct public void SetAxisLabels ChartFont font double rotation ant labdir int decimalpos int timeformat int labelends Color labcolor SetAxisLabelsFormat method Visual Basic Public Sub SetAxisLabelsFormat _ ByVal format As Integer _ Ct public void SetAxisLabelsFormat int format font The font object used to display the axis label text rotation The rotation in degrees of label text in the normal viewing plane labdir The justification of the axis label AXIS MIN or AXIS MAX with respect to the tick mark endpoint decimal Sets the number of digits to the right of the decimal point for elapsed time axis labels lab
547. ts It contains a reference to a ChartDataset derived class containing the data associated with the plot Contour Plot of the Heat Distribution of a Plasma Torch Degrees C 1000 0 1200 0 1400 0 1600 0 1800 0 1900 0 N DI 2000 0 ENS UX 2100 0 BM Y TZ 2200 0 m S 2400 0 2600 0 2800 0 3000 0 a Ke The contour plot routines work with either an even grid or a random shown grid ContourPlot This class is a concrete implementation of the ChartPlot class and displays a contour plot using either lines or regions filled with color Group Plot Classes GroupPlot ArrowPlot BoxWhiskerPlot Class Architecture 46 BubblePlot CandlestickPlot CellPlot ErrorBarPlot FloatingBarPlot FloatingStackedBarPlot GroupBarPlot GroupVersaPlot HistogramPlot LineGapPlot MultiLinePlot OHLCPlot StackedBarPlot StackedLinePlot GroupVersaPlot Group plots use data organized as arrays of x and y values where there is one or more y for every x Group plot types include multi line plots stacked line plots stacked bar plots group bar plots error bar plots floating bar plots floating stacked bar plots open high low close plots candlestick plots arrow plots histogram plots cell plots box and whisker plots and bubble plots GroupPlot This class is an abstract base class for all group plot classes Flow Analysis Stealth Project The size position and direction of every arrow in an arr
548. ttribl magnifyObj SetButtonMask MouseButton Left magnifyObj SetEnable true magnifyObj UpdateDuringDrag true magniViewl SetCurrentMouseListener magnifyObj magniViewl PreferredSize new Size 600 300 magniView2 PreferredSize new Size 600 300 Visual Basic Private magniViewChartl As MagniViewChart Nothing Private magniViewChart2 As MagniViewChart Nothing In this example we make the common to both charts for both Regardless because we must use the same data instances of this chart You will probably be initializing the data externally Zooming 334 of how you do it when using the MagniView class you will need two instances of the same class with the same data Private xl As Double Nothing Private yl As Double Nothing Private y2 As Double Nothing Private Datasetl As SimpleDataset Private Dataset2 As SimpleDataset Public Sub InitializeMagniViewCharts magniViewChartl New MagniViewChar magniViewChart2 New MagniViewChar InitializeData Define charts using data magniViewChartl InitializeChart Da using left mouse button False magniViewChart2 InitializeChart Da t magniViewl t magniView2 Hook up the MagniView class to t Dim magnifyObj As New MagniView magniViewl New Dimension 0 05 0 2 he source and Dim attribl As New ChartAttribute Colors Black magnifyObj ChartObjAttributes at Eribl magnifyObj SetButtonMask
549. ttributes methods in the manner described for SimplePlot objects Each histogram bar can be labeled with the Y 0 group value bar bar height using the bar data point methods see the example below Histogram plot example extracted from the example program Bargraphs class HistogramBars C int nnumpnts 6 int numgroups 2 double xl new double nnumpnts double yl new double numgroups nnumpnts Simple Plot Objects 292 height width xl 0 0r yl 0 0 12 yl 1 0 13 xl 1 13 y1 0 1 97 yl 1 1 7 x1 2 20 y1 0 2 80 y1 1 2 10 x1 3 30 y1 0 3 44 y1 1 3 10 x1 4 40 y1 0 4 28 y1 1 4 20 xl 5 50r x1 0 5 47 vlll1 5 20 theFont new ChartFont SansSerif 10 FontStyles Normal FontWeights Bold GroupDataset Datasetl new GroupDataset Actual Sales x1 y1 CartesianCoordinates pTransforml new CartesianCoordinates pTransforml SetScaleStartY 0 pTransforml SetScaleStartX 0 pTransforml SetScaleStopX 80 pTransforml SetScaleStopY 1 00 prIransforml SetGraphBorderDiagonal 0 15 15 9 0 75 Background graphbackground new Background pTransforml ChartObj GRAPH BACKGROUND Color FromRgb 230 70 70 Color FromBgb 90 20 155 ChartObj Y AXIS chartVu AddChartObject graphbackground Background plotbackground new Background pTransforml ChartObj PLOT BACKGROUND Colors Black chartVu AddChartObject plotbackground D
550. u can modify the appearance by adjusting the following properties Regardless of how you initially setup the graph if you use the zoom routines or the RTScrollFrame routines in the QCRTGraph software the look of the axes will always revert to our auto scaling not your modified setup Because we cannot predict what you will do and cannot scale a completely different range of values based on whatever logic you use TickRule Controls the tick mark logic of the axis User one of the TICK RULE enumeration constants NO TICKS do not display any tick marks No tick marks means no axis labels MINOREVENT MAJOREVENT display a minor tick mark every AxisMinorNthTick event and a major tick mark every AxisMinorTicksPerMajor MAJOREVENT display a major tick mark every AxisMajorNthTick event MINORCROSSOVEREVENT MAJORCROSSOVEREVENT display a minor tick mark every AxisMinorNthTick minor crossover event and a major tick mark every AxisMajorNthTick major crossover event The minor and major crossover events are controlled by the MajorTickCrossoverEvent and MinorTickCrossoverEvent properties of the EventAxis The default is ChartObj TICK RULE MINORCROSSOVEREVENT MAJORCROSSOVEREVENT The term crossover event means that a field of date time timestamp changes If you specify a MinorTickCrossoverEvent of ChartObj SECOND and an AxisMinorNthTick of 15 this will cause a minor tick mark to be displayed every 15 second if an event falls with
551. ubblePlot pTransforml Datasetl ChartObj SIZE BUBBLE RADIUS attribl chartVu AddChartObject thePlotl Visual Basic Dim Datasetl As New TimeGroupDataset First xl yl Datasetl SetStackMode ChartObj AUTOAXES STACKED Dim pTransforml As New TimeCoordinates ChartObj TIME SCALE ChartObj LINEAR SCALE pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR pTransforml SetGraphBorderDiagonal 0 15 0 15 0 8 0 75 Simple Plot Objects 276 Define axes axes labels and grids Dim attribl As New ChartAttribute Colors Black 0 DashStyles Solid attribl SetFillColor Oclor FromEBgbil77 33 33 attribl SetFillFlag True Dim thePlotl As New BubblePlot pTransforml Datasetl _ Chartoby SIZE BUBBLE RADIUS attribl chartVu AddChartObject thePlotl Note the use of the GroupDataset method SetStackMode This forces the auto scale routine to look at the sum of y values across groups as is needed to auto scale stacked plots It is useful for bubble plots of type SIZE BUBBLE RADIUS because the y 0 value represents the y position of the bubble and the y 1 value the radius in physical coordinates Adding the two for each bubble gives the maximum y value for the scale needed to display the bubble If SIZE BUBBLE AREA is used you may want to restrict the auto scale routines to the just look at the bubble position using SetAutoScaleNumberGroups 1 as seen in the ArrowPlot example You could then add in some fudge fac
552. uctor or later using the setMarkerSize method MARKER BOX The marker is a box centered on the marker position Set the size of the box using WPF device coordinates in the object constructor or later using the setMarkerSize method Data Markers and Data Cursors 312 Drop a marker anywhere on a plot by specifying the coordinates The example below places a 10 pixel wide marker in the center of the plot area Simple marker example C CartesianCoordinates pTransforml new CartesianCoordinates 0 0 0 0 10 0 20 0 pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR double xpos 5 0 double ypos 10 0 Marker amarker new Marker pTransforml1 ChartObj MARKER BOX xpos ypos 10 ChartObj PHYS POST Z theChartView AddChartObject amarker Visual Basic Dim pTransforml As CartesianCoordinates _ New CartesianCoordinates 0 0 0 0 10 0 20 0 pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR Dim xpos As Double 5 0 Dim ypos As Double 10 0 Dim amarker As Marker New Marker pTransforml ChartObj MARKER BOX _ xpos ypos 10 ChartObj PHYS POS theChartView AddChartObject amarker Data Cursors Class DataCursor GraphObj Marker DataCursor Data cursors are an extension of the marker class Data cursors combine the Net mouse event delegates with the Marker class creating a marker that tracks the mouse and updates dynamically This constr
553. uctor creates a new DataCursor object using the specified coordinate system marker type and marker size DataCursor constructor Visual Basic Overloads Public Sub New _ 313 Data Markers and Data Cursors ByVal component As ChartView _ ByVal transform As PhysicalCoordinates ByVal nmarkertype As Integer _ ByVal rsize As Double Ct public DataCursor ChartView component PhysicalCoordinates transform int nmarkertype double rsize component A reference to the ChartView object that the chart is placed in transform The PhysicalCoordinates object associated with the data cursor nmarkdertype The marker type Use one of the Marker marker type constants MARKER VLINE MARKER BOX rsize The size in WPF device coordinates of the MARKER BOX and MARKER CROSS style cursors See the Marker constructor description for more information about the Marker type constants Create the DataCursor object and then install it using the ChartView SetCurrentMouseListener method This adds the DataCursor object as a MouseListener to the ChartView object Enable Disable the function using DataCursor SetEnable method Call DataCursor SetCurrentMouseListener null to remove the object as a mouse listener for the chart view Since the DataCursor class implements mouse event delegates it has methods implementing the mouse events MouseMove OnDoubleClick OnClick OnMouseDown and OnMouseUp The default usage of the DataCursor class creat
554. underlying coordinate system EventAxis constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal tickrule As TICK RULE _ ByVal axtype As Integer _ Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tickrule As TICK RULE _ ByVal axtype As Integer _ ByVal minval As TimeSpan _ ByVal maxval As TimeSpan _ C public ElapsedTimeAxis PhysicalCoordinates transform Axes 206 TICK RULE tickrule int axtype public ElapsedTimeAxis PhysicalCoordinates transform TICK RULE tickrule int axtype double minval double maxval transform Places the axes in the coordinate system defined by transform tickrule Specifies the tick rule used to calculated the tick marks NO TICKS MINOREVENT MAJOREVENT MAJOREVENT MINORCROSSOVEREVENT MAJORCROSSOVEREVENT MAJORCROSSOVEREVENT axtype Specifies if the axis is an x axis X AXIS or a y axis Y AXIS minval Sets the minimum value for the axis maxval Sets the maximum value for the axis Other axis properties minor tick mark spacing number of minor tick marks per major tick mark axis intercept tick mark lengths tick mark direction and axis tick mark origin are automatically calculated using an auto axis method Set these properties explicitly if you need to override the automatically calculated values SetAxisIntercept method Visual Basic Public Sub SetAxisIntercept ByVal in
555. ur levels with a specific color Line and Filled Contour Plots Class ContourPlot GraphObj ChartPlot ContourPlot The ContourPlot class is a concrete implementation of the ChartPlot class and displays a contour plot using either lines or regions filled with color The two constructors below differ only by the inclusion of the contour line flags and the contour label flags in the second constructor ContourPlot constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As ContourDataset ByVal contourlevels As Double _ ByVal attribs As ChartAttribute _ ByVal numcontourlevels As Integer _ ByVal contourtype As Integer Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal dataset As ContourDataset ByVal contourlevels As Double _ ByVal attribs As ChartAttribute ByVal blineflags As Boolean _ ByVal blabelflags As Boolean _ ByVal numcontourlevels As Integer _ ByVal contourtype As Integer _ Ct public ContourPlot PhysicalCoordinates transform ContourDataset dataset double contourlevels ChartAttribute attribs int numcontourlevels int contourtype F public ContourPlot PhysicalCoordinates transform ContourDataset dataset double contourlevels ChartAttribute attribs bool blineflags bool blabelflags int numcontourlevels int contourtype t
556. useListener method This adds the MoveData object as a MouseListener to the ChartView object Enable Disable the function using MoveData SetEnable method Call MoveData SetCurrentMouseListener null to remove the object as a mouse listener for the chart view Set the threshold distance for deciding if the nearest data point found is a hit using the MoveData SetHitTestThreshold method Moving Objects and Data Points 322 Moving datapoints example See the class MoveDatapoint for a more complicated example C ChartView chartVu new ChartView CartesianCoordinates pTransforml new CartesianCoordinates 0 0 0 0 10 0 20 0 pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR ChartObj AUTOAXES FAR MoveData mouselistener new MoveData chartVu pTransforml mouselistener SetMarkerType ChartObj MARKER CROSS mouselistener SetMarkerSize 12 mouselistener SetMoveMode ChartObj MOVE Y mouselistener SetEnable true chartVu SetCurrentMouseListener mouselistener Visual Basic Dim chartVu As ChartView New ChartView Dim pTransforml As CartesianCoordinates _ New CartesianCoordinates 0 0 0 0 10 0 20 0 pTransforml AutoScale Datasetl ChartObj AUTOAXES FAR _ ChartObj AUTOAXES FAR Dim mouselistener As MoveData New MoveData chartVu pTransforml mouselistener SetMarkerType ChartObj MARKER CROSS mouselistener SetMarkerSize 12 mouselistener SetMoveMode ChartObj MOVE Y mouselistener SetEnable
557. using the MoveMode property Set MoveMode to MOME XY for unrestricted movement If you have multiple coordinate systems in the chart you can move them all simultaneously by setting the MultiTransformMove property true Otherwise only the coordinate system passed into the constructor is updated with the move information Moving the coordinate system Extracted from the ZoomExamples MoveCoordinates example C Moving Objects and Data Points 324 TimeSimpleDataset Datasetl new TimeSimpleDataset First tradingDay StockPrice TimeCoordinates pTransforml new TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES FAR MoveCoordinates movecoords new MoveCoordinates chartVu pTransforml movecoords SetEnable true chartVu SetCurrentMouseListener movecoords Visual Basic Dim Datasetl As New TimeSimpleDataset First timeData dataValues Dim pTransforml As New TimeCoordinates pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES FAR Dim movecoords As New MoveCoordinates chartVu pTransforml movecoords SetEnable True chartVu SetCurrentMouseListener movecoords 15 Zooming and Magnification ChartZoom MagniView Zooming is the interactive re scaling of a charts physical coordinate system and the related axes based on limits defined by clicking and dragging a mouse inside the current graph window A typical use of zooming is in applications wher
558. value used to initialize the label timeformat The format used to convert the time span value to a text stringUse one of the TIMEDATAFORMAT constants TIMEDATEFORMAT NONE TIMEDATEFORMAT 24HMS TIMEDATEFORMAT 24HM TIMEDATEFORMAT MS StringLabel constructors Visual Basic Overloads Public Sub New _ ByVal transform As PhysicalCoordinates ByVal tfont As ChartFont _ ByVal tstring As String _ ByVal x As Double _ ByVal y As Double _ ByVal npostype As Integer Overloads Public Sub New _ ByVal transform As PhysicalCoordinates _ ByVal tfont As ChartFont _ ByVal tstring As String _ ByVal x As Double _ ByVal y As Double _ ByVal npostype As Integer _ ByVal xjust As Integer _ ByVal yjust As Integer _ ByVal rotation As Double Ct public StringLabel PhysicalCoordinates transform ChartFont tfont string tetring double x double y int npostype public StringLabel PhysicalCoordinates transform ChartFont tfont string tstring double x double y int npostype int xjust int yjust double rotation tstring A reference to a string object Text Classes 380 Place text in a time coordinate system TimeCoordinates by converting the time x position to milliseconds and using the milliseconds as the x position value NumericLabel and StringLabel example extracted from the example program MouseListeners class MoveDatapoints C classlAverage Datasetl GetAve
559. w TimeGroupDataset Stock Data xValues stockPriceData pTransforml new TimeCoordinates pTransforml SetWeekType weekmode pTransforml AutoScale Datasetl ChartObj AUTOAXES NEAR ChartObj AUTOAXES NEAR pTransforml SetGraphBorderDiagonal 0 1 15 90 0 75 SetInitialDates pTransforml Background graphbackgroundl new Background pTransforml ChartObj GRAPH BACKGROUND Colors White Colors LightGray ChartObj Y AXIS chartVu AddChartObject graphbackgroundl Background plotbackgroundl new Background pTransforml ChartObj PLOT BACKGROUND Colors White chartVu AddChartObject plotbackground1 ChartAttribute attribl new ChartAttribute Colors Red 1 DashStyles Solid Colors Red ChartAttribute attrib2 new ChartAttribute Colors Yellow 1 DashStyles Solid Colors Yellow ChartAttribute attrib3 new ChartAttribute Colors Blue 1 DashStyles Solid Colors Blue ChartAttribute attrib4 new ChartAttribute Colors Green 1 DashStyles Solid Colors Green hertEAttribute attribArray attribl attrib2 attrib3 sttrib4 y ttribl SetFillFlag true thePlotl new FloatingStackedBarPlot pTransforml Datasetl ChartCalendar GetCalendarWidthValue ChartObj DAY OF YEAR 0 75 attribArray ChartObj JUSTIFY CENTER hePlotl SetFastClipMode ChartObj FASTCLIP X chartVu AddChartObject thePlotl DC et Visual Basic Dim Datasetl As New TimeGroupDataset Stock Data xVa
560. we want to display stock O H L C data volume and NASDAQ Only one of these datasets can be selected at a time by the tooltip double open stockPriceData 0 selectedindex double high stockPriceData 1 selectedindex double low stockPriceData 2 selectedindex double close stockPriceData 3 selectedindex double nasdaq NASDAQData selectedindex double volume stockVolumeData selectedindex String openObj ChartSupport NumToString open ChartObj DECIMALFORMAT 2 String highObj ChartSupport NumToString high ChartObj DECIMALFORMAT 2 String lowObj ChartSupport NumToString low ChartObj DECIMALFORMAT 2 String closeObj ChartSupport NumToString close ChartObj DECIMALFORMAT 2 String volumeObj ChartObj DECIMALFORMAT 0 String nasdaqObj ChartObj DECIMALFORMAT 2 TimeLabel timelabel new TimeLabel transform f ChartSupport NumToString volume ChartSupport NumToString nasdaq xValues selectedindex ChartObj TIMEDATEFORMAT STANDARD Stockpanel AddNewLineTextString timelabel GetTextString Stockpanel AddNewLineTextString Open openObj Stockpanel AddNewLineTextString High highObj Stockpanel AddNewLineTextString Low lowObj stockpanel AddNewLineTextString Close closeObj 340 341 Data ToolTips Stockpanel AddNewLineTextString Volume volumeObj Stockpanel AddNewLineTextString NASDAQ n
561. x yMax Create the x and y axes Dim xAxis As LinearAxis _ New LinearAxis simpleScale ChartObj X AXIS Dim yAxis As LinearAxis New LinearAxis simpleScale ChartObj Y AXIS Dim xAxisLabels As NumericAxisLabels New NumericAxisLabels xAxis Dim yAxisLabels As NumericAxisLabels New NumericAxisLabels yAxis Create the ChartView object to place graph objects in Dim chartVu As ChartView New ChartView Add the x and y axes to the chartVu object chartVu AddChartObject xAxis chartVu AddChartObject yAxis chartVu AddChartObject xAxisLabels chartVu AddChartObject yAxisLabels 222 Should want to customize the axis you can add the following lines after the xAxisLabels object is created Custom numeric axis labels example C ChartFont labelfont new ChartFont Helvetica 10 FontStyles Normal FontWeights Bold double xAxisLabelsRotation 0 0 int xAxisLabelsDir ChartObj AXIS MIN int xAxisLabelsDecimal 1 int xAxisLabelsEnds ChartObj LABEL ALL Color xAxisLabelsColor Colors Black int xAxisNumericFormat ChartObj DECIMALFORMAT xAxisLabels SetAxisLabels labelfont xAxisLabelsRotation xAxisLabelsDir xAxisLabelsDecimal xAxisLabelsEnds xAxisLabelsColor xAxisLabels SetAxisLabelsFormat xAxisNumericFormat Visual Basic Dim labelfont As ChartFont New ChartFont Helvetica 10 FontStyles Normal FontWeights Bold Dim xAxisLabelsRotation As Double 0 0 Dim xAxisLabel
562. xes _ C4 public AntennaAxesLabels AntennaAxes baseaxis LE baseaxis This is the axis the axis labels are for Other axis label properties font rotation numeric format axis labels direction and numeric precision are automatically set These properties can be explicitly set if you need to override the automatically calculated values SetAxisLabels method Visual Basic Overloads Public Sub SetAxisLabels _ ByVal font As ChartFont _ ByVal labcolor As Color Ct public void SetAxisLabels ChartFont font Color laboolor 243 Axis Labels SetAxisLabelsFormat method Visual Basic Public Sub SetAxisLabelsFormat _ ByVal format As Integer _ Ct public void SetAxisLabelsFormat int format E font The font object used to display the axis label text labcolor The color of the label text format Sets the numeric format for the axis labels Use one of the numeric format constants DECIMALFORMAT SCIENTIFICFORMAT EXPONENTFORMAT BUSINESSFORMAT ENGINEERINGFORMAT PERCENTFORMAT CURRENCEYFORMAT CURRENCYBUSINESSFORMAT Antenna axes labels example double minvalue 40 maxvalue 20 AntennaCoordinates antennascale new AntennaCoordinates minvalue maxvalue AntennaAxes antennaAxes new AntennaAxes antennascale chartVu AddChartObject antennaAxes AntennaAxesLabels antennaAxesLabels new AntennaAxesLabels antennaAxes antennaAxesLabels SetAxisLabelsFormat ChartObj DECIMALFORMAT antenna
563. xis is logarithmic the intercept value is restricted to a positive range There are three main constructors for TimeAxis objects The first two TimeAxis constructors assume that the axis extents match the extents of the underlying coordinate system transform The third TimeAxis constructor sets the axis extents to the specified minimum and maximum values regardless of the underlying coordinate system TimeAxis constructors Visual Basic Overloads Public Sub New _ ByVal transform As TimeCoordinates _ Overloads Public Sub New _ ByVal transform As TimeCoordinates ByVal ntickmarkbase As Integer _ Overloads Public Sub New _ ByVal transform As TimeCoordinates ByVal dstart As ChartCalendar ByVal dstop As ChartCalendar Overloads Public Sub New _ ByVal transform As TimeCoordinates ByVal axtype As Integer Overloads Public Sub New _ ByVal transform As TimeCoordinates ByVal axtype As Integer _ ByVal ntickmarkbase As Integer _ Overloads Public Sub New _ ByVal transform As TimeCoordinates ByVal axtype As Integer ByVal dstart As ChartCalendar ByVal dstop As ChartCalendar Cf public TimeAxis TimeCoordinates transform E public TimeAxis TimeCoordinates transform int ntickmarkbase public TimeAxis TimeCoordinates transform ChartCalendar dstart Axes 198 ChartCalendar dstop public TimeAxis TimeCoordinates transform in
564. y are in different namespaces Usually the default collection of using statements at the top of WPF classes point you to the correct namespaces Other WPF classes have slightly different names than their Net equivalents Colors DashStyles FontStyles FontWeights Color FromRgb MouseButtons and MouseButtonEventArgs Color 69 Class Architecture The color class used in the Net Forms based version of QCChart2D is derived from the System Drawing Color class The WPF version of the Color class derives from the System Windows Media Color class Whereas the color enumerated constants for System Drawing colors are found in the Color class in WPF they are found in the Colors class Example System Drawing WPF CT Color c Color Red Color c Colors Red VB Dim c as Color Color Red Dim c as Color Colors Red Color FromArgb and Color Rgb Custom RGB colors were defined in Net using the Color FromArgb static method It had a couple of overrides one with four arguments for a full ARGB color with alpha blending specification and one with just three for RGB The WPF Color class has two different static methods used to define RGB colors Color FromArgb for the full ARGB specification and Color FromRgb for just RGB System Drawing CH Color c Color FromArgb 127 255 0 0 Calor ee Color FromArgbt255 0 0 VB Dum e as Color Color FromArgb 127 255 0 0 Dim e as Color Color Promkrgh 255 00 WPF CH Color c Color FromArgb 127 255 0 0
565. y not possible or practical to display the entire dataset the DatasetViewer windows a rectangular section of the dataset for display Scroll bars are used to scroll the rows and columns of the dataset The Dataset Viewer constructor defines the size position source matrix the number of rows and columns of the DatasetViewer grid and the starting position of the DatasetViewer scrollbar In normal use you add the DatasetViewer to the XAML file of a window just like you have been adding a ChartView window The DatasetViewer can be aligned with a chart by placing it in a grid row below or above the chart or in a grid column to the left or right of the chart You can allocate a different amount of space for the grid versus the chart using the WPF Grid relative size definition parameters In the example below the ChartView is place in Grid Row 0 where the row has a height of 5 The DatasetViewer is place in GridRow 1 where the row has a size of 2 The result is that the chart will occupy 5 7 of the display space and the dataset viewer 2 7 of the display space No matter how you resize the window that relationship will be maintained TablItem Header SimpleDatasetViewerChart Name tabItem5 gt lt Grid gt lt Grid RowDefinitions gt lt RowDefinition Height 5 gt lt RowDefinition Height 2 gt lt Grid RowDefinitions gt lt my ChartView Grid Row 0 Margin 18 11 16 6 Name chartViewS gt my DatasetViewer Grid Row 1 M
566. yAxis Polar Axes Polar axes provide the visual scale needed to compare data values that use polar coordinates A polar axis consists of two parts The first part is a pair of linear x and y axes intersecting at the center Cartesian coordinate 0 0 The second part of a polar axis is a circle with radius R centered on the origin Class PolarAxes GraphObj Axis LinearAxis PolarAxes The PolarAxes class creates a polar axes object that combines linear x and y axes for measurement of the polar magnitude and a circular axis for measurement of the polar angle The PolarAxes class extends the LinearAxis class This is useful because the LinearAxis already has member variables that define properties and draw the tick marks for the circular axis The PolarAxes class also includes uses two additional LinearAxis objects in support of the x and y linear axes used in the drawing of the polar magnitude axes 209 Axes Polar Axis Minimum and Maximum Polar axes have only one scaling value the maximum value of the polar magnitude designated R The minimum value is always 0 0 The limits of the x and y axis are set to R with the intercept for each axis set to 0 0 The polar angle scale is always 360 degrees corresponding to a full circle Polar Axis Minor and Major Tick Mark Intervals Polar axes use two sets of tick mark properties one set for the x and y axes and the other set for the circular axis The x and y axes
567. ype double x double y double rsize int npostype transform Places the marker in the coordinate system defined by transform 311 Data Markers and Data Cursors nmarkertype Specifies the shape of the current chart marker Use one of the chart marker constants MARKER NULL MARKER VLINE MARKER HLINE MARKER CROSS MARKER BOX or MARKER HVLINE x Specifies the x value of the marker position y Specifies the y value of the marker position rsize Specifies the size of the cross hair marker MARKER CROSS and the box marker MARKER BOX in WPF device coordinates npostype Specifies the if the position of the marker is specified in physical coordinates normalized coordinates or WPF device coordinates Use one of the position constants DEV POS PHYS POS NORM GRAPH POS NORM PLOT POS The marker constants signify MARKER NULL An invisible marker MARKER VLINE The marker is a vertical line extending from the top of the plot area to the bottom passing through the x value of the marker position MARKER HLINE The marker is a horizontal line extending from the left of the plot area to the right passing through the y value of the marker position MARKER HVLINE The marker combines both MARKER VLINE and MARKER HLINE marking the data point with horizontal and vertical lines MARKER CROSS The marker is a cross hair centered on the marker position Set the size of the cross hair using WPF device coordinates in the object constr

Download Pdf Manuals

image

Related Search

Related Contents

Land Pride ZT60 User's Manual  ガード ティックリムーバー 取扱説明書  PXR4/5/9 - Instrumart  document  Service Manual-XR10 to XR35    非典型肺炎の予防措置  

Copyright © All rights reserved.
Failed to retrieve file