我正在尝试绘制哥伦比亚省份地图和具有8个等级的因子变量,我正在使用经纬度坐标。
我的数据框如下:
> head(df[,c('CODMPIO','Esc2a','Longitud','Latitud')])
# A tibble: 6 x 4
CODMPIO Esc2a Longitud Latitud
<chr> <fct> <dbl> <dbl>
1 05001 4 -75.6 6.25
2 05002 5 -75.4 5.79
3 05004 7 -76.1 6.63
4 05021 5 -75.1 6.38
5 05030 7 -75.7 6.04
6 05031 7 -75.1 6.91
并且geojson具有坐标和这些列:
$properties
$properties$DPTOMPIO
[1] "05001"
$properties$DPTO_CCDGO
[1] "05"
$properties$MPIO_CCDGO
[1] "001"
$properties$MPIO_CNMBR
[1] "MEDELLÍN"
$properties$MPIO_CCNCT
[1] "05001"
properties $ DPTOMPIO
与
相同df $ CODMPIO
最后,我所有的代码就是这个
df$Esc2a = factor(df$Esc2a)
df$test = as.numeric(df$Esc2a)
nfactor = length(levels(df$Esc2a))
foo <- brewer.pal(n = nfactor,name = "Set1")
names(foo) = levels(df$Esc2a)
Z_Breaks = function(n){
CUTS = seq(0,1,length.out=n+1)
rep(CUTS,ifelse(CUTS %in% 0:1,1,2))
}
colorScale <- data.frame(z=Z_Breaks(nfactor),
col=rep(foo,each=2),stringsAsFactors=FALSE)
g <- list(
fitbounds = "locations",
visible = FALSE
)
fig <- plot_ly()
fig <- fig %>% add_trace(
data=df,
type="choropleth",
geojson=geojson,
locations= ~CODMPIO,
z=df$test,
colorscale=colorScale,
colorbar=list(tickvals=1:nfactor, ticktext=names(foo)),
featureidkey="properties.DPTOMPIO"
)
fig <- fig %>% layout(
geo = g
)
fig
第一行使用的是对此问题How to create a chloropleth map in R Plotly based on a Categorical variable?的答案
我得到以下情节
它正确地对因素进行了分类,当我将鼠标悬停在上面时,它会向我显示正确的值和正确的ID,但是如您所见,它没有着色,因为它应该只对最后一行进行正确的着色(绿色)