-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A lightweight plotting library, exporting to SVG -- -- This library provides drawing and plotting datastructures and -- functions; it is aimed in particular at scientific visualization, but -- it also exposes its plotting primitives and a small but general -- purpose 2D geometry library. @package plot-light @version 0.4.3 -- | This module provides functionality for working with affine -- transformations (i.e. in the unit square) module Graphics.Rendering.Plot.Light.Internal.Geometry -- | A Point object defines a point in the plane data Point a Point :: a -> a -> Point a [_px] :: Point a -> a [_py] :: Point a -> a mkPoint :: a -> a -> Point a setPointX :: a -> Point a -> Point a setPointY :: a -> Point a -> Point a -- | A LabeledPoint 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 -- LabeledPoints. data LabeledPoint l a LabeledPoint :: Point a -> l -> LabeledPoint l a -- | The coordinates of the LabeledPoint (i.e. where in the figure -- it will be rendered) [_lp] :: LabeledPoint l a -> Point a -- | Data associated with the LabeledPoint [_lplabel] :: LabeledPoint l a -> l mkLabeledPoint :: Point a -> l -> LabeledPoint l a -- | Given a labelling function and a Point p, returned a -- LabeledPoint containing p and the computed label labelPoint :: (Point a -> l) -> Point a -> LabeledPoint l a -- | Apply a function to the label mapLabel :: (l1 -> l2) -> LabeledPoint l1 a -> LabeledPoint l2 a -- | A frame, i.e. a bounding box for objects data Frame a Frame :: Point a -> Point a -> Frame a [_fpmin] :: Frame a -> Point a [_fpmax] :: Frame a -> Point a mkFrame :: Point a -> Point a -> Frame a -- | The unit square (0, 0) - (1, 1) unitFrame :: Num a => Frame a -- | Create a Frame from a container of Points P, -- i.e. construct two points p1 and p2 such that : -- -- p1 := inf(x,y) P -- -- p2 := sup(x,y) P frameFromPoints :: (Ord a, Foldable t, Functor t) => t (Point a) -> Frame a -- | Build a frame rooted at the origin (0, 0) mkFrameOrigin :: Num a => a -> a -> Frame a -- | The width is the extent in the x direction and -- height is the extent in the y direction height :: Num a => Frame a -> a -- | The width is the extent in the x direction and -- height is the extent in the y direction width :: Num a => Frame a -> a -- | Frame corner coordinates xmin :: Frame a -> a -- | Frame corner coordinates xmax :: Frame a -> a -- | Frame corner coordinates ymin :: Frame a -> a -- | Frame corner coordinates ymax :: Frame a -> a isPointInFrame :: Ord a => Frame a -> Point a -> Bool data Axis X :: Axis Y :: Axis otherAxis :: Axis -> Axis -- | V2 is a vector in R^2 data V2 a V2 :: a -> a -> V2 a -- | Build a Point p from a V2 v (i.e. assuming v points from -- the origin (0,0) to p) pointFromV2 :: V2 a -> Point a -- | A Mat2 can be seen as a linear operator that acts on points in the -- plane data Mat2 a Mat2 :: a -> a -> a -> a -> Mat2 a -- | Diagonal matrices in R2 behave as scaling transformations data DiagMat2 a DMat2 :: a -> a -> DiagMat2 a -- | Create a diagonal matrix diagMat2 :: Num a => a -> a -> DiagMat2 a -- | The origin of the axes, point (0, 0) origin :: Num a => Point a -- | The (1, 1) point oneOne :: Num a => Point a -- | X-aligned unit vector e1 :: Num a => V2 a -- | Y-aligned unit vector e2 :: Num a => V2 a -- | Euclidean (L^2) norm norm2 :: (Hermitian v, Floating n, n ~ (InnerProduct v)) => v -> n -- | Normalize a V2 w.r.t. its Euclidean norm normalize2 :: (InnerProduct v ~ Scalar v, Floating (Scalar v), Hermitian v) => v -> v -- | Create a V2 v from two endpoints p1, p2. That is v -- can be seen as pointing from p1 to p2 v2fromEndpoints :: Num a => Point a -> Point a -> V2 a -- | Build a V2 v from a Point p (i.e. assuming v points from -- the origin (0,0) to p) v2fromPoint :: Num a => Point a -> V2 a -- | Move a point along a vector movePoint :: Num a => V2 a -> Point a -> Point a moveLabeledPoint :: (Point a -> Point b) -> LabeledPoint l a -> LabeledPoint l b -- | Move a LabeledPoint along a vector moveLabeledPointV2 :: Num a => V2 a -> LabeledPoint l a -> LabeledPoint l a moveLabeledPointBwFrames :: Fractional a => Frame a -> Frame a -> Bool -> Bool -> LabeledPoint l a -> LabeledPoint l a -- | Create a V2 v from two endpoints p1, p2. That is v -- can be seen as pointing from p1 to p2 (-.) :: Num a => Point a -> Point a -> V2 a -- | `pointRange n p q` returns a list of equi-spaced Points between -- p and q. pointRange :: (Fractional a, Integral n) => n -> Point a -> Point a -> [Point a] -- | Given two frames F1 and F2, returns a function -- f that maps an arbitrary vector v contained within -- F1 onto one contained within F2. -- -- This function is composed of three affine maps : -- --
-- v ^+^ zero == zero ^+^ v == v ---- --
-- v ^-^ v == zero --class AdditiveGroup v -- | Identity element zero :: AdditiveGroup v => v -- | Group action ("sum") (^+^) :: AdditiveGroup v => v -> v -> v -- | Inverse group action ("subtraction") (^-^) :: AdditiveGroup v => v -> v -> v -- | Vector space : multiplication by a scalar quantity class AdditiveGroup v => VectorSpace v where { type family Scalar v :: *; } -- | Scalar multiplication (.*) :: VectorSpace v => Scalar v -> v -> v -- | Hermitian space : inner product class VectorSpace v => Hermitian v where { type family InnerProduct v :: *; } -- | Inner product (<.>) :: Hermitian v => v -> v -> InnerProduct v -- | Linear maps, i.e. linear transformations of vectors class Hermitian v => LinearMap m v -- | Matrix action, i.e. linear transformation of a vector (#>) :: LinearMap m v => m -> v -> v -- | Multiplicative matrix semigroup ("multiplying" two matrices together) class MultiplicativeSemigroup m -- | Matrix product (##) :: MultiplicativeSemigroup m => m -> m -> m -- | The class of invertible linear transformations class LinearMap m v => MatrixGroup m v -- | Inverse matrix action on a vector (<\>) :: MatrixGroup m v => m -> v -> v -- | Numerical equality class Eps a -- | Comparison within numerical precision (~=) :: Eps a => a -> a -> Bool -- | A list of nx by ny points in the plane arranged on -- the vertices of a rectangular mesh. -- -- NB: Only the minimum x, y coordinate point is included in the output -- mesh. This is intentional, since the output from this can be used as -- an input to functions that use a corner rather than the center point -- as refernce (e.g. rect) meshGrid :: (Enum a, RealFrac a) => Frame a -> Int -> Int -> [Point a] subdivSegment :: (Real a, Enum b, RealFrac b) => a -> a -> Int -> [b] -- | Interpolation -- -- Safe interpolateBilinear :: (Ord p, Fractional p, Show p) => Frame p -> (Point p -> p) -> Point p -> p instance GHC.Generics.Generic (Graphics.Rendering.Plot.Light.Internal.Geometry.MeshGrid a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.MeshGrid a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.MeshGrid a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.Mat2 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.Mat2 a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Show.Show Graphics.Rendering.Plot.Light.Internal.Geometry.Axis instance GHC.Classes.Eq Graphics.Rendering.Plot.Light.Internal.Geometry.Axis instance GHC.Generics.Generic (Graphics.Rendering.Plot.Light.Internal.Geometry.Frame a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.Frame a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.Frame a) instance (GHC.Show.Show l, GHC.Show.Show a) => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.LabeledPoint l a) instance (GHC.Classes.Eq l, GHC.Classes.Eq a) => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.LabeledPoint l a) instance GHC.Generics.Generic (Graphics.Rendering.Plot.Light.Internal.Geometry.Point a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Graphics.Rendering.Plot.Light.Internal.Geometry.Point a) instance Graphics.Rendering.Plot.Light.Internal.Geometry.Eps GHC.Types.Double instance Graphics.Rendering.Plot.Light.Internal.Geometry.Eps GHC.Types.Float instance Graphics.Rendering.Plot.Light.Internal.Geometry.Eps (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 GHC.Types.Double) instance Graphics.Rendering.Plot.Light.Internal.Geometry.Eps (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 GHC.Types.Float) instance GHC.Real.Fractional a => Graphics.Rendering.Plot.Light.Internal.Geometry.MatrixGroup (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => Data.Semigroup.Semigroup (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) instance GHC.Num.Num a => GHC.Base.Monoid (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.MultiplicativeSemigroup (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.LinearMap (Graphics.Rendering.Plot.Light.Internal.Geometry.DiagMat2 a) (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.MultiplicativeSemigroup (Graphics.Rendering.Plot.Light.Internal.Geometry.Mat2 a) instance GHC.Num.Num a => Data.Semigroup.Semigroup (Graphics.Rendering.Plot.Light.Internal.Geometry.Mat2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.LinearMap (Graphics.Rendering.Plot.Light.Internal.Geometry.Mat2 a) (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => GHC.Base.Monoid (Graphics.Rendering.Plot.Light.Internal.Geometry.Mat2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.Hermitian (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.VectorSpace (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => Graphics.Rendering.Plot.Light.Internal.Geometry.AdditiveGroup (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => Data.Semigroup.Semigroup (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Num.Num a => GHC.Base.Monoid (Graphics.Rendering.Plot.Light.Internal.Geometry.V2 a) instance GHC.Classes.Ord a => Data.Semigroup.Semigroup (Graphics.Rendering.Plot.Light.Internal.Geometry.Frame a) instance (GHC.Classes.Ord a, GHC.Num.Num a) => GHC.Base.Monoid (Graphics.Rendering.Plot.Light.Internal.Geometry.Frame a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Graphics.Rendering.Plot.Light.Internal.Geometry.Point a) instance GHC.Show.Show a => GHC.Show.Show (Graphics.Rendering.Plot.Light.Internal.Geometry.Point a) -- | plot-light provides functionality for rendering vector -- graphics in SVG format. It is geared in particular towards scientific -- plotting, and it is termed "light" because it only requires a few -- common Haskell dependencies and no external libraries. -- --
-- import Text.Blaze.Svg.Renderer.String (renderSvg) -- import qualified Data.Colour.Names as C -- import qualified Data.Text.IO as T (readFile, writeFile) -- import qualified Data.Text as T ---- --
-- xPlot = 400 -- yPlot = 300 -- fnameOut = "heatmap.svg" ---- --
-- fdat = FigureData xPlot yPlot 0.1 0.8 0.1 0.9 10 ---- --
-- palette0 = palette [C.red, C.white, C.blue] 15 ---- --
-- plotFun2ex1 = do -- let -- p1 = Point (-2) (-2) -- p2 = Point 2 2 -- frame = mkFrame p1 p2 -- nx = 50 -- ny = 50 -- f x y = cos ( pi * theta ) * sin r -- where -- r = x'**2 + y'**2 -- theta = atan2 y' x' -- (x', y') = (fromRational x, fromRational y) -- lps = plotFun2 f $ meshGrid frame nx ny -- vmin = minimum $ _lplabel <$> lps -- vmax = maximum $ _lplabel <$> lps -- pixels = heatmap' fdat palette0 frame nx ny lps -- cbar = colourBar fdat palette0 10 vmin vmax 10 TopRight 100 -- svg_t = svgHeader xPlot yPlot $ do -- axes fdat frame 2 C.black 10 10 -- pixels -- cbar -- T.writeFile fnameOut $ T.pack $ renderSvg svg_t ---- -- This example demonstrates how to plot a 2D scalar function and write -- the output to SVG file. -- -- First, we define a FigureData object (which holds the SVG -- figure dimensions and parameters for the white margin around the -- rendering canvas) and a palette. -- -- Afterwards we declare a Frame that bounds the rendering canvas -- using mkFrame. This is discretized in nx by -- ny pixels with meshGrid, and the function f -- is computed at the intersections of the mesh with -- plotFun2. -- -- The axes function adds labeled axes to the figure; the user -- just needs to specify stroke width and color and how many ticks to -- display. -- -- The data to be plotted (represented in this case as a list of -- LabeledPoints, in which the "label" carries the function value) -- are then mapped onto the given colour palette and drawn to the SVG -- canvas as a heatmap', i.e. a mesh of filled rectangles -- (Caution: do not exceed resolutions of ~ hundred pixels per side). -- -- Next, we create the legend; in this case this is a colourBar -- element that requires the data bounds vmin, vmax. -- -- As a last step, the SVG content is wrapped in the appropriate markdown -- by svgHeader and written to file. -- --
-- xPlot = 400 -- yPlot = 300 -- fnameOut = "scatter.svg" ---- --
-- fdat = FigureData xPlot yPlot 0.1 0.8 0.1 0.9 10 ---- --
-- dats = zipWith LabeledPoint p_ l_ where -- l_ = [-5, -4 .. ] -- p_ = zipWith Point [46,30,4,7,73,12,23,90,34,24,5,6,12,3,55,61] [20,35,43,23,20,1,23,8,11,17,25,4,5,26, 30] ---- --
-- spdata = ScatterPointData Plus 3 3 C.black 0.8 ---- --
-- main :: IO () -- main = do -- let -- frameTo = frameFromFigData fdat -- frameFrom = frameFromPoints $ _lp <$> dats -- vmin = minimum $ _lplabel <$> dats -- vmax = maximum $ _lplabel <$> dats -- f l sz = 15 / (1 + exp(- (0.3 * x)) ) -- where x = l + sz -- g l w = w * (1 + l / (1 + abs l)) -- h l col = C.blend l' C.red col -- where -- l' = (l - vmin)/(vmax - vmin) -- i l alp = alp * ( 1 + l / (1 + abs l)) -- dats' = moveLabeledPointBwFrames frameFrom frameTo False True <$> dats -- svg_t = svgHeader xPlot yPlot $ do -- axes fdat frameFrom 2 C.black 10 10 -- scatterLP f g h i spdata dats' -- scatterLPBar fdat 50 vmin vmax 3 TopRight 100 f g h i spdata -- T.writeFile fnameOut $ T.pack $ renderSvg svg_t --module Graphics.Rendering.Plot.Light -- | Graph a 1D function plotFun :: Functor f => (t -> t) -> f (Point t) -> f (Point t) data Plot1DOptions a Plot1DOptions :: a -> LineStroke_ a -> StrokeLineJoin_ -> Colour Double -> Plot1DOptions a -- | Stroke width [p1oWidth] :: Plot1DOptions a -> a -- | Stroke type [p1oStrokeType] :: Plot1DOptions a -> LineStroke_ a -- | Stroke join type [p1oStrokeJoinType] :: Plot1DOptions a -> StrokeLineJoin_ -- | Stroke colour [p1oStrokeColour] :: Plot1DOptions a -> Colour Double -- | heatmap assumes the input data corresponds to evenly sampled -- values of a scalar-valued field, and it maps the data values onto the -- provided palette (which can be created e.g. with -- brewerSet). heatmap :: FigureData Rational -> [Colour Double] -> [[Scientific]] -> Svg -- | heatmap' renders one SVG pixel for every LabeledPoint -- supplied as input. The LabeledPoints must be bounded by the -- Frame. heatmap' :: (Foldable f, Functor f, Show a, RealFrac a, RealFrac t) => FigureData a -> [Colour Double] -> Frame a -> a -> a -> f (LabeledPoint t a) -> Svg -- | Plot a scalar function f of points in the plane (i.e. -- <math>) plotFun2 :: Functor f => (t -> t -> l) -> f (Point t) -> f (LabeledPoint l t) -- | A colour bar legend, to be used within heatmap-style plots. colourBar :: (RealFrac t, RealFrac a, Show a, Enum t, Floating a) => FigureData (Ratio Integer) -> [Colour Double] -> a -> t -> t -> Int -> LegendPosition_ -> a -> Svg -- | Scatter plot -- -- Every point in the plot has the same parameters, as declared in the -- ScatterPointData record scatter :: (Foldable t, Show a, RealFrac a) => ScatterPointData a -> t (Point a) -> Svg -- | Parametric scatter plot -- -- The parameters of every point in the scatter plot are modulated -- according to the label, using the three functions. -- -- This can be used to produce rich infographics, in which e.g. the -- colour and size of the glyphs carry additional information. scatterLP :: (Foldable t, RealFrac a, Show a) => (l -> b -> a) -> (l -> b -> a) -> (l -> Colour Double -> Colour Double) -> (l -> b -> a) -> ScatterPointData b -> t (LabeledPoint l a) -> Svg scatterLPBar :: (RealFrac t, Enum t, RealFrac b, Show b) => FigureData b -> b -> t -> t -> Int -> LegendPosition_ -> b -> (t -> b -> b) -> (t -> b -> b) -> (t -> Colour Double -> Colour Double) -> (t -> b -> b) -> ScatterPointData b -> Svg -- | Parameters for a scatterplot glyph data ScatterPointData a ScatterPointData :: GlyphShape_ -> a -> a -> Colour Double -> a -> ScatterPointData a -- | Glyph shape [spGlyphShape] :: ScatterPointData a -> GlyphShape_ -- | Glyph size [spSize] :: ScatterPointData a -> a -- | Glyph stroke width [spStrokeWidth] :: ScatterPointData a -> a -- | Glyph colour [spColour] :: ScatterPointData a -> Colour Double -- | Glyph opacity [spAlpha] :: ScatterPointData a -> a -- | Glyph shape data GlyphShape_ Square :: GlyphShape_ Circle :: GlyphShape_ Cross :: GlyphShape_ Plus :: GlyphShape_ -- | A rectangle, defined by its anchor point coordinates and side lengths -- --
-- > putStrLn $ renderSvg $ rect 50 60 (shapeColNoBorder C.blue 0.5) (Point 100 30) -- <rect x="100.0" y="30.0" width="50.0" height="60.0" fill-opacity="0.5" fill="#0000ff" stroke="none" /> --rect :: Real a => a -> a -> ShapeCol a -> Point a -> Svg -- | A rectangle, defined by its center coordinates and side lengths -- --
-- > putStrLn $ renderSvg $ rectCentered 15 30 (shapeColBoth C.blue C.red 1 5) (Point 20 30) -- <rect x="12.5" y="15.0" width="15.0" height="30.0" fill-opacity="1.0" fill="#0000ff" stroke-opacity="1.0" stroke="#ff0000" stroke-width="5.0" /> --rectCentered :: (Show a, RealFrac a) => a -> a -> ShapeCol a -> Point a -> Svg -- | A square, defined by its center coordinates and side length -- --
-- > putStrLn $ renderSvg $ squareCentered 30 (shapeColBoth C.blue C.red 1 5) (Point 20 30) -- <rect x="5.0" y="15.0" width="30.0" height="30.0" fill-opacity="1.0" fill="#0000ff" stroke-opacity="1.0" stroke="#ff0000" stroke-width="5.0" /> --squareCentered :: (Show a, RealFrac a) => a -> ShapeCol a -> Point a -> Svg -- | A circle -- --
-- > putStrLn $ renderSvg $ circle 15 (shapeColBoth C.red C.blue 1 5) (Point 10 20) -- <circle cx="10.0" cy="20.0" r="15.0" fill-opacity="1.0" fill="#ff0000" stroke-opacity="1.0" stroke="#0000ff" stroke-width="5.0" /> --circle :: (Real a1, Real a) => a -> ShapeCol a -> Point a1 -> Svg -- | Line segment between two Points -- --
-- > 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" /> --line :: (Show a, RealFrac a) => Point a -> Point a -> a -> LineStroke_ a -> Colour Double -> Svg -- | text renders text onto the SVG canvas -- --
-- > 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> --text :: (Show a, Real a) => a -> Int -> Colour Double -> TextAnchor_ -> Text -> V2 a -> Point a -> Svg -- | Specify at which end should the text be anchored to its current point data TextAnchor_ TAStart :: TextAnchor_ TAMiddle :: TextAnchor_ TAEnd :: TextAnchor_ -- | 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" /> --polyline :: (Foldable t, Show a1, Show a, RealFrac a, RealFrac a1) => a1 -> LineStroke_ a -> StrokeLineJoin_ -> Colour Double -> t (Point a) -> Svg -- | A 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" /> --filledPolyline :: (Foldable t, Show a, Real o) => Colour Double -> o -> t (Point a) -> Svg -- | Specify the type of connection between line segments data StrokeLineJoin_ Miter :: StrokeLineJoin_ Round :: StrokeLineJoin_ Bevel :: StrokeLineJoin_ Inherit :: StrokeLineJoin_ -- | A pixel is a filled square shape used for populating -- heatmap plots , coloured from a palette pixel :: (Show a, RealFrac a) => [Colour Double] -> a -> a -> Scientific -> Scientific -> LabeledPoint Scientific a -> Svg -- | A pixel' is a filled square shape used for populating -- heatmap plots , coloured from a palette pixel' :: (Show a, RealFrac a, RealFrac t) => [Colour Double] -> a -> a -> t -> t -> LabeledPoint t a -> Svg -- | A filled band of colour, given the coordinates of its center line -- -- This element can be used to overlay uncertainty ranges (e.g. the first -- standard deviation) associated with a given data series. filledBand :: (Foldable t, Real o, Show a) => Colour Double -> o -> (l -> a) -> (l -> a) -> t (LabeledPoint l a) -> Svg -- | A candlestick 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 candlestick 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). candlestick :: (Show a, RealFrac a) => (a -> a -> Bool) -> (l -> a) -> (l -> a) -> (l -> a) -> (l -> a) -> a -> a -> ShapeCol a -> ShapeCol a -> Colour Double -> LabeledPoint l a -> Svg histogram :: Foldable v => ShapeCol Double -> Int -> v Double -> Svg -- | A pair of Cartesian axes axes :: (Show a, RealFrac a) => FigureData a -> Frame a -> a -> Colour Double -> Int -> Int -> Svg -- | toPlot performs a number of related operations: -- --
-- > wholeDecimal pi -- (3,0.14159265358979312) --wholeDecimal :: (Integral a, RealFrac b) => b -> (a, b)