簡體   English   中英

如何基於分類變量在 R Plotly 中創建葉綠體圖?

[英]How to create a chloropleth map in R Plotly based on a Categorical variable?

我正在嘗試創建美國的葉綠體地圖,該地圖使用分類變量作為州顏色,但我只得到一張空白地圖。 繪圖地圖是否與分類數據兼容? 如果是這樣,語法如何變化?

對於我的數據,我只是上傳一個由狀態組成的行表,隨機一個“好”、“壞”、“好”。

我可以在下面的代碼中更改什么才能使其工作? 我嘗試了一種稍微改變狀態顏色的解決方法,但顏色條變得不穩定。 (value4 是我的“好”、“壞”、“好”的分類變量)

如果我的問題不清楚或我的信息不是很好,我們深表歉意。 如果有人有其他問題,我可以回答。 提前致謝

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@marcosandri's SO post中的信息為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")) 

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM