Rgl: легенда низкого разрешения

Привет, народ,

Я использую rgl и shinyrgl для создания графика 3D PCA в моем приложении Shiny. Затем я использую функцию legend3d для создания легенды. Как видно из изображения выше, легенда значительно ниже разрешения, чем сюжет. Кто-нибудь еще испытал эту проблему?

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

Matt

UI

tabItem(tabName = "3DTab",
 fluidRow(
 column(6, 
 rglwidgetOutput(outputId = "TDPCA")),
 column(6,
 box(title = "Customisation",
 width = NULL,
 collapsible = TRUE,
 selectizeInput(inputId = "TDPCAClass",
 label = "Class",
 choices = c("Day"))))

сервер

output$TDPCA <- renderRglwidget({
plot3d(x = TDPCA()$PC1, y = TDPCA()$PC2, z = TDPCA()$PC3, col = TDPCA()[[input$TDPCAClass]],
 xlab = paste("PC1", "-", TDPCA.var()["PC1"], "%"), ylab = paste("PC2", "-", TDPCA.var()["PC2"], "%"), zlab = paste("PC3", "-", TDPCA.var()["PC3"], "%"), type = "p")
 legend3d("topright", 
 legend = c("Monday", "Tuesday", "Wednesday", "Thursday", "Saturday"),
 pch = 16,
 col = palette("default"),
 cex=0.65, inset=c(0))
rglwidget()
})
1 ответ

Да, эта проблема упоминается на странице справки для legend3d. Проблема в том, что легенда создается для текущего размера окна rgl, который может быть изменен позже. Вы хотите сгенерировать его после изменения размера.

Я не совсем уверен, если вы можете запросить Shiny о том, какой размер будет отображаться в окне rgl, но одна возможность - просто угадать, например

output$TDPCA <- renderRglwidget({
plot3d(x = TDPCA()$PC1, y = TDPCA()$PC2, z = TDPCA()$PC3, col = TDPCA()[[input$TDPCAClass]],
 xlab = paste("PC1", "-", TDPCA.var()["PC1"], "%"), ylab = paste("PC2", "-", TDPCA.var()["PC2"], "%"), zlab = paste("PC3", "-", TDPCA.var()["PC3"], "%"), type = "p")
 par3d(windowRect = c(0, 0, 512, 512))
 legend3d("topright", 
 legend = c("Monday", "Tuesday", "Wednesday", "Thursday", "Saturday"),
 pch = 16,
 col = palette("default"),
 cex=0.65, inset=c(0))
rglwidget()
})

Отредактировано для добавления: Эта страница https://groups.google.com/forum/#!topic/shiny-discuss/ZmuZbQfJstg рассказывает о динамическом изменении размера.

licensed under cc by-sa 3.0 with attribution.