I'm using GNUPlot.Simple for Haskell and am trying to plot 2 charts on top of each other. One is using the filled curve format, one is a normal line. The code I am using is :
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]) )]
They work fine when I do them separately as:
plotListsStyle [] [ (( defaultStyle {plotType = FilledCurves} ) , ( zip3 [1,2,3] [2,3,4] [0,1,2] ))]
and
plotListsStyle [] [((PlotStyle {plotType = Lines, lineSpec = CustomStyle [PointSize 0.1] }), (zip [1,2,3] [1,2,3]) )]
but not when done together. Is it possible to overlay GNUPlots on top of each other?
CodePudding user response:
It looks like you just need to trick the type checker by supplying some extra data that GNUPlot doesn't actually need. Try something like:
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
]
The problem here is that plotListsStyle
takes a list of tuples, and -- as with all Haskll lists -- all the tuples need to be of the same type, so you can't have data of type [(Double,Double,Double)]
in one tuple and data of type [(Double,Double)]
in another.