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

如何绘制以angles为横轴、necrosis密度为纵轴的密度曲线

解决方案

要画横轴为angles、纵轴为necrosis密度的图,给你两种实用方法:


方法一:基于你已汇总的频率数据转成密度曲线

你已经处理好的df数据框(带angles、necrosis和Freq列),只需把频率转成密度就能画曲线:

  1. 计算密度值
    密度公式是:密度 = 频率 / (总观测数 × 组距),组距取angles相邻值的间隔:
# 计算总观测数
total_obs <- sum(df$Freq)
# 获取angles的组距(假设数据为等间隔)
unique_angles <- sort(unique(df$angles))
bin_width <- unique_angles[2] - unique_angles[1]
# 计算necrosis的密度
df$necrosis_density <- df$Freq / (total_obs * bin_width)
  1. 绘制密度曲线
library(ggplot2)
ggplot(df, aes(x = angles, y = necrosis_density)) +
  geom_line(color = "#2c3e50", linewidth = 1) +
  geom_point(color = "#e74c3c", size = 2) + # 可选,添加数据点增强可读性
  labs(x = bquote("Tree stem angles" (theta)), y = "Necrosis Density") +
  scale_x_continuous(limits = c(0, 360), breaks = seq(0, 360, 40)) +
  theme_bw()

方法二:基于原始数据画条件密度(Ridges图)

如果想直观展示每个angle对应的necrosis完整密度分布,用ggridges包画ridges图,转置后刚好符合横轴为angles的需求:

  1. 使用你手上的filter_df原始数据框(无需转换为频率表)

  2. 安装并加载ggridges包

install.packages("ggridges")
library(ggridges)
  1. 绘制转置的ridges图
ggplot(filter_df, aes(x = as.factor(angles), y = stat(density))) +
  geom_density_ridges_gradient(
    aes(group = angles, fill = stat(density)),
    scale = 3, rel_min_height = 0.01, orientation = "y"
  ) +
  labs(x = bquote("Tree stem angles" (theta)), y = "Necrosis Density") +
  scale_x_discrete(breaks = seq(0, 360, 40)) +
  scale_fill_viridis_c(name = "Density") +
  theme_bw()

这个图会在每个angles位置展示对应的necrosis密度分布,颜色深浅代表密度高低,能清晰对比不同角度下坏死程度的分布差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:14:55