module Graphics.Rendering.Chart.Plot.Annotation(
PlotAnnotation(..),
defaultPlotAnnotation,
plot_annotation_hanchor,
plot_annotation_vanchor,
plot_annotation_angle,
plot_annotation_style,
plot_annotation_values
) where
import Data.Accessor.Template
import qualified Graphics.Rendering.Cairo as C
import Graphics.Rendering.Chart.Types
import Graphics.Rendering.Chart.Renderable
import Graphics.Rendering.Chart.Plot.Types
import Data.Colour (opaque)
import Data.Colour.Names (black, blue)
import Data.Colour.SRGB (sRGB)
data PlotAnnotation x y = PlotAnnotation {
plot_annotation_hanchor_ :: HTextAnchor,
plot_annotation_vanchor_ :: VTextAnchor,
plot_annotation_angle_ :: Double,
plot_annotation_style_ :: CairoFontStyle,
plot_annotation_values_ :: [(x,y,String)]
}
instance ToPlot PlotAnnotation where
toPlot p = Plot {
plot_render_ = renderAnnotation p,
plot_legend_ = [],
plot_all_points_ = (map (\(x,_,_)->x) vs , map (\(_,y,_)->y) vs)
}
where
vs = plot_annotation_values_ p
renderAnnotation :: PlotAnnotation x y -> PointMapFn x y -> CRender ()
renderAnnotation p pMap = preserveCState $ do
setFontStyle 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)
defaultPlotAnnotation = PlotAnnotation {
plot_annotation_hanchor_ = HTA_Centre,
plot_annotation_vanchor_ = VTA_Centre,
plot_annotation_angle_ = 0,
plot_annotation_style_ = defaultFontStyle,
plot_annotation_values_ = []
}
$( deriveAccessors ''PlotAnnotation )