首页 > 解决方案 > 如何添加图例以绘制来自多个数据帧的数据

问题描述

我编写了一个从两个单独的数据帧编译的 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))

标签: rggplot2legend

解决方案


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))

推荐阅读