有没有办法将 Haskell GNUPlot 图相互叠加?

Is there a way to overlay Haskell GNUPlot plots on top of each other?

我将 GNUPlot.Simple 用于 Haskell,并试图绘制 2 个图表。 一种是使用填充曲线格式,一种是法线。 我使用的代码是:

plotListsStyle []  [ (( defaultStyle {plotType =  FilledCurves} ) , ( zip3 [1,2,3] [2,3,4] [0,1,2] )), ((PlotStyle {plotType = Lines, lineSpec = CustomStyle [PointSize 0.1] }), (zip [1,2,3] [1,2,3]) )]

当我分别做它们时它们工作正常:

plotListsStyle []  [ (( defaultStyle {plotType =  FilledCurves} ) , ( zip3 [1,2,3] [2,3,4] [0,1,2] ))]

plotListsStyle [] [((PlotStyle {plotType = Lines, lineSpec = CustomStyle [PointSize 0.1] }), (zip [1,2,3] [1,2,3]) )]

但一起完成时不会。 是否可以将 GNUPlots 相互叠加?

看起来您只需要通过提供一些 GNUPlot 实际上不需要的额外数据来欺骗类型检查器。尝试类似的东西:

import Graphics.Gnuplot.Simple

main = do
  plotListsStyle []
    [ ( defaultStyle {plotType =  FilledCurves}
      , zip3 [1::Double,2,3] [2::Double,3,4] [0::Double,1,2] )
    , ( PlotStyle {plotType = Lines, lineSpec = CustomStyle [PointSize 0.1] }
      , zip3 [1::Double,2,3] [1::Double,2,3] (repeat 0))
--                                           ^^^^^^^^^^
--                            Provide this useless extra data
    ]

这里的问题是 plotListsStyle 接受一个元组列表,并且——与所有 Haskll 列表一样——所有元组都必须是同一类型,所以你不能有数据在一个元组中键入 [(Double,Double,Double)],在另一个元组中键入 [(Double,Double)] 类型的数据。