HZ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Safe 9:;<=DR3Numerical equality %Comparison within numerical precision.The class of invertible linear transformations!Inverse matrix action on a vector9Diagonal matrices in R2 behave as scaling transformationsEMultiplicative matrix semigroup ("multiplying" two matrices together)Matrix product3Linear maps, i.e. linear transformations of vectors 5Matrix action, i.e. linear transformation of a vector HA Mat2 can be seen as a linear operator that acts on points in the plane Hermitian space : inner product Inner product2Vector space : multiplication by a scalar quantityScalar multiplicationAdditive group : v ^+^ zero == zero ^+^ v == v v ^-^ v == zeroIdentity elementGroup action ("sum")$Inverse group action ("subtraction")V2 is a vector in R^2(A frame, i.e. a bounding box for objectsA  carries a "label" (i.e. any additional information such as a text tag, or any other data structure), in addition to position information. Data points on a plot are s.#A # defines a point in R2ZBOverwrite either coordinate of a Point, to e.g. project on an axis()Build a frame rooted at the origin (0, 0)) Create a  from a container of #s P, i.e. construct two points p1 and p2 such that :"p1 := inf(x,y) P p2 := sup(x,y) P[Frame corner coordinates\Frame corner coordinates]Frame corner coordinates^Frame corner coordinates*The * is the extent in the x direction and + is the extent in the y direction+The * is the extent in the x direction and + is the extent in the y direction,Euclidean (L^2) norm-(Normalize a V2 w.r.t. its Euclidean norm. Create a V2 v$ from two endpoints p1, p2. That is v can be seen as pointing from p1 to p2/ Create a V2 v$ from two endpoints p1, p2. That is v can be seen as pointing from p1 to p20$The origin of the axes, point (0, 0)1Create a diagonal matrix_Rotation matrix2Build a  v from a #6 p (i.e. assuming v points from the origin (0,0) to p)`Build a # p from a 6 v (i.e. assuming v points from the origin (0,0) to p)3Move a point along a vector4Move a  along a vector5%`pointRange n p q` returns a list of `n+1` equi-spaced # s between p and qN (i.e. the input points are included as the first and last points in the list)6Given two frames F1 and F2, returns a function f that maps an arbitrary vector v contained within F1 onto one contained within F2.0This function is composed of three affine maps : map v into a vector v01$ that points within the unit square,map v01 onto v01'. This transformation serves to e.g. flip the dataset along the y axis (since the origin of the SVG canvas is the top-left corner of the screen). If this is not needed one can just supply the identity matrix and the zero vector,map v01' onto the target frame F2. NB: we do not check that v" is actually contained within the F1 , nor that v01'Y is still contained within [0,1] x [0, 1]. This has to be supplied correctly by the user.7X-aligned unit vector8Y-aligned unit vectora(Diagonal matrices can always be invertedbcMatrices form a monoid w.r.t. matrix multiplication and have the identity matrix as neutral elementclDiagonal matrices form a monoid w.r.t. matrix multiplication and have the identity matrix as neutral elementdVectors form an additive groupe,Vectors form a monoid w.r.t. vector addition[  !"#$%&fZghij'()[\]^*+k,-./01_2`345lm6 Initial frame Final frameFlip L-R in [0,1] x [0,1]Flip U-D in [0,1] x [0,1]Initial vectornop Initial frame Final frameFlip L-R in [0,1] x [0,1]Flip U-D in [0,1] x [0,1]Initial 78qrstauvbcwxyzde{K  !"#$%&fZghij'()[\]^*+k,-./01_2`345lm6nop78B    !"#$%&fZghij'()[\]^*+k,-./01_2`345lm6nop78qrstauvbcwxyzde{None94Specify the type of connection between line segments>ESpecify at which end should the text be anchored to its current pointB%Specify a continuous or dashed strokeE Figure dataG Figure widthH Figure heightI)Left margin fraction (w.r.t figure width)J,Right margin fraction (w.r.t figure width) K)Top margin fraction (w.r.t figure height)L.Bottom margin fraction (w.r.t figure height) MTick label font sizeNCreate the SVG header from a O?A rectangle, defined by its center coordinates and side lengths > putStrLn $ renderSvg $ rectCentered (Point 20 30) 15 30 (Just C.blue) (Just C.red) <g transform="translate(12.5 15.0)"><rect width="15.0" height="30.0" fill="#ff0000" stroke="#0000ff" /></g>PLine segment between two #s > putStrLn $ renderSvg $ line (Point 0 0) (Point 1 1) 0.1 Continuous C.blueviolet <line x1="0.0" y1="0.0" x2="1.0" y2="1.0" stroke="#8a2be2" stroke-width="0.1" /> > putStrLn $ renderSvg (line (Point 0 0) (Point 1 1) 0.1 (Dashed [0.2, 0.3]) C.blueviolet) <line x1="0.0" y1="0.0" x2="1.0" y2="1.0" stroke="#8a2be2" stroke-width="0.1" stroke-dasharray="0.2, 0.3" />|oAn array of axis-aligned identical segments (to be used as axis tickmarks), with centers given by the array of #s}"A plot axis with labeled tickmarks > putStrLn $ renderSvg $ axis (Point 0 50) X 200 2 C.red 0.05 Continuous 15 (-45) TAEnd T.pack (V2 (-10) 0) [LabeledPoint (Point 50 1) "bla", LabeledPoint (Point 60 1) "asdf"] <line x1="0.0" y1="50.0" x2="200.0" y2="50.0" stroke="#ff0000" stroke-width="2.0" /><line x1="50.0" y1="45.0" x2="50.0" y2="55.0" stroke="#ff0000" stroke-width="2.0" /><text x="-10.0" y="0.0" transform="translate(50.0 50.0)rotate(-45.0)" font-size="15" fill="#ff0000" text-anchor="end">bla</text><line x1="60.0" y1="45.0" x2="60.0" y2="55.0" stroke="#ff0000" stroke-width="2.0" /><text x="-10.0" y="0.0" transform="translate(60.0 50.0)rotate(-45.0)" font-size="15" fill="#ff0000" text-anchor="end">asdf</text>QQ) performs a number of related operations:$Maps the dataset to the figure frameRenders the X, Y axesBRenders the transformed dataset onto the newly created plot canvasRR! renders text onto the SVG canvas ConventionsThe # argument p refers to the  lower-left corner of the text box.The text box can be rotated by rot degrees around p= and then anchored at either its beginning, middle or end to p with the > flag."The user can supply an additional $ displacement which will be applied afterA rotation and anchoring and refers to the rotated text box frame. > putStrLn $ renderSvg $ text (-45) C.green TAEnd "blah" (V2 (- 10) 0) (Point 250 0) <text x="-10.0" y="0.0" transform="translate(250.0 0.0)rotate(-45.0)" fill="#008000" text-anchor="end">blah</text>SA circle > putStrLn $ renderSvg $ circle (Point 20 30) 15 (Just C.blue) (Just C.red) <circle cx="20.0" cy="30.0" r="15.0" fill="#ff0000" stroke="#0000ff" />T"Polyline (piecewise straight line)  > putStrLn $ renderSvg (polyline [Point 100 50, Point 120 20, Point 230 50] 4 (Dashed [3, 5]) Round C.blueviolet) <polyline points="100.0,50.0 120.0,20.0 230.0,50.0" fill="none" stroke="#8a2be2" stroke-width="4.0" stroke-linejoin="round" stroke-dasharray="3.0, 5.0" />UA filled polyline > putStrLn $ renderSvg $ filledPolyline C.coral 0.3 [(Point 0 1), (Point 10 40), Point 34 50, Point 30 5] <polyline points="0,1 10,40 34,50 30,5" fill="#ff7f50" fill-opacity="0.3" />VAA filled band of colour, given the coordinates of its center lineThis element can be used to overlay uncertainty ranges (e.g. the first standard deviation) associated with a given data series.WA Wk glyph for time series plots. This is a type of box glyph, commonly used in plotting financial time series.Some financial market quantities such as currency exchange rates are aggregated over some time period (e.g. a day) and summarized by various quantities, for example opening and closing rates, as well as maximum and minimum over the period.By convention, the W colour depends on the derivative sign of one such quantity (e.g. it is green if the market closes higher than it opened, and red otherwise).XgMove point to the SVG frame of reference (for which the origing is a the top-left corner of the screen)Y6Move LabeledPoint to the SVG frame of reference (uses X ) ~Render a Colour from colour into a blaze Attribute39:;<=>?@ABCDEFGHIJKLMNOCenter coordinates WidthHeight Stroke width Stroke colour Fill colour P First point Second point Stroke width Stroke type Stroke colourLength Stroke width Font size Label angleLabel rendering Label shift |Axis Length  Stroke width Stroke colourCenter coordinates} Origin coordinatesAxis (i.e. either  or )Length of the axis Stroke width Stroke colour0The tick length is a fraction of the axis length Stroke typeLabel font sizeLabel rotation angle &How to anchor a text label to the axis How to render the tick label Offset the label Tick center coordinatesQ  X tick label Y tick labelX label rotation angleY label rotation angle Stroke width Stroke colour X axis labels Y axis labels Data rendering function DataRRotation angle of the textbox Font size Font colour#How to anchor the text to the pointText #Displacement w.r.t. rotated textboxHInitial position of the text box (i.e. before rotation and displacement)SCenterRadius Stroke width Stroke colour Fill colourTData Stroke width Stroke type Stroke join type  Stroke colourU Fill colour Fill opacityContour point coordinatesV Fill colour Fill opacityBand maximum valueBand minimum valueCenterline pointsW FIf True, fill the box with the first colour, otherwise with the secondBox maximum valueBox minimum valueLine maximum value Line minimum value Box width Stroke widthFirst box colourSecond box colour Line stroke colour  Data pointX Initial frame Final frameFlip L-R in [0,1] x [0,1]Point in the initial frameY~a  !"#$%&fi'()*+,-./0123456p789:;<=>A?@BCDEFGHIJKLMNOP|}QRSTUVWXY"9:;<=>?@ABCDEFGHIJKLMNOP|}QRSTUVWXY~NoneNoneNoneMarco Zocca 2017BSD3Marco Zocca <zocca marco gmail>NoneZ  !"#$%&'()*+,-./0123456789:;<=>A?@BCDEFGHIJKLMNOPQRSTUVWXYZOSPRTUVWQEFGHIJKLMBCD9:;<=>?@AN#$%& !" 1078,-.234/XY56)'(*+  SafeSafeA point in a time series/An instant, defined by date (Day) and TimeOfDay None%Parse a row of numbers, separated by sep&parse a grid of numbers, separated by sep None:6Compute the plotting coordinates of a timeseries pointPreprocess the dataset for plotting 1. Remap the figure data to fit within the FigData ranges, expressed in pixels 2. Flip the data along the y axis since the origin in SVG is the top-left corner of the screen Create a  from a time series point (). The { (time axis) field will be used for the x coordinate, whereas both fields of TsPoint may be used to create the label field.NB : The coordinates of the resulting LabelPoint still live in the original data space; they must be rescaled to fit in the figure viewportMap a Tick onto the rationalsACreate a Tick from valid (year, month, day, hour, minute, second)       !"#$$%&''()**+,-./0123456789:;<=>?@ABCDEFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 'plot-light-0.1.1-GkzSl1CsJ2eGOWZDyEAbxcGraphics.Rendering.Plot.Light/Graphics.Rendering.Plot.Light.Internal.Geometry&Graphics.Rendering.Plot.Light.Internal/Graphics.Rendering.Plot.Light.PlotTypes.Heatmap/Graphics.Rendering.Plot.Light.PlotTypes.Scatter>Graphics.Rendering.Plot.Light.PlotTypes.TimeSeries.CandlestickData.TimeSeries.ForexData.TimeSeries%Graphics.Rendering.Plot.Light.IO.Text2Graphics.Rendering.Plot.Light.PlotTypes.TimeSeriesEps~= MatrixGroup<\>DiagMat2DMat2MultiplicativeSemigroup## LinearMap#>Mat2 Hermitian InnerProduct<.> VectorSpaceScalar.* AdditiveGroupzero^+^^-^V2AxisXYFrame_fpmin_fpmax LabeledPoint_lp_lplabelPoint_px_pymkFrame mkFrameOriginframeFromPointswidthheightnorm2 normalize2v2fromEndpoints-.origindiagMat2 v2fromPoint movePointmoveLabeledPointV2 pointRange frameToFramee1e2StrokeLineJoin_MiterRoundBevelInherit TextAnchor_TAStartTAMiddleTAEnd LineStroke_ ContinuousDashed FigureDatafigWidth figHeight figLeftMFrac figRightMFrac figTopMFracfigBottomMFracfigLabelFontSize svgHeader rectCenteredlinetoPlottextcirclepolylinefilledPolyline filledBand candlestick toSvgFrame toSvgFrameLP setPointCoordxminxmaxyminymaxrotMtx pointFromV2$fMatrixGroupDiagMat2V2 $fMonoidMat2$fMonoidDiagMat2$fAdditiveGroupV2 $fMonoidV2mkPoint setPointX setPointYmkLabeledPointmoveLabeledPoint otherAxis fromFrametoFrameflipLR01flipUD01moveLabeledPointV2Frames$fEpsV2$fEpsV20 $fEpsFloat $fEpsDouble$fLinearMapDiagMat2V2!$fMultiplicativeSemigroupDiagMat2$fLinearMapMat2V2$fMultiplicativeSemigroupMat2 $fHermitianV2$fVectorSpaceV2 $fShowPointticksaxis colourAttrstrokeDashArraytick labeledTick labeledTicks textAnchornone colourFillOptcolourStrokeOptstrokeLineJoinvsvivd0vdrealvdsFxRowrateOpenrateHighrateLow rateCloseTsPointTickTsp_tick_valrowNumsgridNumspacecomma rowNumSpaceparseFxDataset parseFxRow parseDateTimetsAxistspToLPfromTickmkTicktsAxis'dat1fromtotickToFractional