Échelle et taille de la parcelle de RStudio shiny

liée, mais ne parle que de l'espace alloué à la parcelle en général, pas comment définir directement la taille de l'image de parcelle et puis échelle pour remplir l'espace désiré

  • Attribution De L'Espace Sur Les Cartes Brillantes

je crée une application Web brillante et je voudrais définir la taille de la parcelle et échelle. Ce que je veux dire par c'est-à-dire que je cherche un moyen de définir une hauteur/largeur finie pour ma parcelle, et puis échelle qui a placé l'image dimensionnée à la zone mainPanel( plotOutput ()) .

prendre ceci comme exemple/situation analogue en dehors de shiny .

x <- 1:10
y <- x^2
png("~/Desktop/small.png", width = 600, height = 400)
plot(x, y)
dev.off()

png("~/Desktop/big.png", width = 1200, height = 800)
plot(x, y)
dev.off()

Je ne peux pas télécharger des images à SO et définir une taille, donc je vais inclure une capture d'écran de navigateur de chacun en utilisant le html suivant:

<img src="file:///home/jwhendy/Desktop/file.png" width = "800px" />

C'est une capture d'écran, pleine largeur sur mon portable 1600 x 900 px.

Petits smaller picture

Gros bigger picture

j'aimerais contrôler la taille de l'image elle-même, car je trouve les légendes ggplot2 en utilisant des options comme colour = var et size = var assez petites. Notez la difficulté de lire les étiquettes des axes pour une vue d'ensemble. Je me rends compte que je peux obtenir dans une situation où la taille de l'image ne se balance pas bien en raison de pixels limités, mais je pense que j'ai au moins certains chambre à voyager avant que je cours dans ce.

des suggestions? J'ai essayé de jouer avec les suivants jusqu'à présent, mais sans succès:

de l'interface utilisateur.R

shinyUI(pageWithSidebar(

headerPanel("Title"),

  sidebarPanel(),

  mainPanel(

     plotOutput(outputId = "main_plot", width = "100%"))

  ))

server.R

shinyServer(function(input, output) {

  x <- 1:10
  y <- x^2

  output$main_plot <- renderPlot({

    plot(x, y) }, height = 400, width = 600 )
} )

il semble que les options hauteur/largeur spécifiées dans server.R annulent tout ce que j'ai défini dans la section plotOutput de ui.R .

y a-t-il un moyen de réduire la taille de l'image de la parcelle pour en assurer la lisibilité tout en remplissant la zone désirée mainPanel ?

44
demandé sur Community 2013-07-24 19:38:28

2 réponses

Je ne suis pas sûr que cela vous donne entièrement ce que vous désirez, mais voici ce qui a fonctionné pour moi.

les options spécifiées dans Server.R sont entrées en vigueur. (Je viens de tracer deux graphiques de tailles différentes chacun. J'ai aussi suivi la suggestion de @Manetheran et j'ai fait cex et cex.axe en paramètres. Ils semblent être au travail.

ci-Dessous est le code de l'application complète, plus une capture d'écran.

###UI.R
shinyUI(pageWithSidebar(


  headerPanel("Title"),

  sidebarPanel(
    sliderInput(inputId = "opt.cex",
            label = "Point Size (cex)",                            
                min = 0, max = 2, step = 0.25, value = 1),
  sliderInput(inputId = "opt.cexaxis",
              label = "Axis Text Size (cex.axis)",                            
              min = 0, max = 2, step = 0.25, value = 1) 
),

  mainPanel(
    plotOutput(outputId = "main_plot",  width = "100%"),
    plotOutput(outputId = "main_plot2", width = "100%")
  )
))


###Server.R
shinyServer(function(input, output) {


  x <- 1:10
  y <- x^2

  output$main_plot <- renderPlot({    
    plot(x, y)}, height = 200, width = 300)


  output$main_plot2 <- renderPlot({
    plot(x, y, cex=input$opt.cex, cex.lab=input$opt.cexaxis) }, height = 400, width = 600 )
} )

enter image description here

mise à Jour. L'option Width=100% dans UI.R

Oui, dans mon cas, il fait vraiment une différence. Dans les deux lignes ci-dessous, new_main_plot et new_main_plot2 sont identiques, mais ils ont été rendus avec des tailles différentes. Donc l'option width prend effet.

 mainPanel(
    plotOutput(outputId = "new_main_plot",  width = "100%"),
    plotOutput(outputId = "new_main_plot2", width = "25%")
  )

Espère que ça aide.

26
répondu Ram Narasimhan 2015-02-25 13:07:44

la réponse de @Ram fonctionne très bien pour l'utilitaire de pointage base .

juste pour étendre pour les autres passants, de le faire avec ggplot:

p <- ggplot(data, aes(x = x, y = y)) + geom_point()
p <- p + theme(axis.text = element_text(size = 20)) # tweak size = n until content
print(p)

au moins quelque chose à cet effet, selon ce que vous voulez. Voir cette question pour l'idée de base, mais s'il vous plaît se référer à l'actuelle ggplot2 0.9.3 documentation sur le réglage des options de texte -- vous pouvez spécifier le texte d'axe, légende texte, facet_grid bande de texte, etc.

depuis la question précédente, la spécification est passée de opts([option] = theme_text(size = n)) à theme([option] = element_text(size = n)) . Il va probablement changer à nouveau... il suffit donc de trouver la page test/thème/options actuelle pour ggplot2 .


"j'ai joué un peu plus loin en me basant sur le suivi de @Ram et je pense comprendre comment ui.R et server.R interagissent en définissant différentes options et en regardant le Inspect element en chrome.

de l'interface utilisateur.R définit la zone de placage disponible que l'on peut remplir, et le serveur.R définit la taille de la parcelle.

  • ui.R: width = 100%, server.R : aucune option établie

enter image description here

  • ui.R: largeur = 100%, server.R : Largeur = 800, hauteur = 600

enter image description here

  • ui.R: Largeur = 50%, server.R : Largeur = 800, hauteur = 600

enter image description here

  • ui.R: largeur = 200%, server.R : Largeur = 800, hauteur = 600

enter image description here

le dernier était tout ce que je devais voir afin de répondre à la question définitivement. Si vous répliquez l' paramètres, vous verrez que la zone de parcelle <div> est en effet 200% de la largeur de l'écran et crée une barre de défilement horizontale dans le navigateur... cependant, l'image est toujours à sa taille fixe.

vous can cependant, générez une image plus grande que la surface de la parcelle (en pixels), puis réduisez l'échelle via ui.R et spécifiez une option width = n % .

So... Je ne peux pas créer une image plus petite en pixels (qui crée plus grande taille du texte par rapport à l'ensemble du graphe) et ensuite le rendre plus grand pour avoir un texte plus grand. Il faut, en effet, créer un graphique de la taille de la zone de la placette (ou plus grand) et dimensionner le texte à la satisfaction via la commande de la placette (ou ggplot) elle-même.

on ne peut pas non plus spécifier, au moins à l'heure actuelle, un % pour la largeur dans server.R , probablement parce qu'il passe les options hauteur/largeur à la commande png() pour générer l'image. Vous allez avoir une erreur en essayant de faire que (mais ça valait le coup d'un coup).

Je ne suis pas d'accord que spécifier les options de taille de texte est une route plus facile que ce que je cherchais, mais au moins j'ai quelque chose qui fonctionne. Je fais de la " tricherie "tout le temps pour les documents en LaTeX avec pdf("file.pdf", width = 8, height = 6) , créer mon intrigue, et puis l'échelle comme je veux quand l'inclure dans le .fichier tex. Beaucoup plus simple, à mon avis, que futzing avec theme(axis.text = element_text(size = x)) pour chaque parcelle.

16
répondu Hendy 2017-05-23 10:31:17