Подтвердить что ты не робот

Масштаб и размер участка в RStudio shiny

Связанный, но говорит только о выделенном пространстве сюжета вообще, а не о том, как напрямую установить размер изображения сюжета, а затем масштабировать его, чтобы заполнить нужное пространство.


Я создаю блестящее веб-приложение и хочу установить размер сюжета и масштаб. Я имею в виду, что я ищу способ установить конечную высоту/ширину для моего графика, а затем масштабировать изображение с установленным размером в область mainPanel( plotOutput ()).

Возьмем это как пример/аналогичную ситуацию вне 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()

Я не могу загружать изображения в SO и устанавливать размер, поэтому я буду включать скриншот каждого браузера, используя следующий html:

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

Это полный снимок экрана на моем ноутбуке с разрешением 1600 x 900 px.

Малый smaller picture

Большой bigger picture

Я хотел бы контролировать размер самого изображения, так как я нахожу легенды ggplot2 при использовании таких параметров, как colour = var и size = var, чтобы быть довольно маленьким. Обратите внимание на трудность чтения меток оси для большего изображения. Я понимаю, что могу попасть в ситуацию, когда размер изображения не очень хорошо масштабируется из-за ограниченных пикселей, но я думаю, что у меня, по крайней мере, есть место для поездки, прежде чем я столкнусь с этим.

Любые предложения? Я пробовал играть со следующим до сих пор, но не повезло:

ui.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 )
} )

Кажется, что параметры высоты/ширины, указанные в server.R, переопределяют все, что я установил в разделе plotOutput ui.R.

Есть ли способ уменьшить размер изображения на графике, чтобы поддерживать читаемость, сохраняя при этом желаемую область mainPanel?

4b9b3361

Ответ 1

Не уверен, что это дает вам полностью то, что вы хотите, но вот что сработало для меня.

Параметры, указанные в Server.R, вступили в силу. (Я просто построил два графика разных размеров каждый.) Я также принял предложение @Manetheran и сделал параметры cex и cex.axis в параметрах. Кажется, они работают.

Ниже приведен код для полного приложения, плюс один снимок экрана.

###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

Обновить повторно. параметр Width = 100% в UI.R

Да, в моем случае это определенно имеет значение. В двух строках ниже, new_main_plot и new_main_plot2 идентичны, но они были отображены с разными размерами. Таким образом, параметр width вступает в силу.

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

Надеюсь, что это поможет.

Ответ 2

Ответ

@Ram отлично подходит для утилиты построения base.

Просто для расширения для других прохожих, чтобы сделать это с помощью 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)

По крайней мере, что-то в этом плане, в зависимости от того, что вы хотите. См. этот вопрос для основной идеи, хотя, пожалуйста, обратитесь к текущему ggplot2 0.9.3 документация по настройке параметров текста - вы можете указать текст оси, текст легенды, текст полосы facet_grid и т.д.

Поскольку предыдущий вопрос SO, спецификация изменилась с opts([option] = theme_text(size = n)) на theme([option] = element_text(size = n)). Вероятно, это снова изменится... так что просто найдите текущую страницу тегов/тем/опций для ggplot2.


Я немного поиграл на основе @Ram followup и думаю, что понимаю, как ui.R и server.R взаимодействуют с настройкой разных параметров и смотрят на Inspect element в Chromium.

ui.R устанавливает доступную область области, которую можно заполнить, а server.R определяет размер графика.

  • ui.R: width = 100%, server.R: нет параметров

enter image description here

  • ui.R: width = 100%, server.R: width = 800, height = 600

enter image description here

  • ui.R: width = 50%, server.R: width = 800, height = 600

enter image description here

  • ui.R: width = 200%, server.R: width = 800, height = 600

enter image description here

Последнее, что я должен был увидеть, чтобы ответить на вопрос окончательно. Если вы скопируете настройки, вы увидите, что область графика <div> действительно составляет 200% от ширины экрана и создает горизонтальную полосу прокрутки в браузере... однако изображение по-прежнему имеет фиксированный размер.

Однако вы можете создать изображение большего размера, чем область графика (в пикселях), а затем масштабировать его с помощью ui.R и указать параметр width = n %.

Итак... Я не могу создать меньшее изображение в пикселях (что создает больший размер текста по отношению к общему сюжету), а затем делает его более крупным, чтобы иметь больший текст. Действительно, нужно создать граф размером области (или больше) и масштабировать текст до уровня удовлетворенности самой командой plot (или ggplot).

Также нельзя указать, по крайней мере, в настоящее время% для ширины в server.R, предположительно потому, что она передает параметры высоты/ширины в команду png() для генерации изображения. Вы получите ошибку, пытающуюся это сделать (но это было достойно внимания).

Я не согласен с тем, что указание параметров размера текста - это более простой путь, чем то, что я искал, но по крайней мере у меня есть что-то, что работает. Я делаю "обман" все время для документов LaTeX с помощью pdf("file.pdf", width = 8, height = 6), создаю свой сюжет, а затем масштабирую его, но я хочу, включив его в .tex файл. На мой взгляд, гораздо проще, чем futzing с theme(axis.text = element_text(size = x)) для каждого сюжета.