如何基于分类变量在 R Plotly 中创建等值线图?
How to create a chloropleth map in R Plotly based on a Categorical variable?
我正在尝试创建美国的叶绿素地图,该地图使用州颜色的分类变量,但我只得到一张空白地图。 plotly maps 是否与分类数据兼容?如果是这样,语法有何变化?
对于我的数据,我只是上传 table 行,其中包含州和随机 "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)
您需要在代码形式中包含状态,所以让我们从这里开始:
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's plotly forum post and :
中的信息为 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"))
我正在尝试创建美国的叶绿素地图,该地图使用州颜色的分类变量,但我只得到一张空白地图。 plotly maps 是否与分类数据兼容?如果是这样,语法有何变化?
对于我的数据,我只是上传 table 行,其中包含州和随机 "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)
您需要在代码形式中包含状态,所以让我们从这里开始:
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's plotly forum post and
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"))