98 lines
2.1 KiB
R
98 lines
2.1 KiB
R
|
|
library(apexcharter)
|
|
library(shiny)
|
|
|
|
ui <- fluidPage(
|
|
tags$h2("Real time charts with {apexcharter}"),
|
|
tags$hr(),
|
|
fluidRow(
|
|
column(
|
|
width = 4,
|
|
# verbatimTextOutput("res"),
|
|
apexchartOutput(outputId = "gauge")
|
|
),
|
|
column(
|
|
width = 4,
|
|
apexchartOutput(outputId = "bar")
|
|
),
|
|
column(
|
|
width = 4,
|
|
apexchartOutput(outputId = "line")
|
|
)
|
|
)
|
|
)
|
|
|
|
server <- function(input, output, session) {
|
|
|
|
rv <- reactiveValues(x = data.frame(
|
|
time = sort(Sys.Date() - 1:20),
|
|
value = round(rnorm(20, mean = 10)),
|
|
groups = sample(LETTERS, 20, TRUE),
|
|
hits = round(runif(20, 1, 100)),
|
|
stringsAsFactors = FALSE
|
|
))
|
|
|
|
r <- reactive({
|
|
invalidateLater(1000)
|
|
rv$x <- rbind(
|
|
isolate(rv$x),
|
|
data.frame(
|
|
time = isolate(tail(rv$x$time, 1) + 1),
|
|
value = round(rnorm(1, mean = 10)),
|
|
groups = sample(LETTERS, 1, TRUE),
|
|
hits = round(runif(1, 1, 100))
|
|
)
|
|
)
|
|
})
|
|
|
|
output$res <- renderPrint({
|
|
tail(r(), 20)
|
|
})
|
|
|
|
output$line <- renderApexchart({
|
|
apex(data = tail(r(), 20), mapping = aes(x = time, y = value), type = "spline") %>%
|
|
ax_chart(animations = list(
|
|
enabled = TRUE, easing = "linear", dynamicAnimation = list(enabled = FALSE)
|
|
)) %>%
|
|
ax_xaxis(range = 777600000)
|
|
})
|
|
|
|
output$bar <- renderApexchart({
|
|
apex(
|
|
data = table(groups = r()$groups),
|
|
mapping = aes(x = groups, y = Freq),
|
|
type = "column"
|
|
)
|
|
})
|
|
|
|
output$gauge <- renderApexchart({
|
|
apex(
|
|
data = NULL,
|
|
type = "radialBar",
|
|
mapping = aes(x = "Last value", y = tail(r()$hits, 1))
|
|
) %>%
|
|
ax_plotOptions(
|
|
radialBar = radialBar_opts(
|
|
startAngle = -135,
|
|
endAngle = 135,
|
|
dataLabels = list(
|
|
name = list(
|
|
fontSize = "16px",
|
|
offsetY = 120
|
|
),
|
|
value = list(
|
|
offsetY = 76,
|
|
fontSize = "22px",
|
|
formatter = JS("function (val) {return val + ' hits';}")
|
|
)
|
|
)
|
|
)
|
|
) %>%
|
|
ax_stroke(dashArray = 4)
|
|
})
|
|
|
|
}
|
|
|
|
if (interactive())
|
|
shinyApp(ui, server)
|