----------------------------------------------------------------------------- -- | -- Module : Graphics.Rendering.Chart.Plot.Annotation -- Copyright : (c) Tim Docker 2006, 2014 -- License : BSD-style (see chart/COPYRIGHT) -- -- Show textual annotations on a chart. {-# LANGUAGE TemplateHaskell #-} module Graphics.Rendering.Chart.Plot.Annotation( PlotAnnotation(..), plot_annotation_hanchor, plot_annotation_vanchor, plot_annotation_angle, plot_annotation_style, plot_annotation_values ) where import Control.Lens import Graphics.Rendering.Chart.Geometry import Graphics.Rendering.Chart.Drawing import Graphics.Rendering.Chart.Plot.Types import Data.Default.Class -- | Value for describing a series of text annotations -- to be placed at arbitrary points on the graph. Annotations -- can be rotated and styled. data PlotAnnotation x y = PlotAnnotation { _plot_annotation_hanchor :: HTextAnchor, _plot_annotation_vanchor :: VTextAnchor, _plot_annotation_angle :: Double, -- ^ Angle, in degrees, to rotate the annotation about the anchor point. _plot_annotation_style :: FontStyle, _plot_annotation_values :: [(x,y,String)] } instance ToPlot PlotAnnotation where toPlot p = Plot { _plot_render = renderAnnotation p, _plot_legend = [], _plot_all_points = (map (^._1) vs , map (^._2) vs) } where vs = _plot_annotation_values p renderAnnotation :: PlotAnnotation x y -> PointMapFn x y -> ChartBackend () renderAnnotation p pMap = withFontStyle style $ mapM_ drawOne values where hta = _plot_annotation_hanchor p vta = _plot_annotation_vanchor p values = _plot_annotation_values p angle = _plot_annotation_angle p style = _plot_annotation_style p drawOne (x,y,s) = drawTextsR hta vta angle point s where point = pMap (LValue x, LValue y) instance Default (PlotAnnotation x y) where def = PlotAnnotation { _plot_annotation_hanchor = HTA_Centre , _plot_annotation_vanchor = VTA_Centre , _plot_annotation_angle = 0 , _plot_annotation_style = def , _plot_annotation_values = [] } $( makeLenses ''PlotAnnotation )