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

geom_violindot生成异常可视化图的修正方案及功能咨询

解决see::geom_violindot的分组点图与分箱统一问题

问题说明

使用see::geom_violindot绘制可视化时出现两个异常:

  • 每个Param分组仅显示一个分箱点图,但每个Param下的不同Model应对应独立的分箱点图;
  • 不同分组的分箱点图分箱数不一致,需统一分箱规则。

修正方案及代码

核心修改点

  1. 实现分组独立显示:添加position = position_dodge(width = 0.8),让同一Param下的Model分组图形横向错开;
  2. 统一分箱数:通过bins参数指定固定分箱数量(或binwidth指定分箱宽度),强制所有分组使用相同分箱规则;
  3. 优化点大小:原size_dots = 0.02过小,调整为0.5便于观察。

修正后的完整代码

library(ggplot2)
library(see)

# 生成原始数据
df1 <-
  data.frame(
    Value = c(
      rnorm(25, 0.5 , 0.1),
      rnorm(25, 2.5 , 0.3),
      rnorm(25,-0.1 , 0.05),
      rnorm(25,-0.2 , 0.1)
    ),
    Param = rep(c("a", "b", "c", "d"), each = 25),
    Model = rep("X", 100)
  )
df2 <-
  data.frame(
    Value = c(
      rnorm(25, 0.3, 0.05),
      rnorm(25, 1.8 , 0.5),
      rnorm(25,-0.2 , 0.06),
      rnorm(25,-0.1 , 0.07)
    ),
    Param = rep(c("a", "b", "c", "d"), each = 25),
    Model = rep("Y", 100)
  )
df3 <-
  data.frame(
    Value = c(
      rnorm(25, 0.1, 0.06),
      rnorm(25, 1.2 , 0.4),
      rnorm(25,-0.15 , 0.03),
      rnorm(25,-0.2 , 0.02)
    ),
    Param = rep(c("a", "b", "c", "d"), each = 25),
    Model = rep("Z", 100)
  )

df <- rbind(df1, df2, df3)

# 修正后的绘图代码
ggplot2::ggplot(df) +
  see::geom_violindot(
    ggplot2::aes(x = Param, y = Value, fill = Model),
    scale = "width",
    fill_dots = "black",
    color_dots = "black",
    size_dots = 0.5,
    position = position_dodge(width = 0.8), # 实现分组横向错开
    bins = 10 # 指定统一分箱数
  ) +
  ggplot2::theme(aspect.ratio = 3 / 4) +
  ggplot2::labs(x = "Parameter",
                y = "Value")

函数支持性说明

see::geom_violindot完全支持分组分箱点图:

  • 它继承了ggplot2的分组映射逻辑,可通过aes()中的fill/group等参数指定分组变量;
  • 配合position_dodge()实现分组图形的独立显示;
  • 通过bins或binwidth参数可全局统一分箱规则,解决分箱数不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:53:24