我正在努力建立一个闪亮的应用程序,以重新滚动6面骰子。 一个有2个动作按钮。我想实现,每次点击重拍按钮都会在SAME(!!)图上添加另一个概率线。
每个概率线应该是另一种颜色(因此,如果你点击它30次,你会看到6个不同颜色的探测线作为结果)
使用“重新启动”按钮可以删除绘图中的所有打印图形,可以从头开始尝试(因此,如果一行打印时间也可以正常)。
这是我到目前为止所创造的:
library(ggplot2)
library(ggthemes)
library(extrafont)
ui <- fluidPage(
# Application title
titlePanel("Roll the dice"),
# Sidebar with a go_button and a restart_button
sidebarLayout(
sidebarPanel(
actionButton("reroll",
"ReRoll the dice",
width = "100%"),
br(),
br(),
actionButton("restart",
"Restart",
width = "100%")
),
# Show a plot
mainPanel(
plotOutput("plot")
)
)
)
server <- function(input, output) {
output$plot <- renderPlot({
input$reroll
a <- 1:6
b <- 1:1000
eyes <- sample(a,1000,replace=T)
six <- eyes == 6
c <- cumsum(six) / 1:1000
df <- data.frame(b , c)
gl <- geom_line(aes(x = b , y = c), size = 0.9, linetype="dashed", colour = "red", alpha = 0.5)
p <- ggplot(data = df) +
xlim(0, 1000) +
ylim(0, 1) +
labs(x="Number of Throws", y="Probability of 6") +
ggtitle("Approximation of Diceprobability") +
theme_fivethirtyeight() + scale_colour_fivethirtyeight() +
theme(axis.title = element_text(family="Atlas Grotesk Regular"),
legend.position="bottom", legend.direction="horizontal",
legend.title=element_blank(),
plot.title=element_text(family="Atlas Grotesk Medium"),
legend.text=element_text(family="Atlas Grotesk Regular"),
text=element_text(family="DecimaMonoPro"))
p + gl
})
}
shinyApp(ui=ui, server = server)
问题:
如何在同一个图中绘制不同的线条(你知道......我点击了30次,它在同一个图中构建了30行)
我如何编程,每一行都有另一种颜色?
如何用我的重启按钮“擦除”它可以再试一次?
我很高兴在那里得到每一个帮助: - )
非常感谢。
答案 0 :(得分:1)
observeEvent
触发按钮。reactiveValues
存储绘图和颜色计数器。保持ui
不变,然后制作server
:
server <- function(input, output) {
# start plot
p_blank <- ggplot() +
xlim(0, 1000) +
ylim(0, 1) +
labs(x="Number of Throws", y="Probability of 6") +
ggtitle("Approximation of Diceprobability") +
theme_fivethirtyeight() +
theme(legend.position="bottom", legend.direction="horizontal",
legend.title=element_blank())
#reactive values
reac <- reactiveValues()
reac$p_lines <- p_blank
reac$counter <- 0
# button functionality
observeEvent(input$reroll,
{
input$reroll
a <- 1:6
b <- 1:1000
eyes <- sample(a,1000,replace=T)
six <- eyes == 6
c <- cumsum(six) / 1:1000
df <- data.frame(b, c, counter = reac$counter)
gl <- geom_line(aes(x = b , y = c, col = factor(counter)), df,
size = 0.9, linetype="dashed", alpha = 0.5)
reac$p_lines <- reac$p_lines + gl
reac$counter <- reac$counter + 1
})
observeEvent(input$restart,
{
reac$p_lines <- p_blank
reac$counter <- 0
} )
# draw the plot
output$plot <- renderPlot(reac$p_lines)
}
答案 1 :(得分:0)
我不确定你想要实现什么,但除了:
要更新绘图,我会设置一个保持绘图对象的无功值。然后我会使用并观察事件以观察按钮按下。在此活动中添加您的新行。
然后,您可以为其他按钮创建一个observeEvent,以使用空图替换您的绘图对象。