如何用R语言绘制包含160个条形的自定义环形条形图
环形条形图R实现方案
需求还原
- 复现如下环形条形图,共160个条形
- 支持自定义数据、自定义标签
- 数据为160个小时对应的总增加值(单位:£)

前置准备
首次使用先运行以下代码安装依赖包,后续使用不需要重复执行安装步骤:
# 安装依赖包 install.packages(c("ggplot2", "dplyr")) # 加载依赖包 library(ggplot2) library(dplyr)
完整可运行代码
代码默认生成160条模拟数据,你可以直接替换模拟数据部分为你的真实数据即可生成目标图表:
# ---------------------- 1. 数据准备(可替换为你的真实数据) ---------------------- # 你自己的数据需要保留三列即可: # id:1-160的连续整数,用来给条形排序 # label:每个条形对应的自定义标签(比如小时标识) # value:每个条形对应的总增加值数值 df <- data.frame( id = 1:160, label = paste0("小时", 1:160), value = runif(160, min = 10, max = 120) # 此处为模拟数值,替换为你的真实数值即可 ) # ---------------------- 2. 通用参数设置 ---------------------- # 中间空心区域大小,数值越大空心越大 hole_size <- 30 # 标签角度调整,避免文字倒置、重叠 angle_adjust <- 90 - 360 * (df$id - 0.5)/nrow(df) df$label_angle <- ifelse(angle_adjust < -90, angle_adjust + 180, angle_adjust) df$hjust <- ifelse(angle_adjust < -90, 1, 0) # ---------------------- 3. 绘图 ---------------------- ggplot(df, aes(x = as.factor(id), y = value, fill = value)) + # 绘制条形 geom_bar(stat = "identity", alpha = 0.8) + # 设置y轴范围,留出中间空心区域 ylim(-hole_size, max(df$value)*1.15) + # 转为极坐标实现环形效果 coord_polar(start = 0) + # 添加自定义标签 geom_text(aes(label = label, y = value + 3, angle = label_angle, hjust = hjust), size = 2.3) + # 极简主题,去掉多余坐标轴、网格元素 theme_minimal() + theme( axis.text = element_blank(), axis.title = element_blank(), panel.grid = element_blank(), legend.position = "bottom" ) + # 填充色设置,可自行修改颜色规则 scale_fill_viridis_c(name = "总增加值(£)")
常见自定义调整方法
- 调整环形大小:修改
hole_size的数值即可 - 调整标签大小:修改
geom_text里的size参数,数值越大标签越大 - 调整填充颜色:把
scale_fill_viridis_c替换为其他配色即可,比如scale_fill_gradient(low = "lightblue", high = "darkblue")就可以改为蓝色渐变 - 调整图例位置:修改
legend.position参数,可选值为top/bottom/left/right/none(隐藏图例)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

