2016-09-08 1 views
1

Avec Gadfly il est possible de combiner des parcelles dans une grille et enregistrer la parcelle combinée dans un fichier:Gadfly: ouvrir des parcelles empilées directement dans le navigateur?

using Gadfly, Compose 

x=1:0.1:5; 
grid = Array(Compose.Context, (2, 2)); 
grid[1,1] = render(plot(x=x, y = x, Geom.line)); 
grid[1,2] = render(plot(x=x, y = x.^2, Geom.line)); 
grid[2,1] = render(plot(x=x, y = log(x), Geom.line)); 
grid[2,2] = render(plot(x=x, y = sqrt(x), Geom.line)); 
draw(SVG("example.svg", 100mm, 100mm), gridstack(grid)); 

j'ai écrit une fonction qui crée une telle intrigue et cette fonction crée un fichier. Il est un peu inintéressant pour quelqu'un qui veut utiliser cette fonction pourquoi exactement cette fonction crée un fichier, tandis que les résultats de toutes les autres fonctions de tracé avec des graphiques simples sont affichés directement dans le navigateur.

Alors, est-il possible d'appeler une fonction (à la place de draw?) De telle sorte que le tracé combiné défini par la grille soit affiché directement dans le navigateur comme des tracés "normaux"?

Répondre

3
function as_temp_html(gadflyplot) 
    thefilepath=tempname() * ".html" 
    write(open(thefilepath,"w"),stringmime("text/html",gadflyplot)) 
    return thefilepath 
end 

Vous pouvez ouvrir ce fichier dans votre navigateur en réutilisant Gadfly's crossplatform "open_file" method:

function open_file(filename) 
    if is_apple() 
     run(`open $(filename)`) 
    elseif is_linux() || is_bsd() 
     run(`xdg-open $(filename)`) 
    elseif is_windows() 
     run(`$(ENV["COMSPEC"]) /c start $(filename)`) 
    else 
     warn("Showing plots is not supported on OS $(string(Compat.KERNEL))") 
    end 
end 

EDIT: maintenant la réponse utilise le code Gadfly exclusif

+0

Merci. OK, il semble qu'il n'y ait pas d'autre choix que de créer un fichier html temporaire et de l'ouvrir dans le navigateur moi-même. J'ai trouvé que Gadfly a le mécanisme presque identique pour cela (voir https://github.com/dcjones/Gadfly.jl/blob/master/src/Gadfly.jl). J'accepterai votre réponse si vous changez la fonction 'open_browser_window' en la fonction' open_file' de Gadfly et remplacez le lien vers le paquet Plots par un lien vers le référentiel Gadfly. Cela n'a pas vraiment de sens d'utiliser un paquet de traçage pour afficher l'intrigue d'un autre paquet de traçage, si la fonctionnalité y est également fournie. – esel

+0

bien qu'il existe des outils pour faire la même chose sans écrire sur le disque (process process, websockets), mais pour autant que je sache, ceux-ci n'ont pas été travaillés pour faire ce que vous demandez (live-editing-and-update et-tracer ou chercher-mettre à jour-renvoyer-du-navigateur). Jetez un oeil à [Interact.jl] (https://github.com/JuliaLang/Interact.jl), bien que ... pourrait devenir utile –