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

如何在ggplot分面直方图中为每个分面设置binwidth为x变量极差/20?

解决每个分面直方图自定义binwidth的问题

你原来的代码问题出在binwidth用了整个数据集的value极差,而非每个分面对应变量的单独极差。要实现每个分面用对应变量的极差除以20作为binwidth,得先按变量分组计算好每个的binwidth,再分别绘图拼接,具体步骤如下:

  1. 加载所需工具包,转换数据格式并计算每个变量的binwidth:
library(tidyverse)
library(patchwork) # 用于拼接多个子图

# 将iris转换为长格式
irislong <- pivot_longer(iris, cols = -Species)

# 按变量分组,计算每个变量的极差除以20作为专属binwidth
binwidth_df <- irislong %>%
  group_by(name) %>%
  summarise(binwidth = (max(value) - min(value)) / 20)
  1. 循环生成每个变量的直方图,再拼接成分面样式:
# 遍历每个变量,生成对应直方图
plot_list <- map(unique(irislong$name), function(var_name) {
  # 取出当前变量对应的binwidth
  current_bw <- binwidth_df$binwidth[binwidth_df$name == var_name]
  
  irislong %>%
    filter(name == var_name) %>%
    ggplot(aes(x = value)) +
    geom_histogram(binwidth = current_bw, colour = "black", fill = "white") +
    labs(x = var_name, y = "频数") +
    theme_bw()
})

# 拼接成2行2列的分面布局
wrap_plots(plot_list, ncol = 2)

这样每个分面的直方图就会使用对应变量自身的极差除以20作为binwidth了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:25:18