R闪亮的等值线图
R shiny chorpleth map
我是 R 的新手。现在我正在创建闪亮的应用程序。 R 可以读取我的数据集。使用命令 myData <- read.csv("myData.csv")。但是 shinyServer 文件无法读取我的数据。并且不列出任何观察结果。
你们能帮我看看这是什么问题吗?
自 1900 年至 2010 年以来,Shinyapp 每 10 年为世界上 material 的原始生产提供交互式可视化。
我也不断收到此错误:
"ERROR: 'breaks' are not unique"
代码在这里:
shinyUI(fluidPage(
checkboxInput("type", "Please Select production type:",
c("Aluminium", "Gold",
"Iron", "Silver", "Zinc")
),
sliderInput("year","Choose a Year",
min = 1910,
max = 2010,
value= 2010),
checkboxInput("Economy", "Please Select Economy Factor:",
c("Income Inequallity", "labourers Real Wage", "GDP", "Inflation")),
plotOutput("thisPlot"),
leafletOutput("myMap")
)
)
闪亮服务器:
myData <- read.csv("myData.csv")
shinyServer<- function(input,output){
output$myMap <- renderLeaflet({
temp <- which(myData$type == input$type &
myData$year == input$year)
myData <- myData[temp,]
pal <- colorQuantile("YlGn", myData$production, n = 9)
country_popup <- paste0("<strong>Estado: </strong>", myData$Country)
leaflet(data = myData) %>%
setView(46.227638, 2.213749, zoom = 2) %>%
addTiles() %>%
addPolygons( lng = ~myData$Long, lat = ~myData$Lat,
fillColor = ~pal(myData$production),
fillOpacity = 0.8,
color = "#BDBDC3",
weight = 1,
popup = country_popup)
})
}
数据是:
Names = c("id",
"Country", "type", "year", "production", "GDP", "Income", "Inflation",
"Laborer", "Lat", "Long"), class = "data.frame", row.names = c(NA,
-10670L))
head(myData)
id Country type year production GDP Income Inflation Laborer Lat
Long
1 1 Guyana Gold 1910 0.000000 0 42.43048 0 154.45527 4.860416
-58.9301
好像是读取了数据,但是没有显示出来。我在创建 choropleth 地图时遇到了问题。它现在在我的闪亮中不起作用。
是的,传单很挑剔。我不需要做很多改变,你几乎已经做到了。主要问题之一是您的过滤器通常会产生一个空数据框,这会导致标记不显示(当然)。
这个空数据帧问题也是 "ERROR: 'breaks' are not unique"
消息的原因,因为 colorQuantile
正在为其 domain
参数获取空输入,这意味着它正在执行空 quantile
,所有的中断都是零,因此 "not unique"。这也可能发生在高度倾斜的数据中。在这种情况下你应该避免调用它 - 也许回退到 colorBin
,尽管检测它可能有点复杂。
进行了以下更改。
- 添加了一些假数据。
- 已将
addPolygons
更改为 addCircleMarkers
,因为 addPolygons
用于添加您指定的任意形状。
- 将您的
checkBoxInput
更改为 checkBoxGroupInput
,因为您不想要一个复选框,您想要一组复选框。
- 将过滤器子句更改为使用
myData$type %in% input$type
而不是 myData$type == input$type
,因为您可能需要会员资格。
- 截断了
input$year
值,因为它可能不会返回整数,但您的 year
值肯定是整数。
- 将边框颜色更改为
"black"
这样您就可以在圆圈上看到它了。
- 请注意
popup
不会在悬停时出现,您必须单击圆圈。
- 删除了标记输入上的
myData
,因为您在 leaflet
调用中指定了它。
- 注释掉
plotOutput
因为我不知道你想绘制什么。
这是代码 - 这应该可以帮助您入门:
library(shiny)
library(leaflet)
# fake-up some data
n <- 10000
countrylist <- c("Guyana","Venezuela","Columbia")
typelist <- c("Aluminium", "Gold","Iron", "Silver", "Zinc")
types <- sample(typelist,n,replace=T)
cntrs <- sample(countrylist,n,replace=T)
lat <- 2.2 + 50*runif(n)
long <- -46 + 50*runif(n)
year <- sample(1910:2010,n,replace=T)
prd <- 100*runif(n)
myData <- data.frame(Country=cntrs,type=types,year=year,production=prd,Long=long,Lat=lat)
u <- shinyUI(fluidPage(
checkboxGroupInput("type", "Please Select production type:",
c("Aluminium", "Gold","Iron", "Silver", "Zinc"),
selected=c("Gold","Silver")
),
sliderInput("year","Choose a Year",
min = 1910,
max = 2010,
value= 2010),
checkboxGroupInput("Economy", "Please Select Economy Factor:",
c("Income Inequallity", "labourers Real Wage", "GDP", "Inflation")),
# plotOutput("thisPlot"),
leafletOutput("myMap")
)
)
s <- function(input,output){
output$myMap <- renderLeaflet({
temp <- which(myData$type %in% input$type &
myData$year == trunc(input$year))
print(nrow(myData))
myData <- myData[temp,]
print(nrow(myData))
pal <- colorQuantile("YlGn", myData$production, n = 9)
country_popup <- paste0("<strong>Estado: </strong>", myData$Country)
leaflet(data = myData) %>%
setView(-46.227638, 2.213749, zoom = 2) %>%
addTiles() %>%
addCircleMarkers( lng = ~Long, lat = ~Lat,
fillColor = ~pal(myData$production),
radius = 6, # pixels
fillOpacity = 0.8,
color = "black",
weight = 1,
popup = country_popup)
})
}
shinyApp(u,s)
这是结果:
我是 R 的新手。现在我正在创建闪亮的应用程序。 R 可以读取我的数据集。使用命令 myData <- read.csv("myData.csv")。但是 shinyServer 文件无法读取我的数据。并且不列出任何观察结果。 你们能帮我看看这是什么问题吗? 自 1900 年至 2010 年以来,Shinyapp 每 10 年为世界上 material 的原始生产提供交互式可视化。 我也不断收到此错误: "ERROR: 'breaks' are not unique"
代码在这里:
shinyUI(fluidPage(
checkboxInput("type", "Please Select production type:",
c("Aluminium", "Gold",
"Iron", "Silver", "Zinc")
),
sliderInput("year","Choose a Year",
min = 1910,
max = 2010,
value= 2010),
checkboxInput("Economy", "Please Select Economy Factor:",
c("Income Inequallity", "labourers Real Wage", "GDP", "Inflation")),
plotOutput("thisPlot"),
leafletOutput("myMap")
)
)
闪亮服务器:
myData <- read.csv("myData.csv")
shinyServer<- function(input,output){
output$myMap <- renderLeaflet({
temp <- which(myData$type == input$type &
myData$year == input$year)
myData <- myData[temp,]
pal <- colorQuantile("YlGn", myData$production, n = 9)
country_popup <- paste0("<strong>Estado: </strong>", myData$Country)
leaflet(data = myData) %>%
setView(46.227638, 2.213749, zoom = 2) %>%
addTiles() %>%
addPolygons( lng = ~myData$Long, lat = ~myData$Lat,
fillColor = ~pal(myData$production),
fillOpacity = 0.8,
color = "#BDBDC3",
weight = 1,
popup = country_popup)
})
}
数据是:
Names = c("id",
"Country", "type", "year", "production", "GDP", "Income", "Inflation",
"Laborer", "Lat", "Long"), class = "data.frame", row.names = c(NA,
-10670L))
head(myData)
id Country type year production GDP Income Inflation Laborer Lat
Long
1 1 Guyana Gold 1910 0.000000 0 42.43048 0 154.45527 4.860416
-58.9301
好像是读取了数据,但是没有显示出来。我在创建 choropleth 地图时遇到了问题。它现在在我的闪亮中不起作用。
是的,传单很挑剔。我不需要做很多改变,你几乎已经做到了。主要问题之一是您的过滤器通常会产生一个空数据框,这会导致标记不显示(当然)。
这个空数据帧问题也是 "ERROR: 'breaks' are not unique"
消息的原因,因为 colorQuantile
正在为其 domain
参数获取空输入,这意味着它正在执行空 quantile
,所有的中断都是零,因此 "not unique"。这也可能发生在高度倾斜的数据中。在这种情况下你应该避免调用它 - 也许回退到 colorBin
,尽管检测它可能有点复杂。
进行了以下更改。
- 添加了一些假数据。
- 已将
addPolygons
更改为addCircleMarkers
,因为addPolygons
用于添加您指定的任意形状。 - 将您的
checkBoxInput
更改为checkBoxGroupInput
,因为您不想要一个复选框,您想要一组复选框。 - 将过滤器子句更改为使用
myData$type %in% input$type
而不是myData$type == input$type
,因为您可能需要会员资格。 - 截断了
input$year
值,因为它可能不会返回整数,但您的year
值肯定是整数。 - 将边框颜色更改为
"black"
这样您就可以在圆圈上看到它了。 - 请注意
popup
不会在悬停时出现,您必须单击圆圈。 - 删除了标记输入上的
myData
,因为您在leaflet
调用中指定了它。 - 注释掉
plotOutput
因为我不知道你想绘制什么。
这是代码 - 这应该可以帮助您入门:
library(shiny)
library(leaflet)
# fake-up some data
n <- 10000
countrylist <- c("Guyana","Venezuela","Columbia")
typelist <- c("Aluminium", "Gold","Iron", "Silver", "Zinc")
types <- sample(typelist,n,replace=T)
cntrs <- sample(countrylist,n,replace=T)
lat <- 2.2 + 50*runif(n)
long <- -46 + 50*runif(n)
year <- sample(1910:2010,n,replace=T)
prd <- 100*runif(n)
myData <- data.frame(Country=cntrs,type=types,year=year,production=prd,Long=long,Lat=lat)
u <- shinyUI(fluidPage(
checkboxGroupInput("type", "Please Select production type:",
c("Aluminium", "Gold","Iron", "Silver", "Zinc"),
selected=c("Gold","Silver")
),
sliderInput("year","Choose a Year",
min = 1910,
max = 2010,
value= 2010),
checkboxGroupInput("Economy", "Please Select Economy Factor:",
c("Income Inequallity", "labourers Real Wage", "GDP", "Inflation")),
# plotOutput("thisPlot"),
leafletOutput("myMap")
)
)
s <- function(input,output){
output$myMap <- renderLeaflet({
temp <- which(myData$type %in% input$type &
myData$year == trunc(input$year))
print(nrow(myData))
myData <- myData[temp,]
print(nrow(myData))
pal <- colorQuantile("YlGn", myData$production, n = 9)
country_popup <- paste0("<strong>Estado: </strong>", myData$Country)
leaflet(data = myData) %>%
setView(-46.227638, 2.213749, zoom = 2) %>%
addTiles() %>%
addCircleMarkers( lng = ~Long, lat = ~Lat,
fillColor = ~pal(myData$production),
radius = 6, # pixels
fillOpacity = 0.8,
color = "black",
weight = 1,
popup = country_popup)
})
}
shinyApp(u,s)
这是结果: