如何在ggplot2的对数坐标图中添加另一组数据?
在对数刻度图中添加第二组数据的方法
这里提供两种实用方式,帮你把第二组数据添加到现有绘图中:
方式一:直接追加geom_line层
不需要修改数据结构,直接在现有绘图代码后新增一层geom_line(),指定第二组数据和对应的坐标轴映射即可,还可以通过样式参数区分两组线条:
library(ggplot2) library(scales) library(tibble) # 定义两组数据 df1 <- tibble( x = seq(1, 10, .01), y = sin(log(x)*pi) + 2 ) df2 <- tibble( x1 = seq(2, 11, .01), y1 = sin(log(x1)*pi) + 2 ) # 绘制双组线条 ggplot(df1, aes(x, y)) + geom_line(color = "#2196F3") + # 第一组用蓝色区分 geom_line(data = df2, aes(x = x1, y = y1), color = "#F44336") + # 第二组用红色区分 scale_x_continuous(trans = log_trans()) + scale_y_continuous(trans = log_trans())
方式二:合并数据框(更推荐)
把两组数据整理成带分组标识的统一数据框,这样能更方便地管理多组数据,还能自动生成图例:
library(ggplot2) library(scales) library(tibble) library(dplyr) # 第一组数据(添加分组标记) df1 <- tibble( x = seq(1, 10, .01), y = sin(log(x)*pi) + 2, data_group = "原始数据" ) # 第二组数据(统一列名,添加分组标记) df2 <- tibble( x = seq(2, 11, .01), y = sin(log(x)*pi) + 2, data_group = "新增数据" ) # 合并两组数据 combined_data <- bind_rows(df1, df2) # 绘图,通过分组自动区分线条 ggplot(combined_data, aes(x, y, color = data_group)) + geom_line() + scale_x_continuous(trans = log_trans()) + scale_y_continuous(trans = log_trans()) + labs(color = "数据组别") # 自定义图例标题
关键提示
你的两组数据sin(...) + 2的取值范围是1到3,完全满足对数刻度的定义域要求(数值>0),不会出现绘图报错的问题。如果后续数据有变动,要确保所有y值都大于0。
内容的提问来源于stack exchange,提问作者Tpellirn
相关产品推荐
相关产品推荐

