I have this shiny app and I want to color the points in the 3d scatterplot based on the date selected by giving them a speicific color every time and not a random color which will change when I hide and then bring them back again. But all my points are still blue
library(shiny)
library(tidyverse)
library(plotly)
library(dplyr)
df2<-structure(list(publicationDate = structure(c(18610, 18410, 18597,
18375, 18284), class = "Date"), x = c(8.593744, 10.341268, 11.454429,
10.595986, 11.012522), y = c(4.2456923, 6.767409, 5.2631335,
6.5070715, 7.6513457), z = c(5.6303487, 8.002673, 6.332502, 8.773426,
8.604475), influentialCitationCount = c(98.2037608756666, 100,
37.8052203199551, 99.6632051641875, 99.1018804378333)), row.names = c(NA,
5L), class = "data.frame")
df2 <- df2[order(df2[, 1]), ]
ui <- fluidPage(
titlePanel("3D Scatter Plot Visualization"),
sidebarLayout(
sidebarPanel(
pickerInput(inputId = "selectedDates",
label = "Choose Dates:",
choices = list(Dates = as.list(unique(df2$publicationDate)),PointColor = colors()[5]),
selected = unique(df2$publicationDate)[1],
multiple = TRUE,
options = list(
`actions-box` = TRUE,
`deselect-all-text` = "None...",
`select-all-text` = "Yeah, all !",
`none-selected-text` = "zero"
))
),
mainPanel(
plotlyOutput(outputId = "scatterPlot3D")
)
)
)
server <- function(input, output) {
output$scatterPlot3D <- renderPlotly({
# Filter data based on selected topicLabels
df2 <- df2[df2$publicationDate %in% input$selectedDates, ]
# Create the 3D scatter plot with bolded hover text
scatter3Dplot <- plot_ly(data = df2, x = ~x, y = ~y, z = ~z, color = ~publicationDate,
type = "scatter3d", mode = "markers",
marker = list(size = 3)
) %>%
layout(title = "3D Scatter Plot with Wrapped Title and Custom Popup by Date",
scene = list(
xaxis = list(title = "X Axis"),
yaxis = list(title = "Y Axis"),
zaxis = list(title = "Z Axis")
)) %>%
layout(legend = list(orientation = "h"),
showlegend = FALSE)
return(scatter3Dplot)
})
}
# Component 3: A call to the `shinyApp` function
shinyApp(ui = ui, server = server)
As a first step create a custom color palette for your publication dates and assign the (unique) dates as names. I simply used the default ggplot2 colors. Second, to use the color palette in your plotly chart add them via the colors=
attribute. Third, for the color mapping convert publicationDate
to a character:
library(shiny)
library(shinyWidgets)
library(plotly)
colors <- scales::hue_pal()(length(unique(df2$publicationDate)))
names(colors) <- unique(df2$publicationDate)
ui <- fluidPage(
titlePanel("3D Scatter Plot Visualization"),
sidebarLayout(
sidebarPanel(
pickerInput(
inputId = "selectedDates",
label = "Choose Dates:",
choices = list(Dates = as.list(unique(df2$publicationDate)), PointColor = colors()[5]),
selected = unique(df2$publicationDate),
multiple = TRUE,
options = list(
`actions-box` = TRUE,
`deselect-all-text` = "None...",
`select-all-text` = "Yeah, all !",
`none-selected-text` = "zero"
)
)
),
mainPanel(
plotlyOutput(outputId = "scatterPlot3D")
)
)
)
server <- function(input, output) {
output$scatterPlot3D <- renderPlotly({
# Filter data based on selected topicLabels
df2 <- df2[df2$publicationDate %in% input$selectedDates, ]
# Create the 3D scatter plot with bolded hover text
scatter3Dplot <- plot_ly(
data = df2, x = ~x, y = ~y, z = ~z, color = ~ as.character(publicationDate),
type = "scatter3d", mode = "markers",
marker = list(
size = 3
),
colors = colors
) %>%
layout(
title = "3D Scatter Plot with Wrapped Title and Custom Popup by Date",
scene = list(
xaxis = list(title = "X Axis"),
yaxis = list(title = "Y Axis"),
zaxis = list(title = "Z Axis")
)
) %>%
layout(
legend = list(orientation = "h"),
showlegend = FALSE
)
return(scatter3Dplot)
})
}
# Component 3: A call to the `shinyApp` function
shinyApp(ui = ui, server = server)
#>
#> Listening on http://127.0.0.1:4889