Я бы хотел, чтобы метки осей на моем блестящем графике отображали метку переменной (ту, которую пользователь видит и выбирает), а не само имя переменной.
Таким образом, в идеале, если пользователь выберет «Доля преступности» для построения на оси y, на метке оси y будет указано «Доля преступности», а не имя переменной «CRIMESHARE». Моя диаграмма делает последнее прямо сейчас.
Я новичок в Shiny, и я искал понятный ответ на этот вопрос, но я в тупике. Должен ли я написать реактивное утверждение с серией операторов if (то есть, если пользователь выбрал «CRIMESHARE» -> «Доля преступления»)? Если да, то есть какие-нибудь предложения о том, как лучше к этому подойти? Или есть более простой, блестящий способ приблизиться к этому? При необходимости я могу создать пример данных, но я решил, что это скорее концептуальные вопросы.
Спасибо.
Пример данных:
structure(list(ROADACCIDENT = c(142.69999694825, 120.40000152588,
130.19999694825, 155.10000610352, NA, 181.10000610352, 54.20000076294,
118.09999847413, 85.19999694825, 112.40000152588), CRIMESHARE = c(3142,
1695, 1554, 2806, 3368, 3164, 1359, 2013, 711, 2446), MURDER = c(267,
605, 309, 185, 65, 590, 93, 631, 501, 138), NAME = c("Khabarovsk Krai",
"Chelyabinsk Oblast", "Novosibirsk Oblast", "Amur Oblast", "Magadan
Oblast",
"Krasnoyarsk Krai", "Karachay-Cherkess Republic", "Moscow", "Moscow",
"Kostroma Oblast"), ID = c(29, 13, 49, 5, 41, 36, 26, 44, 44,
34), YEAR = c(2009, 1992, 1990, 2007, 2001, 2007, 1999, 2009,
1991, 2000)), row.names = c(608L, 255L, 1009L, 102L, 852L, 753L,
535L, 923L, 905L, 704L), class = "data.frame")
Пользовательский интерфейс:
library(shiny)
library(tidyverse)
library(stringr)
library(rsconnect)
library(shinythemes)
library(plotly)
data(crime_master)
crime_plot <- crime_master
ui <- fluidPage(theme = shinytheme("cerulean"),
titlePanel("My title"),
sidebarLayout(
sidebarPanel(
h3("Select the inputs"),
selectInput(inputId = "y",
label = "Indicator to display on Y-axis",
choices = c("Road accidents" = "ROADACCIDENT",
"Crime share" = "CRIMESHARE",
"Murders" = "MURDER"),
selected = "ROADACCIDENT"),
selectizeInput(inputId = "region",
label = "Select regions",
choices = c(crime_plot$NAME),
multiple = TRUE,
options = list(maxItems = 5))),
mainPanel(
h3("Plot indicators over time"),
plotlyOutput(outputId = "scatterplot"))))
Сервер:
server <- function(input, output){
regions_subset <- reactive({
req(input$region)
filter(crime_plot, NAME %in% input$region)})
output$scatterplot <- renderPlotly({
ggplotly(ggplot(data = regions_subset(),
aes_string(x = "YEAR", y = input$y, color = "NAME")) +
geom_point() +
labs(x = "Year", y = input$y) +
scale_color_discrete(name = "Regions"))})
output$event <- renderPrint({
k <- event_data("plotly_hover")
if (is.null(k)) "Hover on a point!" else d})}
shinyApp(ui = ui, server = server)