将Gadfly直接渲染到Gtk画布上

Mag*_*eek 9 gtk julia gadfly

是否有可能将牛fly图直接渲染到画布上?我想用gtk开发一个Julia GUI,它渲染了Gadfly图.

我希望有类似的东西:

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

要么

draw(c::GtkCanvas, some_plot)
Run Code Online (Sandbox Code Playgroud)

我当前的方法保存了一个png然后加载图像.显然不是最佳的:

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)
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 2

您应该查看 Tim Holy 的包Immerse ,它可以执行此操作,也可以通过我的包Plots访问它。

Immerse 创建 Gadfly 上下文并将它们渲染到具有一些附加交互功能的 Gtk 画布。