Я сделал классное приложение Shiny, которое позволяет пользователям изменять размер своего графика и перемещать его по холсту.
Проблема в том, что иногда загруженный график выглядит совсем не так, как отображается на панели просмотра - он выглядит как квадратный рисунок, который может обрезать график, если вы измените масштаб и расположение.
Если вы рисуете его в масштабе 0,5, он выглядит одинаково в браузере и в загруженном PNG. - Но если вы сделаете его в масштабе 0,8 или даже просто в масштабе 1,0, он будет выглядеть идеально на панели просмотра, но уродливо и смещено при печати с помощью ggsave ().
Возможно, это вопрос о настройке параметров для ggsave? Или у меня фоновое изображение странного размера (1920 x 1028 пикселей)? Или, может быть, реактивная панель как-то сбрасывает ...? Я смущен в этом пункте.
В любом случае я нарисовал серый фон за областью графика, чтобы вы могли легко отличить холст от панели.
А вот минимальный воспроизводимый пример.
library(shiny)
library(tidyverse)
library(magick)
library(cowplot)
picture <- 'https://content.halocdn.com/media/Default/games/halo-5-guardians/map-images/arena/arena_maps_sustain_array04-bddc574f8e3445d08f24ef859fb96941.jpg'
background <- image_read(picture)
ui <- fluidPage(
# Application title
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30),
sliderInput("xposition",
"X-Axis Position",
min = -1,
max = 1,
value = 0,
step = 0.1),
sliderInput("yposition",
"Y-Axis Position",
min = -1,
max = 1,
value = 0,
step = 0.1),
sliderInput("scale",
"Chart Scale",
min = .25,
max = 1,
value = .5,
step = 0.1)),
# Show a plot over grey background to see how canvas shifts
mainPanel(style = "background:grey",
plotOutput("distPlot"),
downloadButton("downloadPlot", "Download")
)
)
)
server <- function(input, output) {
xposition <- reactive({input$xposition})
yposition <- reactive({input$yposition})
scale <- reactive({input$scale})
plot <- reactive({
base_plot <- ggplot(faithful, aes(x = waiting), bins = input$bin) +
geom_histogram()
ggdraw() +
draw_image(background) +
draw_plot(base_plot, x = xposition(), y = yposition(), scale = scale())
})
## Use Cowplot package to alter scale and position
output$distPlot <- renderPlot({
# draw the histogram with the specified number of bins
plot()
})
output$downloadPlot <- downloadHandler(
filename = "my_awesome_plot.png",
content = function(file) {
ggsave(file, plot())
}
)
}
# Run the application
shinyApp(ui = ui, server = server)
Если вы попробуете масштаб 0,5, масштаб 0,8 и масштаб 1,0, вы поймете, что я имею в виду!
Любая помощь ????
Примечание. Воспроизводимого примера, приведенного выше, должно быть достаточно, чтобы найти проблему, но если вы хотите увидеть более «глубокий» пример, вот мое настоящее приложение, в котором больше изображений и больше реактивного масштабирования и позиционирования.
https://jjohn987.shinyapps.io/Halo5_Stats/
Введите имя тега игрока (например, эти рабочие => hi, k, hairball9000 или другие теги игрока, которые используют люди, но без запятых или пробелов), и вы увидите, что то, что кажется «нижней» Сюжет сильно отличается от того, что находится в нижней части загрузки ... Имейте в виду, что я не подал заявку на какую-либо значительную пропускную способность API от Microsoft, поэтому время ожидания вызовов может зависеть от того, сколько людей пытаются помочь!