2017-05-18 11 views
0

Je voudrais afficher un objet plot intrigue dans une fenêtre autonome qui se comporte de manière similaire à la fenêtre qui apparaît en utilisant la fonction de base R plot().R intrigue ouverte dans une fenêtre autonome

l'aide d'un exemple de base à partir du site plotly:

library(ggplot2) 
library(plotly) 

d <- diamonds[sample(nrow(diamonds), 1000), ] 
p <- ggplot(data = d, aes(x = carat, y = price)) + 
    geom_point(aes(text = paste("Clarity:", clarity))) + 
    geom_smooth(aes(colour = cut, fill = cut)) + facet_wrap(~ cut) 

p2 <- ggplotly(p) 

L'objet p2 est un objet htmlwidget et je reçois un certain contrôle sur son écran en utilisant l'élément sizingPolicy comme décrit here. Cependant, je ne trouve rien qui me permette de définir le navigateur/spectateur à autre chose que mon navigateur actuel (comme un nouvel onglet) ou dans RStudio. Idéalement, je voudrais éviter les applications en dehors des paquets R pour lancer une fenêtre séparée à partir de R. Cependant, je serais également heureux de trouver comment contrôler de façon granulaire la sortie du navigateur pour afficher p2 comme une nouvelle fenêtre dans kiosque ou mode app (voir les réponses à this question pour quelques exemples de mode kiosque/application).

Éditer: Bien que j'ai mentionné RStudio en discutant de certaines des options que j'ai pu trouver, je parle d'utiliser R à partir d'une console simple. Cela dit, les options d'affichage granulaires devraient, espérons-le, être indépendantes de l'interface utilisateur.

+0

Parlez-vous de l'utilisation de R-Studio? Semble que vous êtes, mais 'plot' n'ouvre pas une nouvelle fenêtre dans R-Studio. À moins qu'il y ait une option que je ne connais pas (probablement). Et pourquoi afficher un 'htmlwidget' dans un navigateur n'est pas la même chose que ce que vous demandez? –

+0

@MikeWise Ceci peut être utilisé en dehors de R-Studio. Afficher dans un navigateur serait suffisant, si je pouvais avoir un certain contrôle sur cet affichage - ouverture d'une nouvelle page en mode kiosque ou application. Le comportement par défaut de virer un autre onglet vers le 20 que j'ai pu ouvrir et déplacer mon navigateur vers l'espace de travail virtuel actuel n'est pas particulièrement pratique. – ssokolen

+0

Hmm, vous pouvez essayer d'ajouter une autre extension à votre fichier (comme ils le font avec '.svg' dans votre lien' htmlwidget' sous 'forceNetwork'), en enregistrant cette extension dans un autre navigateur que vous n'utilisez pas. Peut-être que ça te ferait ce que tu veux? –

Répondre

1

J'ai une solution de travail, mais je serai heureux de changer la réponse acceptée si quelqu'un a quelque chose de mieux.

J'ai défini une fonction d'impression qui peut être utilisée pour lancer une commande de navigation personnalisée pour un objet htmlwidget. Dans ce cas, j'ai utilisé chromium-browser -app=..., mais l'approche globale devrait être générale.

print_app <- function(widget) { 

    # Generate random file name 
    temp <- paste(tempfile('plotly'), 'html', sep = '.') 

    # Save. Note, leaving selfcontained=TRUE created files that froze my browser 
    htmlwidgets::saveWidget(widget, temp, selfcontained = FALSE) 

    # Launch with desired application 
    system(sprintf("chromium-browser -app=file://%s", temp)) 

    # Return file name if it's needed for any other purpose 
    temp 
} 

La combinaison avec l'exemple précédent:

library(ggplot2) 
library(plotly) 

d <- diamonds[sample(nrow(diamonds), 1000), ] 
p <- ggplot(data = d, aes(x = carat, y = price)) + 
    geom_point(aes(text = paste("Clarity:", clarity))) + 
    geom_smooth(aes(colour = cut, fill = cut)) + facet_wrap(~ cut) 

p2 <- ggplotly(p) 
print_app(p2) 

Il semble que htmlwidgets utilise normalement la fonction html_print de htmltools, ce qui sélectionne le navigateur à utiliser par getOption("viewer", utils::browseURL) qui fait cuire dans beaucoup de options de sélection du navigateur - ce qui rend le changement difficile. L'idée d'enregistrer le fichier html localement vient de ce numéro plotly: saving plotly plots locally?.

+0

Ça me semble plutôt bien. :) –

+0

Comment ça marche? Avec 'rscript'? Et quel système utilisez-vous? –

+0

@MikeWise J'utilise Linux (Mint et Arch) et j'exécute généralement des commandes ou des scripts sources dans le shell R interactif de base. Je viens de vérifier et cela fonctionne aussi bien avec RStudio qu'avec Rscript. Je ne suis pas sûr de tout autre système d'exploitation cependant. – ssokolen