【发布时间】:2020-08-09 09:25:32
【问题描述】:
我正在使用 plotly 和 r shiny 在地图上绘制国家。我希望在地图上单击国家/地区时,包含有关国家/地区的行的数据子集以数据表的形式出现。但我无法实现它。我得到了表格,但表格中没有显示数据。任何帮助将不胜感激!
Mapbox_Token= 'Mapbox token'
library(plotly)
library("readxl")
library(dplyr)
library(readxl)
library(writexl)
library(shiny)
library(htmlwidgets)
data_1<- read.csv(".file.csv")
print(data_1)
library(formattable)
Sys.setenv("MAPBOX_TOKEN" = Mapbox_Token) # for Orca
ui <- fluidPage(
plotlyOutput(outputId = "Plot"),
DT::dataTableOutput('click')
)
server <- function(input, output,session) {
output$Plot <- renderPlotly({
df=read.csv("file2.csv")
render_value(data_1)
fig <- df%>% plot_mapbox(lat = ~lat, lon = ~lng,split = ~Country,
size=0, type= 'scattermapbox',mode='markers',hoverinfo="none",showlegend=F,source='subset'
)
fig <- fig %>% layout(title = 'No Of Companies',font=
list(color='white'),plot_bgcolor = '#191A1A', paper_bgcolor =
'#191A1A',mapbox = list(style = 'dark'),legend = list(orientation ='v',font = list(size = 6)),margin = list(l = 25, r = 25,b = 75, t = 25,pad =
2))
fig<-fig %>% add_annotations(text ='Map shows number of
companies by country. The size of the circles correspond to
the number of
companies.',x=0.5,y=-0.2,showarrow=FALSE,font=list(color='red'))
fig<- fig %>% add_markers(text = ~paste(paste('Country:',Country),
paste("Number of Companies:",Name ), paste("Dataset:", Url),sep = "
<br />"), size=~Name, hoverinfo = "text",marker=list(sizeref=0.1,
sizemode="area"),showlegend=T)%>%
onRender(fig, "function(el) {el.on('plotly_click', function(d) {var
url = d.points[0].customdata;window.open(url);});}")
fig <- fig %>% config(mapboxAccessToken = Sys.getenv("MAPBOX_TOKEN"))
})
render_value=function(df){
output$click <- renderDataTable({
s <- event_data("plotly_click",source = "subset")
print(s$y)
return(DT::datatable(data_1[data_1$Country==s$y,]))
})
}
}
shinyApp(ui,server)
【问题讨论】:
-
如果您提供一个最小可重复的示例,您将最大限度地获得有用的答案。 This post 可能会有所帮助。在这里,您应该删除与您的特定问题不直接相关的所有内容,并提供您的输入数据。
-
好的。我已经删除了与问题没有直接关系的所有内容。
-
我的输入数据有 Country、Name、lat、lng 列。这是我绘制的数据。我希望在单击地图上的标记时显示另一个数据集。
-
恕我直言,你没有。您还没有向我们提供
file2.csv的内容,(我认为)这是您的输入数据。任何格式化语句都不太可能是相关的。但我确实注意到您在renderPlot中为fig分配了一个情节,然后不返回任何内容。这可能与它有关。 -
我的 file2.csv 包含公司名称、国家/地区、地址、邮编、城市、州、电话、传真等列。很抱歉,我没有理解您声明的第二部分。我需要返回什么? @Limey。能举个例子吗?