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

如何为ggplot绘制的共享单车租赁密度曲线按weathersit分组自定义命名

实现方法

你可以通过两步完成需求:先修改天气等级字段的因子标签替换为自定义名称,再计算每个分组密度曲线的峰值坐标完成邻近标注,完整代码如下:

library(ggplot2)
library(dplyr)
library(hrbrthemes)
# 可选:如果标注重叠可加载ggrepel自动调整位置
# library(ggrepel)

# 第一步:重命名天气等级分类
Bikes_Washington <- Bikes_Washington %>%
  mutate(weathersit = factor(weathersit,
                             # 这里levels按原数据天气等级从好到差排序,可根据你的实际数据调整顺序
                             levels = c(1,2,3,4),
                             labels = c("Bad", "Very_Bad", "God_Awful", "I_Wont_Even_Bother")))

# 第二步:计算每个天气分组的密度峰值坐标,用于标注定位
label_pos <- Bikes_Washington %>%
  group_by(weathersit) %>%
  summarise(
    # 取密度最大的横坐标
    peak_x = density(cnt)$x[which.max(density(cnt)$y)],
    # 取密度峰值的纵坐标
    peak_y = max(density(cnt)$y)
  )

# 绘图
ggplot(Bikes_Washington, aes(x=cnt, group=weathersit, fill = weathersit)) + 
  geom_density(color = "darkblue", alpha=0.2) +
  # 添加曲线旁标注,vjust控制文字在峰值上方的偏移量,可自行调整
  geom_text(data = label_pos, aes(x = peak_x, y = peak_y, label = weathersit),
            vjust = -0.8, size = 3.5, color = "darkblue") +
  # 若标注重叠可把上面的geom_text替换为下面的geom_text_repel
  # geom_text_repel(data = label_pos, aes(x = peak_x, y = peak_y, label = weathersit),
  #           size = 3.5, color = "darkblue") +
  # 不需要图例可取消下面一行的注释
  # theme(legend.position = "none") +
  labs(x = "单车租赁量", y = "密度") +
  theme_ipsum()

可调参数说明

  • 若你的原数据中weathersit的数值对应严重程度和默认顺序不同,调整factor中levels的顺序和labels的对应关系即可,保证自定义名称和天气等级匹配
  • 可调整geom_text的vjust、hjust参数修改文字和峰值的相对位置,也可直接指定坐标把文字放在你需要的蓝色圆圈位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:04