Plotly水平并排Choropleth子图失效及共用图例实现求助
解决Plotly子图水平排列失效及共用颜色条问题
问题原因
- 水平排列失效:两个地图的
geo组件默认占据整个绘图区域,导致subplot(nrows=1)无法生效,只能垂直堆叠。 - 共用颜色条:默认每个choropleth图独立生成颜色条,需要统一颜色范围并合并为单个颜色条。
解决方案代码
library(plotly) df <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/2011_us_ag_exports.csv") # 定义统一的geo配置 g <- list( scope = 'usa', projection = list(type = 'albers usa'), showlakes = TRUE, lakecolor = toRGB('white') ) # 计算两个变量的统一颜色范围,确保颜色刻度一致 z_min <- min(df$beef, df$pork) z_max <- max(df$beef, df$pork) # 第一个子图:设置geo的水平域为左半部分,保留颜色条 p1 <- plot_ly( z = df$beef, text = df$hover, locations = df$code, type = 'choropleth', locationmode = 'USA-states', color = df$beef, colors = 'Purples', zmin = z_min, # 统一最小刻度 zmax = z_max, # 统一最大刻度 colorbar = list( title = "Millions USD", x = 0.5, # 颜色条居中放置 xanchor = "center" ) ) %>% layout( geo = c(g, list(domain = list(x = c(0, 0.48)))) # 限定geo在左半区域 ) # 第二个子图:设置geo的水平域为右半部分,关闭自身颜色条 p2 <- plot_ly( z = df$pork, text = df$hover, locations = df$code, type = 'choropleth', locationmode = 'USA-states', color = df$pork, colors = 'Purples', zmin = z_min, # 统一最小刻度 zmax = z_max, # 统一最大刻度 showscale = FALSE # 关闭自身颜色条 ) %>% layout( geo = c(g, list(domain = list(x = c(0.52, 1)))) # 限定geo在右半区域 ) # 生成子图,设置水平排列并调整边距 plotly::subplot(p1, p2, nrows = 1, margin = 0.05)
关键修改点
- 水平排列:通过
layout(geo = list(domain = list(x = ...)))分别指定两个geo组件的水平区域,避免重叠,配合subplot(nrows=1)实现并排显示。 - 共用颜色条:
- 用
zmin和zmax统一两个图的颜色刻度范围,确保颜色对应的值一致。 - 关闭其中一个图的颜色条(
showscale = FALSE),将保留的颜色条通过x和xanchor设置在两个子图中间,实现共用。
- 用
内容的提问来源于stack exchange,提问作者Luitpold Wienerle
相关产品推荐
相关产品推荐

