Search code examples
gtkjuliagadfly

Render Gadfly plots directly to a Gtk canvas


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


Solution

  • 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.