如何在R Plotly中基于分类变量创建等值线地图?

3
我正在尝试创建一个以分类变量为州颜色的美国氯普图,但我只得到了一张空白地图。Plotly地图是否与分类数据兼容?如果是,语法如何更改?
对于我的数据,我只需上传一个包含州和随机一个“Good”、“Bad”、“OK”的行的表格。
我可以在下面的代码中更改什么才能使它工作?我已经尝试了一个解决方法,稍微改变了州的颜色,但颜色条变得混乱。(value4是我“Good”、“Bad”、“OK”的分类变量)
如果我的问题不清楚或我的信息不够好,我很抱歉。如果有人有进一步的问题,我可以回答。提前致谢。
foo <- brewer.pal(n = 3,
                        name = "Set1")

df <- mutate(df, test = ntile(x = value4, n = 3))

cw_map <- plot_ly(
  data = df,
  type = "choropleth",
  locations = ~ state,
  locationmode = "USA-states",
  color = ~ test,
  colors = foo[df$test],
  z = ~ test
) %>%
  layout(geo = list(scope = "usa"))

print(cw_map)
1个回答

5

你需要以代码形式表示状态,让我们从这里开始:

STATES <-c("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL", "GA", 
"HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", 
"MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", 
"NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", 
"UT", "VT", "VA", "WA", "WV", "WI", "WY")

就像你所做的那样,我们为每个状态分配随机值4:

df = data.frame(state=STATES,
value4=sample(c("Good", "Bad", "OK."),length(STATES),replace=TRUE))

然后,我们将您的value4作为因子,并像以前一样选择颜色等:

df$value4 = factor(df$value4)
df$test = as.numeric(df$value4)
nfactor = length(levels(df$value4))
foo <- brewer.pal(n = nfactor,name = "Set1")
names(foo) = levels(df$value4)

为了将颜色图例显现为离散形式,您需要提供一个数据框来定义在相对 z 比例尺上的间隔。在 R plotly 中并没有非常好的文档说明,我从@emphet 的 plotly 论坛帖子@marcosandri 的 Stack Overflow 帖子中汲取了 n 个因素的解决方案:
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)

          z     col
1 0.0000000 #E41A1C
2 0.3333333 #E41A1C
3 0.3333333 #377EB8
4 0.6666667 #377EB8
5 0.6666667 #4DAF4A
6 1.0000000 #4DAF4A

然后我们进行绘图:

cw_map <- plot_ly(
  data = df,
  type = "choropleth",
  locations = ~ state,
  locationmode = "USA-states",
  z = df$test,
  colorscale=colorScale,
  colorbar=list(tickvals=1:nfactor, ticktext=names(foo))
) %>%
layout(geo = list(scope = "usa")) 

enter image description here


2
我帮助了这个提问者解决了他/她之前的问题,并遇到了图例问题。正如您所看到的,图例中也有连续值。这是提问者想要解决的问题之一。我无法处理这个图例问题。这就是为什么提问者会问这个问题的原因。有没有什么办法来处理这个图例问题呢? - jazzurro
分段的色标地图将在未来几周内支持 Plotly 的新版本 :) - nicolaskruchten
嗨@jazzurro,结果发现您需要提供一个数据框作为颜色比例尺。 - StupidWolf
刚看到你的评论@nicolaskruchten,太好了。省去了上面的麻烦。 - StupidWolf
1
@StupidWolf 非常感谢您找出这种方法。目前来说,这正是我们所需要的。让我们等待软件包更新吧。到那时,我们就不必再这样辛苦地工作了。+1! - jazzurro
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接