[Numeric] ggplot for Haskell (was Re: [diagrams] Using charts in blogliteratelyd)

Dominic Steinitz dominic at steinitz.org
Tue Feb 17 17:41:41 UTC 2015


Hi Daniel,

Thanks for your comprehensive reply.

> I don't feel like I understand the design space enough to start such a
> project, but I'd contribute if someone gets it started, or I'd discuss
> it more first.

I am pretty sure I don't understand the design space either.

> Can you say a bit about what a library needs to be "like ggplot",
> rather than like other graphing libraries?  Is it mostly about
> separating the graph description from the data, and composable
> abstractions for the graph to support things like faceting?

I think we can already do faceting e.g.

https://idontgetoutmuch.files.wordpress.com/2014/06/044408c77f048f73.png?w=1560

I had a quick look at

http://byrneslab.net/classes/biol607/readings/wickham_layered-grammar.pdf

I may have misunderstood but I think it has a limited scope and
calling it a grammar of graphics suggests in can do more than it
actually can. That is not to be critical: it is very powerful just not
as powerful as the name suggests.

What I wanted to draw was something like this:

http://www.helsinki.fi/varieng/series/volumes/07/siirtola_et_al/figures/sfigure12.png

but that uses a package called Beanplot
(http://www.jstatsoft.org/v28/c01/paper) not ggplot.

I actually managed to sketch something that was close to what I wanted
using diagrams (not chart).

http://i.imgur.com/TeyloXA.png

So I feel we are quite close to something that is more powerful than
ggplot. But my attempts both at the above and at facets are not very
flexible / re-usable.

However, I feel I am re-inventing the charts wheel. What I feel I need
is access to the chart components not to just be able to create a
chart. Maybe we should talk directly to the author of charts.

I don't think it is possible to create the above example using
charts. A further thing one can't do with charts is annotations. I
believe one can do this in ggplot.

I think as you suggest, we need composable abstractions. For my
example, I created a grid and overlaid the histograms on top of
it. I'd like to overlay axes on it as well and a legend.

> I've used Chart (in Haskell) and ggplot a little, but mostly have
> experience with Python using matplotlib & pandas.  The last time I
> looked at making an R / pandas environment in Haskell, I got bogged
> down in picking a dataframe type.  tables[1] & Frames[2] both look
> relevant.

I've used frames and pandas a bit. As far as I understand it they
carry around a description of the data along with the data; ggplot can
then make use of this. I don't see it as essential and I wouldn't want
"ggplot in Haskell" to depend on either tables or frames

Maybe we could start "ggplot in Haskell" by somehow generalizing my
feeble examples?

Dominic Steinitz
dominic at steinitz.org
http://idontgetoutmuch.wordpress.com

On 17 Feb 2015, at 00:02, Daniel Bergey <bergey at teallabs.org> wrote:

> On 2015-02-16 at 09:15, idontgetoutmuch <idontgetoutmuch at googlemail.com> wrote:
>>   2. Why does haskell-chart load fonts but diagrams itself doesn't? Does 
>>   diagrams generate fonts on the fly somehow?
> 
> The answer depends on which Diagrams Backend you are using.  Backends
> which output raster images load the fonts they use.  Vector output
> formats may get away refering to the font name, and expecting the viewer
> to load the font.  Some vector backends can access font metrics to
> position (eg, center) text.
> 
> I may be wrong about some of the following table:
> 
> | Backend    | Embed Font / bitmap      | Font Metrics |
> |------------+--------------------------+--------------|
> | Cairo      | depends on output format | Y            |
> | SVG        | N                        | partial      |
> | Rasterific | Y                        | partial      |
> | Canvas     | N                        | partial      |
> 
> I believe Chart loads fonts to provide better text positioning than the
> Diagrams Backends currently support.  I think there's some low-hanging
> fruit, here, notably
> https://github.com/diagrams/diagrams-rasterific/issues/21
> now that Rasterific has the needed feature.
> 
>>   3. Has anyone shown any interest in writing something like ggplot using 
>>   diagrams? This would be a fantastic tool but wouldn't be a trivial 
>>   undertaking.
> 
> Quite a few people have expressed interest in *using* such a library.  I
> haven't heard anyone say they have time to write it, but maybe between
> us we do.
> 
> I don't feel like I understand the design space enough to start such a
> project, but I'd contribute if someone gets it started, or I'd discuss
> it more first.
> 
> Can you say a bit about what a library needs to be "like ggplot", rather
> than like other graphing libraries?  Is it mostly about separating the
> graph description from the data, and composable abstractions for the
> graph to support things like faceting?
> 
> I've used Chart (in Haskell) and ggplot a little, but mostly have
> experience with Python using matplotlib & pandas.  The last time I
> looked at making an R / pandas environment in Haskell, I got bogged down
> in picking a dataframe type.  tables[1] & Frames[2] both look relevant.
> 
> cheers,
> bergey
> 
> Footnotes: 
> [1]  http://hackage.haskell.org/package/tables
> 
> [2]  https://github.com/acowley/Frames
> 



More information about the Numeric mailing list