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

如何用R基础plot()结合viridis配色实现颜色映射与渐变图例?

用Base R实现Viridis配色的数值颜色映射与渐变图例

问题背景

原本使用ggplot2结合viridis::scale_color_viridis(option = "C")实现数值向量的颜色映射,但因项目限制需改用Base R的plot()函数,同时需要实现类似ggplot2的渐变图例。

解决方案

1. 将数值向量转换为Viridis配色的颜色向量

无需依赖ggplot2,直接用viridis包的原生函数即可完成数值到颜色的映射:

# 加载viridis包
library(viridis)

set.seed(926)
df <- data.frame(x. = rnorm(100),
                 y. = rnorm(100),
                 color. = rnorm(100))

# 创建对应option="C"的Viridis配色映射函数
viridis_pal_c <- viridis_pal(option = "C")

# 将数值归一化后映射为对应颜色,逻辑与ggplot2一致
color_bins <- seq(min(df$color.), max(df$color.), length.out = 100)
df$color_converted <- viridis_pal_c(100)[findInterval(df$color., color_bins)]

2. 使用Base R绘图并添加渐变图例

用plot()绘制散点图,再通过image()和坐标轴工具组合实现渐变图例:

# 绘制散点图
plot(df$x., df$y., col = df$color_converted, pch = 16, cex = 1.2,
     xlab = "x.", ylab = "y.", main = "Viridis Option C Color Mapping in Base R")

# 添加渐变图例
# 定义图例位置与参数
legend_x <- max(df$x.) + 0.5
legend_y_min <- min(df$y.)
legend_y_max <- max(df$y.)
color_steps <- 100
color_seq <- viridis_pal_c(color_steps)

# 绘制颜色渐变条
image(x = legend_x, y = seq(legend_y_min, legend_y_max, length.out = color_steps),
      z = matrix(1:color_steps, ncol = color_steps), col = color_seq,
      add = TRUE, axes = FALSE, xlab = "", ylab = "")

# 添加数值刻度与标签
axis(side = 4, at = seq(legend_y_min, legend_y_max, length.out = 5),
     labels = round(seq(min(df$color.), max(df$color.), length.out = 5), 2),
     las = 1, line = -0.5)
mtext("color.", side = 4, line = 2)

说明

  • viridis_pal(option = "C")生成与ggplot2中scale_color_viridis(option = "C")完全一致的配色方案,findInterval()将原始数值匹配到对应颜色区间,保证颜色映射逻辑统一。
  • 渐变图例通过image()绘制连续颜色条,配合axis()添加数值刻度,还原ggplot2渐变图例的展示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:06:17