geom_violindot生成异常可视化图的修正方案及功能咨询
解决see::geom_violindot的分组点图与分箱统一问题
问题说明
使用see::geom_violindot绘制可视化时出现两个异常:
- 每个
Param分组仅显示一个分箱点图,但每个Param下的不同Model应对应独立的分箱点图; - 不同分组的分箱点图分箱数不一致,需统一分箱规则。
修正方案及代码
核心修改点
- 实现分组独立显示:添加
position = position_dodge(width = 0.8),让同一Param下的Model分组图形横向错开; - 统一分箱数:通过
bins参数指定固定分箱数量(或binwidth指定分箱宽度),强制所有分组使用相同分箱规则; - 优化点大小:原
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
相关产品推荐
相关产品推荐

