Как установить цвет фона диаграммы в пакете Haskell Chart? - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть полный пример: https://github.com/chrissound/HaskellChartBarGraphExample/tree/backgroundColour

Как установить цвет фона диаграммы?Я пробовал fillBackground.

chart :: Bool -> Renderable ()
chart borders = fillBackground (FillStyleSolid $ opaque green)  $ toRenderable layout
...

Однако, похоже, это не имеет никакого эффекта.

Полный исходный код:

module Main where

import Graphics.Rendering.Chart
import Graphics.Rendering.Chart.Backend.Cairo
import Data.Colour
import Data.Colour.Names
import Control.Lens
import Data.Default.Class

chart :: Bool -> Renderable ()
chart borders = fillBackground (FillStyleSolid $ opaque green)  $ toRenderable layout
 where
  layout =
        layout_title .~ "Sample Bars" ++ btitle
      $ layout_title_style . font_size .~ 10
      $ layout_x_axis . laxis_generate .~ autoIndexAxis alabels
      $ layout_y_axis . laxis_override .~ axisGridHide
      $ layout_left_axis_visibility . axis_show_ticks .~ False
      $ layout_plots .~ [ plotBars bars2 ]
      $ def :: Layout PlotIndex Double

  bars2 = plot_bars_titles .~ ["Cash","Equity"]
      $ plot_bars_values .~ addIndexes [[20,45],[45,30],[30,20],[70,25]]
      $ plot_bars_style .~ BarsClustered
      $ plot_bars_spacing .~ BarsFixGap 30 5
      $ plot_bars_item_styles .~ map mkstyle (cycle defaultColorSeq)
      $ def

  alabels = [ "Jun", "Jul", "Aug", "Sep", "Oct" ]

  btitle = if borders then "" else " (no borders)"
  bstyle = if borders then Just (solidLine 1.0 $ opaque black) else Nothing
  mkstyle c = (solidFillStyle c, bstyle)

main :: IO ()
main = do
  _ <- renderableToFile def "example11_big.png" (chart True)
  return ()

1 Ответ

0 голосов
/ 30 декабря 2018

Цвет фона по умолчанию для layout - сплошной белый.Это несколько скрыто в документации Default экземпляра layout: http://hackage.haskell.org/package/Chart-1.9/docs/Graphics-Rendering-Chart-Layout.html

В вашем примере зеленый фон полностью перекрывается белым фоном layout.Цвет фона layout можно изменить с помощью объектива layout_background.

Поэтому, чтобы получить зеленый цвет, можно либо напрямую установить зеленый цвет фона макета:

layout =
      layout_title .~ "Sample Bars" ++ btitle
    $ layout_title_style . font_size .~ 10
    $ layout_x_axis . laxis_generate .~ autoIndexAxis alabels
    $ layout_y_axis . laxis_override .~ axisGridHide
    $ layout_left_axis_visibility . axis_show_ticks .~ False
    $ layout_plots .~ [ plotBars bars2 ]
    $ layout_background .~ (FillStyleSolid $ opaque green)
    $ def :: Layout PlotIndex Double

или установите прозрачный цвет фона макета и используйте fillBackground, как вы уже делаете:

...    
$ layout_background .~ (FillStyleSolid transparent)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...