You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Echarts4R的e_scatter实现目标气泡图?无原始XY数据

问题

尝试使用e_scatter复现特定样式的气泡图,原始数据仅包含group、category和size列,无sample_x、sample_y字段。自行添加坐标字段后的代码及数据如下:

data <- data.frame(
    group = c("Upper", "Upper", "Upper", "Upper", "Upper", "Upper", "Upper", "Upper", "Lower", "Lower"),
    category = c("A", "B", "C", "D", "E", "F", "G", "H", "a", "b"),
    size = c(0.74, 0.72, 0.68, 0.67, 0.63, 0.54, 0.53, 0.49, 0.02, 0.02),
    sample_x = c(0, 0.2, 0.4, 0.6, 0.8, 0.8, 0.6, 0.4, 0.2, 0),
    sample_y = c(1, 2, 3, 2, 1, -1, -2, -3, -2, -1)
)

data |>
group_by(group) |>
e_charts(sample_x) |>
e_scatter(sample_y, size)

当前实现效果不符合预期,曾尝试添加e_polar但无法用size列缩放点的大小,疑问如下:

  • 能否用e_scatter复现目标气泡图?
  • 是否选错了图表类型?
解决方案
  • 图表类型没选错,e_scatter可以配合极坐标实现目标效果
    目标图是极坐标系下的气泡散点图,之前配置e_polar失败是因为没正确绑定极坐标轴与散点数据,导致尺寸缩放逻辑失效。

  • 无需手动添加笛卡尔坐标字段,用极坐标的角度+半径定义位置
    原始数据没有坐标字段时,可根据group和category的布局逻辑生成极坐标所需的angle(角度)和radius(半径)值:

    • 为Upper组分配0-180度的上半区角度,Lower组分配180-360度的下半区角度
    • 按气泡的层级位置对应不同的半径值,模拟目标图的圈层布局
  • 完整可运行代码示例

library(echarts4r)
library(dplyr)

# 原始数据(无坐标字段)
raw_data <- data.frame(
    group = c("Upper", "Upper", "Upper", "Upper", "Upper", "Upper", "Upper", "Upper", "Lower", "Lower"),
    category = c("A", "B", "C", "D", "E", "F", "G", "H", "a", "b"),
    size = c(0.74, 0.72, 0.68, 0.67, 0.63, 0.54, 0.53, 0.49, 0.02, 0.02)
)

# 生成极坐标的角度与半径
raw_data <- raw_data |>
    mutate(
        # 对应目标图的角度分布
        angle = case_when(
            group == "Upper" ~ c(0, 45, 90, 135, 180, 180, 135, 90),
            group == "Lower" ~ c(225, 270)
        ),
        # 对应目标图的圈层半径
        radius = case_when(
            category %in% c("C", "G") ~ 80,
            category %in% c("B", "D", "F", "H") ~ 60,
            category %in% c("A", "E", "a", "b") ~ 40
        )
    )

# 绘制极坐标气泡图
raw_data |>
    group_by(group) |>
    e_charts() |>
    e_polar() |>
    e_angle_axis(data = ~angle) |>
    e_radius_axis(data = ~radius) |>
    # 用size控制气泡大小,乘以100是为了放大显示(避免原数值过小)
    e_scatter(angle, radius, symbol_size = ~size * 100) |>
    e_tooltip(formatter = "{b}: {c}") |>
    e_legend()
  • 关键细节说明
    • symbol_size参数需要接收足够大的数值,因此给size乘以系数(如100),保证气泡显示清晰
    • 角度和半径的数值可根据目标图的实际布局灵活调整,确保气泡位置匹配
    • 通过group_by分组后,不同组的气泡会自动分配不同颜色,配合图例实现分组展示

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:50:29