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

求R语言优质等高线/密度图绘制方法,基于给定数据绘制等高线图

嘿,我来帮你搞定R里的等高线图和密度图,还有你提供的那组model1、model2数据的可视化需求!下面分步骤给你讲清楚方法,直接上手就能用。

在R中绘制优质等高线图与密度图的方法

一、等高线图(Contour Plot)绘制

等高线图适合展示二维空间中数值的变化趋势,常用的工具包括R基础绘图系统和ggplot2包,两种方式各有优势:

1. 基础绘图系统实现

如果你的数据已经是网格格式(即x、y坐标对应的z值矩阵),可以直接用contour()函数;如果是散点数据(比如你提供的model1、model2样本),需要先计算二维核密度估计,再绘制等高线。

散点转等高线示例(针对你的数据)

首先处理你给出的数据(注意最后一个model2值我暂时补为0.0070,你可以替换成实际完整值):

# 把数据转换成数据框
df <- data.frame(
  id = 1:17,
  model1 = c(0.006889929, 0.007700212, 0.008565160, 0.006881213, 0.008636678,
             0.007141556, 0.008368942, 0.006818685, 0.006696313, 0.006268623,
             0.007999088, 0.007532648, 0.006554138, 0.008131300, 0.006231241,
             0.006426665, 0.008686260),
  model2 = c(0.005679936, 0.005249357, 0.004499936, 0.005151137, 0.006632931,
             0.005622523, 0.005443024, 0.005273998, 0.006221722, 0.004654712,
             0.005780017, 0.005547954, 0.006242407, 0.004914134, 0.004716008,
             0.005245560, 0.0070)
)

# 加载MASS包用于二维核密度估计
library(MASS)
# 计算model1和model2的联合密度,n控制网格精细度
dens <- kde2d(df$model1, df$model2, n = 100)

# 绘制基础等高线图,叠加原始散点更直观
contour(dens, xlab = "Model 1 Values", ylab = "Model 2 Values", 
        main = "Contour Plot of Model1 vs Model2", col = "blue")
points(df$model1, df$model2, pch = 16, col = "red")

自定义优化技巧

  • 调整等高线数量:用levels参数指定,比如contour(dens, levels = seq(0, max(dens$z), length.out = 10))
  • 添加填充色:用filled.contour()代替contour(),生成带颜色填充的等高线图
  • 调整线条样式:lwd控制线宽,lty控制线型

2. ggplot2包实现

ggplot2的语法更灵活,可视化效果更美观,适合做出版级别的图:

library(ggplot2)

# 把kde2d的结果转换成ggplot兼容的数据框
dens_df <- data.frame(
  x = rep(dens$x, each = length(dens$y)),
  y = rep(dens$y, length(dens$x)),
  z = as.vector(dens$z)
)

# 绘制带填充的等高线图,叠加散点
ggplot(dens_df, aes(x = x, y = y, z = z)) +
  geom_contour(color = "darkblue", size = 0.8) +
  geom_contour_filled(alpha = 0.7) +
  geom_point(data = df, aes(x = model1, y = model2), color = "red", size = 2) +
  labs(x = "Model 1 Values", y = "Model 2 Values", 
       title = "Contour Plot of Model1 vs Model2 (ggplot2)") +
  theme_minimal() +
  scale_fill_viridis_c(name = "Density") # 色盲友好的配色方案

二、密度图(Density Plot)绘制

密度图用于展示单变量或双变量的分布情况,单变量密度图简单直观,双变量密度图和等高线图类似但侧重分布展示:

1. 单变量密度图(基础包)

# 绘制model1的密度图,填充曲线下面积
plot(density(df$model1), main = "Density Plot of Model1", 
     xlab = "Model1 Values", col = "darkgreen", lwd = 2)
polygon(density(df$model1), col = rgb(0, 0.5, 0, 0.3))

# 对比model1和model2的密度分布
plot(density(df$model1), main = "Density Comparison: Model1 vs Model2",
     xlab = "Values", col = "darkgreen", lwd = 2, 
     ylim = c(0, max(density(df$model1)$y, density(df$model2)$y)*1.1))
lines(density(df$model2), col = "darkblue", lwd = 2)
legend("topright", legend = c("Model1", "Model2"), col = c("darkgreen", "darkblue"), lwd = 2)

2. 单变量密度图(ggplot2)

ggplot(df) +
  geom_density(aes(x = model1, fill = "Model1"), alpha = 0.5) +
  geom_density(aes(x = model2, fill = "Model2"), alpha = 0.5) +
  labs(x = "Values", y = "Density", title = "Density Comparison: Model1 vs Model2") +
  theme_minimal() +
  scale_fill_manual(values = c("Model1" = "darkgreen", "Model2" = "darkblue")) +
  guides(fill = guide_legend(title = "Models"))

3. 双变量密度图(ggplot2,带等高线)

用geom_density_2d()可以直接基于散点生成密度等高线:

ggplot(df, aes(x = model1, y = model2)) +
  geom_density_2d(color = "darkred", size = 0.8) +
  geom_point(color = "black", size = 1.5) +
  labs(x = "Model1 Values", y = "Model2 Values", title = "Bivariate Density Contour Plot") +
  theme_bw()

三、注意事项

  • 如果你有规则网格数据(比如x、y为连续网格坐标,每个点对应一个z值),可以直接用contour(x, y, z),无需核密度估计
  • 核密度估计的平滑程度可以通过kde2d()的h参数调整,h越小越精细,越大越平滑
  • 配色建议用viridis、RColorBrewer等包的方案,避免使用色盲识别困难的颜色组合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:37:02