Haskell 图表 SVG 文件的边距

Margin of a Haskell diagrams SVG file

我正在尝试这个图表示例:

funs          = map (flip (^)) [2..6]
visualize f   = stroke' (with & vertexNames .~ [[0 .. 6 :: Int]] )
                    (regPoly 7 1)
                  # lw none
                  # showLabels
                  # fontSize (Local 0.6)
             <> star (StarFun f) (regPoly 7 1)
                  # stroke # lw thick # lc red
example       = center . hcat' (with & sep .~ 0.5) $ map visualize funs

结果如下:

一切都像预期的那样,一些数字(或更准确地说,这些数字的中心)位于图像的边缘附近,所以最后它们看起来像是被切掉了。

有办法解决吗?

我通过创建一个新函数部分解决了这个问题addMargin:

{-# LANGUAGE NoMonomorphismRestriction #-}

import Diagrams.Prelude
import Diagrams.Backend.SVG.CmdLine



funs          = map (flip (^)) [2..6]
visualize f   = stroke' (with & vertexNames .~ [[0 .. 6 :: Int]] )
                    p
                  # lw none
                  # showLabels
                  # fontSize (Local 1.6)
             <> star (StarFun f) p
                  # stroke # lw thick # lc red
             where
               p = (regPoly 7 2)

example       = center . hcat' (with & sep .~ 5) $ map visualize funs

addMargin m a = c where
  c = s === b === s where
    s = strutY m
    b = s' ||| a ||| s' where
      s' = strutX m


main = mainWith (addMargin 33 example :: Diagram B R2)

除了右侧的 0 不知何故仍然被某些东西覆盖外,一切看起来都很好。

问题是文本没有信封,所以它的大小没有被考虑在内。您可以使用向信封添加边框的 frame 函数来解决您的问题。

example = frame 2 . center . hcat' (with & sep .~ 5) $ map visualize funs