gpt4 book ai didi

r - geom_label 不会相应地缩放以在 Shiny 中绘制

转载 作者:行者123 更新时间:2023-12-02 02:46:45 25 4
gpt4 key购买 nike

在构建我的 Shiny 应用程序时,我遇到了 ggplot2 图形在不同窗口大小下看起来非常不同的情况。第一张图以完整的桌面大小显示了情节——一切都很好: enter image description here

但是,当我更改输出窗口的大小时,每个元素似乎都适当缩小,但不是 geom_label(见下图)。

enter image description here

为什么会这样,我怎样才能使 geom_label 相应地缩小?

Shiny 的设置是:

ui <- fluidPage(

mainPanel(
selectInput('cluster', '', 1:7),
plotOutput('ap_plot', height = 200)
)
)
)

server <- function(input, output, session) {
output$ap_plot <- renderPlot({
data %>%
filter(cluster == input$cluster) %>%
plot_sequences(.by = ts_cluster, .colour = id)
})
}

shinyApp(ui = ui, server = server)

最佳答案

详细in the shiny documentation当前绘图的绘图宽度在 session$client_data$output_<plotname>_width 中定义, 所以对于你的例子 session$client_data$output_ap_plot_width .这可用于缩放 geom_label 的文本参数.您没有提供最小的可重现示例,但这里有一个:

data <- tibble(
cluster = sample(7, 100, replace = TRUE),
x = rnorm(100),
y = rnorm(100)
)

plot_sequences <- function(data_set, width) {
label_data <- data_set %>%
summarise(
n = n(),
mean_x = mean(x),
mean_y = mean(y),
label = sprintf("N: %d\nMean x: %0.3f\nMean y: %0.3f", n, n, mean_x, mean_y)
)

ggplot(data, aes(x, y)) +
geom_point() +
geom_label(aes(x = 1.5, y = 1.5, label = label), label_data, size = 4 / 900 * width)
}

ui <- fluidPage(
mainPanel(
width = 12,
selectInput('cluster', '', 1:7),
plotOutput('ap_plot', height = 200)
)
)

server <- function(input, output, session) {
width <- 400
output$ap_plot <- renderPlot(execOnResize = TRUE, {
data %>%
filter(cluster == input$cluster) %>%
plot_sequences(session$clientData[["output_ap_plot_width"]])
})
}

shinyApp(ui = ui, server = server)

您可以看到我的绘图函数将绘图宽度作为输入,然后相应地缩放文本大小,使用 900 像素的宽度作为基线。另请注意,我设置了 execOnResize成为TRUE ,否则在调整窗口/绘图大小时将重播绘图而不是重新计算。

关于r - geom_label 不会相应地缩放以在 Shiny 中绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54389494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com