簡體   English   中英

如何在 Shiny-R 的 ggplot2 中的 geom_line 和 geom_bar 可視化之間切換

[英]How to switch between geom_line and geom_bar visualization in ggplot2 in Shiny - R

我希望用戶選擇是否要在圖表上看到geom_linegeom_bar

使用checkboxGroupInput最好的方法是什么?

假設我有這個帶有geom_line情節:

ggplot(regiao, aes(x=Ano,fill=Regiao, color=Regiao))+
    geom_line(stat='count')

而這個帶有geom_bar

ggplot(regiao, aes(x=Ano,fill=Regiao, color=Regiao))+
    geom_bar()+
    stat_count()

我想知道如何被動地設置 ggplot 的參數。

我到處搜索,但只能找到值的反應函數,而不是參數,就像這樣: ggplot2 with反應幾何線

我想它應該是這樣的:

ggplot(regiao, aes(x=Ano,fill=Regiao,color=Regiao))+
if (input$checkbox == "bars") {
 + geom_bar()+
stat_count()
}
if (input$checkbox=="lines") {
+geom_line(stat='count')
}

您可以將ggplot對象保存到變量中,然后根據需要在其上構建。 在 Shiny 上下文之外,您可以通過引用變量或將添加到ggplot的任務封裝在函數中來完成此操作。 在 Shiny 上下文中,您可以根據用戶輸入決定向對象添加什么。

例如,在普通的 R 上下文中:

library(ggplot2)

set.seed(123)
df <- data.frame(
  month = 1:10,
  value = runif(10)
)

創建基礎ggplot對象。 例如,我還指定了 y 比例,因為ggplot元素(如 geoms 和 scales)不必以任何順序添加。 您可能有一些規范,例如無論幾何類型如何都保持不變的比例。

plot_base <- ggplot(df, aes(x = month, y = value)) +
  scale_y_continuous(labels = scales::percent)

然后根據什么類型的繪圖添加一個幾何圖形。 在 Shiny 應用程序中,這將改為input$plot_type ,並采用一對單選按鈕或其他一些輸入的值。 該決策將在您的渲染函數中進行,例如renderPlot

plot_type <- "Line"

if(plot_type == "Line") {
  p <- plot_base +
    geom_line()
} else {
  p <- plot_base +
    geom_col()
}
p

相同的邏輯適用於條形/列。 您只是不必再次運行 if/else — 當用戶更改輸入時,它會重新運行。

plot_type <- "Bar"

if(plot_type == "Line") {
  p <- plot_base +
    geom_line()
} else {
  p <- plot_base +
    geom_col()
}
p

reprex 包(v0.2.1) 於 2018 年 10 月 17 日創建

您能否制作兩個圖,然后使用復選框作為條件來確定輸出內容?

output$myPlot <- renderPlot(ifelse(input$checkbox == "bars", myBarPlot, myLinePlot))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM