如何在 Haskell 图表包中设置图表的背景颜色?
How do I set a background colour of a chart in the Haskell Chart package?
我这里有一个完整的例子: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 ()
layout
的默认背景颜色是纯白色。这有点隐藏在 layout
的 Default
实例的文档中:
http://hackage.haskell.org/package/Chart-1.9/docs/Graphics-Rendering-Chart-Layout.html
在您的示例中,绿色背景完全被 layout
的白色背景覆盖。
可以使用 layout_background
镜头修改 layout
的背景颜色。
因此要实现绿色,您可以直接将布局的背景颜色设置为绿色:
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)
...
我这里有一个完整的例子: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 ()
layout
的默认背景颜色是纯白色。这有点隐藏在 layout
的 Default
实例的文档中:
http://hackage.haskell.org/package/Chart-1.9/docs/Graphics-Rendering-Chart-Layout.html
在您的示例中,绿色背景完全被 layout
的白色背景覆盖。
可以使用 layout_background
镜头修改 layout
的背景颜色。
因此要实现绿色,您可以直接将布局的背景颜色设置为绿色:
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)
...