Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Render Gadfly plots directly to a Gtk canvas

Tags:

gtk

julia

gadfly

Is it possible to render a Gadfly plot directly to a canvas? I would like to develop a Julia GUI using gtk which renders Gadfly plots.

I am hoping for something along the lines of:

some_plot = plot(x=[1,2,3],y=[4,5,6])
draw(ctx::CairoContext, some_plot)

or

draw(c::GtkCanvas, some_plot)

My current approach saves a png and then loads the image. Obviously not optimal:

ctx = getgc(canvas)
canvas_w = width(canvas)
canvas_h = height(canvas)

save(ctx)
set_source_rgb(ctx,1,1,1)
rectangle(ctx,0,0,canvas_w,canvas_h)
fill(ctx)
restore(ctx)

some_plot = plot(x=[1,2,3],y=[4,5,6])
draw(PNG("myplot.png", 8inch, 4inch), some_plot)

save(ctx)
image = read_from_png("myplot.png")
w = image.width
h = image.height
translate(ctx, canvas_w/2, canvas_h/2)
scale(ctx, canvas_w/w, canvas_h/h)
translate(ctx, -0.5*w, -0.5*h)
set_source_surface(ctx, image, 0, 0)
paint(ctx)
restore(ctx)

Thank you

like image 702
Mageek Avatar asked Jun 06 '14 22:06

Mageek


1 Answers

You should look at Tim Holy's package Immerse which does this, which can also be accessed through my package Plots.

Immerse creates Gadfly contexts and renders them to Gtk canvases with some additional interactive functionality.

like image 119
Tom Breloff Avatar answered Nov 08 '22 14:11

Tom Breloff