r - 如何添加图例以绘制来自多个数据帧的数据
问题描述
我编写了一个从两个单独的数据帧编译的 ggplot 脚本,但就目前而言,没有图例,因为颜色不包含在 aes 中。如果可能,我希望将两个数据集分开,但不知道如何添加图例。有什么想法吗?
我尝试将颜色直接添加到 aes 函数,但随后颜色只是作为变量添加并列在图例中,而不是为实际数据着色。
在创建我将使用的绘图之后,用底数 r 绘制它:
legend("top",c("Delta 18O","Delta 13C"),fill=c("red","blue")
并得到了我需要的东西,但我不确定如何在 ggplot 中复制它。
以下代码当前准确地绘制了我想要的内容,它只是缺少图例......理想情况下应该与上面的行将产生的内容相匹配,除了“18”和“13”需要上标。
使用底数 r 的旧图示例(具有正确的图例,除了缺少上标 13 和 18)和缺少图例的当前图可以在此处找到:旧:https ://imgur.com/xgd9e9C 新,缺少图例:https ://imgur.com/eGRhUzf
后台数据
head(avar.data.x)
time av error
1 1.015223 0.030233604 0.003726832
2 2.030445 0.014819145 0.005270609
3 3.045668 0.010054801 0.006455241
4 4.060891 0.007477541 0.007453974
5 5.076113 0.006178282 0.008333912
6 6.091336 0.004949045 0.009129470
head(avar.data.y)
time av error
1 1.015223 0.06810001 0.003726832
2 2.030445 0.03408136 0.005270609
3 3.045668 0.02313839 0.006455241
4 4.060891 0.01737148 0.007453974
5 5.076113 0.01405144 0.008333912
6 6.091336 0.01172788 0.009129470
下面的 avarn 函数产生一个三列几千行的数据框(见上面的标题)。然后将这些随时间绘制在对数/对数图上。
avar.data.x <- avarn(data3$"d Intl. Std:d 13C VPDB - Value",frequency)
avar.data.y <- avarn(data3$"d Intl. Std:d 18O VPDB-CO2 - Value",frequency)
创建艾伦偏差图
ggplot()+
geom_line(data=avar.data.y,aes(x=time,y=sqrt(av)),color="red")+
geom_line(data=avar.data.x,aes(x=time,y=sqrt(av)),color="blue")+
scale_x_log10()+
scale_y_log10()+
labs(x=expression(paste("Averaging Time ",tau," (seconds)")),y="Allan Deviation (per mil)")
上面的图只缺少一个图例来显示两个绘制数据集的名称及其各自的颜色。我想要图表顶部中心的图例。
如何上标图例标题?:
ggplot()+
geom_line(data=avar.data.y,aes(x=time,y=sqrt(av),
color =expression(paste("Delta ",18^,"O"))))+
geom_line(data=avar.data.xmod,aes(x=time,y=sqrt(av),
color=expression(paste("Delta ",13^,"C"))))+
scale_color_manual(values = c("blue", "red"),name=NULL) +
scale_x_log10()+
scale_y_log10()+
labs(
x=expression(paste("Averaging Time ",tau," (seconds)")),
y="Allan Deviation (per mil)") +
theme(legend.position = c(0.5, 0.9))
解决方案
color
在里面设置aes
并添加一个scale_color_
函数到你的情节应该可以解决问题。
ggplot()+
geom_line(data=avar.data.y,aes(x=time,y=sqrt(av), color = "a"))+
geom_line(data=avar.data.x,aes(x=time,y=sqrt(av), color="b"))+
scale_color_manual(
values = c("red", "blue"),
labels = expression(avar.data.x^2, "b")
) +
scale_x_log10()+
scale_y_log10()+
labs(
x=expression(paste("Averaging^2 Time ",tau," (seconds)")),
y="Allan Deviation (per mil)") +
theme(legend.position = c(0.5, 0.9))
推荐阅读
- c# - Asp.Net Core 不同用户模型派生自 ApplicationUser
- java - 使用 Mysql 和 IntelliJ IDEA java 项目的数据库连接问题
- django - 可以正常使用应用程序特定的静态文件,无法获取项目根目录下的静态文件加载
- api - 带有自定义中间件的 Redux 授权句柄
- android - Android Studio 锁屏按钮和文本
- java - 标记为从未使用过的 Android 类
- android - 在 android 中显示文件选择器,例如 Telegeram 或 WhatsApp
- linux - 我们如何在 armv7 中使物理内存页面不可缓存(可能通过修改页表条目)?
- php - 在 Windows 10 上将 pdf 转换为图像
- html - 设置 href 标签访问属性默认值的最佳实践