ggplotd - curve colour
Edwin van Leeuwen via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun May 8 23:24:22 PDT 2016
On Monday, 9 May 2016 at 02:29:47 UTC, brocolis wrote:
> Is this correct usage?
> auto gg = GGPlotD().put( geomLine( Aes!(typeof(xs), "x",
> typeof(ysfit), "y", string, "colour")( xs, ysfit, "red") ) );
>
> The output is a blank png file.
>
> Full source:
> import ggplotd.ggplotd;
> import ggplotd.geom;
> import ggplotd.aes;
> import ggplotd.axes;
>
> void main()
> {
> import std.array : array;
> import std.algorithm : map;
> import std.range : iota;
> import ggplotd.colour;
>
> auto f = (double x) { return x; };
> auto xs = iota(-5, 5, 0.1 ).array;
> auto ysfit = xs.map!((x) => f(x)).array;
> auto gg = GGPlotD().put( geomLine( Aes!(typeof(xs), "x",
> typeof(ysfit), "y", string, "colour")( xs, ysfit, "red") ) );
>
> gg.put( xaxisOffset( 0) ).put( yaxisOffset( 0) );
> gg.save( "axes.png", 500, 300 );
> }
The problem there is that colour also needs to be an InputRange.
This is so that different points can have a different colours
associated with it, which is particularly useful if you want to
plot some data and have different types of data plotted as
different colours.
In your example you can either do:
```
auto colour = "red".repeat( xs.length );
auto gg = GGPlotD().put( geomLine( Aes!(typeof(xs), "x",
typeof(ysfit), "y", typeof(colour), "colour")( xs, ysfit,
colour) ) );
```
Or use the mergeRange function mentioned before, which will
automatically repeat if one argument is a single element.
```
auto aes = Tuple!( string, "colour" )( "red" ).mergeRange(
Aes!(typeof(xs), "x",
typeof(ysfit), "y" )( xs, ysfit ) );
```
More information about the Digitalmars-d-learn
mailing list