I've been building a small scatterplot map in ggplot2 to post in a shiny app and it went ok, but I want to try and make it interactive, for example to see the values of each point and be able to resize the map as desired. I am seeing that there is a more simple solution rather than rebuilding another map in plotly, which is using ggplotly. The problem is that after I run ggplotly, I cannot view the map either in RStudio or Shiny, but no errors are appearing either.
Thank you in advance for the help and I apologize if the answer to this is obvious/simple, but I am not able to figure it.
UPDATE 1: Like A.Suliman said, It seems like the ggplotly map is generated but can be viewed only in a separate window rather than RStudio viewer. But it still doesn't appear in the app.
UPDATE 2: MLavoie pointed out that the code I provided works with R version 3.5.0., plotly 4.7.1.9000 & ggplot2 2.2.1.9000 (as in he can view the plot both in RStudio and Shiny dashboard). I currently use R 3.5.1., plotly 4.8.0 & ggplot2 3.0.0. To fix this issue I tried downgrading the packages to 4.7.1. and 2.2.1. using the CRAN repository, and it worked for a short time but than it began generating errors such as ggplot2 needs to use dev version for ggplotly (installing it updated me to the 3.0.0.900 version of course) and that shiny pkg needs update. I updated the packages to the dev version as well. I tried using R version 3.5.0 but that interferred with alot of packages and generated errors again. I went back and fourth with installing/removing different versions of the packages, but none seem to work.
My code
for ui.R
library(shinydashboard)
library(shiny)
library(plotly)
library(ggplot2)
dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(
sidebarSearchForm(textId = "searchbar", buttonId = "searchbtn", label = "Search..."),
menuItem("Test", tabName="state", icon = icon("dashboard")))
),
dashboardBody(
tabItems(
tabItem(tabName="state",
fluidRow(
box(title = "Products across the country", width = 12, status = "success", plotlyOutput("map01"))
)
)
)
)
)
for server.R
library(shinydashboard)
library(shiny)
library(plotly)
library(ggplot2)
shinyServer(function(input, output) {
world_map <- map_data("world")%>%filter(region=="Portugal")
info = data.frame(read.csv("cities.csv", header = TRUE))
dput(info)
structure(list(name = structure(c(4L, 10L, 6L, 15L, 14L, 9L,
3L, 7L, 8L, 11L, 18L, 17L, 1L, 16L, 12L, 13L, 2L, 19L, 5L, 20L,
21L), .Label = c("Continente ID0912 - Espinho", "Continente ID8234 -
Guimaraes", "Continente ID9912 - Braga", "Continente ID9932 - Albufeira",
"Jumbo ID2441 - Lisbon", "Minipreco ID1120 - Almada", "Minipreco ID1150 -
Cacilhas",
"Minipreco ID1212 - Canelas", "Minipreco ID1231 - Beja", "Minipreco ID1332
- Alfena", "Minipreco ID5345 - Caparica", "Minipreco ID7772 - Fatima",
"Minipreco ID8723 - Gondomar",
"Minipreco ID8891 - Aveiro", "Pingodoce ID1002 - Amadora", "Pingodoce
ID4228 - Faro", "Pingodoce ID4778 - Cova da Piedade", "Pingodoce ID5426 -
Coimbra", "Pingodoce ID7734 - Lagos", "Pingodoce ID7734 - Nazare",
"Pingodoce ID9832 - Viana do Castelo"), class = "factor"), products =
c(86L, 53L, 77L, 89L, 61L, 65L, 60L, 43L, 72L, 34L, 41L, 88L, 44L, 23L,
67L, 87L, 45L, 56L, 19L,
87L, 53L), lat = c(37.09, 41.23, 38.68, 38.75, 40.65, 38.02,
41.55, 38.68, 41.08, 38.67, 40.22, 38.67, 41.01, 37.03, 39.62,
41.15, 41.44, 37.1, 38.72, 39.6, 41.71), long = c(-8.26, -8.52,
-9.16, -9.24, -8.66, -7.86, -8.43, -9.14, -8.59, -9.19, -8.43,
-9.15, -8.64, -7.94, -8.64, -8.52, -8.3, -8.68, -9.14, -9.06,
-8.83)), class = "data.frame", row.names = c(NA, -21L))
output$map01<- renderPlotly({
p = info %>% ggplot() + geom_polygon(data=world_map, aes(x=long, y=lat, group=group), fill="grey50", alpha=0.3) + geom_point(aes(x=long, y=lat, colour=products, size=products, group=name), alpha=0.6) + scale_size_continuous(range=c(1,10)) + theme_void() + coord_map() + guides(size=FALSE)
ggplotly(p, tooltip = c("group","colour"))
})
})
This code creates the map if opened in a separate window, but won't show in Shiny.