我编写了一个从两个单独的数据帧编译的 ggplot 脚本,但就目前情况而言,没有图例,因为颜色不包含在 aes 中。如果可能的话,我希望将两个数据集分开,但不知道如何添加图例。有什么想法吗?
我尝试将颜色直接添加到 aes 函数中,但颜色只是作为变量添加并在图例中列出,而不是对实际数据进行着色。
在创建我将使用的绘图后,用基本 r 绘制此图:
legend("top",c("Delta 18O","Delta 13C"),fill=c("red","blue")
Run Code Online (Sandbox Code Playgroud)
并得到了我需要的东西,但我不知道如何在 ggplot 中复制它。
以下代码当前准确地绘制了我想要的内容,它只是缺少图例...理想情况下应该与上面的行生成的内容相匹配,但“18”和“13”需要上标。
使用基本 r 的旧图示例(具有正确的图例,除了缺少上标 13 和 18)和缺少图例的当前图的示例可以在此处找到:旧图:https: //i.stack.imgur.com/SCh1S.jpg 新的、缺失的图例:https ://i.stack.imgur.com/fDTYU.jpg
后台数据
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
Run Code Online (Sandbox Code Playgroud)
以下 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)
Run Code Online (Sandbox Code Playgroud)
创建艾伦偏差图
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)")
Run Code Online (Sandbox Code Playgroud)
上图仅缺少一个图例来显示两个绘制数据集的名称及其各自的颜色。我想要图例位于图表的顶部中心。
如何为图例标题添加上标?:
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))
Run Code Online (Sandbox Code Playgroud)
设置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))
Run Code Online (Sandbox Code Playgroud)
您可以通过将两个数据集合并为一个来更好地利用 ggplot 的美学。当您的数据框具有相同的结构时,这尤其容易。在这里,您可以使用color.
这样您只需要一次调用geom_line,并且更容易控制图例。您甚至可以创建一些奇特的功能来自动化标签。ETC。
另请注意,列名称中的空格不太好(您会让自己的生活变得非常困难),并且您可能需要考虑自动化调用avarn,例如 with lapply,这将产生数据框列表并进行绑定数据框的设置更加容易。
avar.data.x <- readr::read_table("0 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")
avar.data.y <- readr::read_table("0 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")
library(tidyverse)
combine_df <- bind_rows(list(a = avar.data.x, b = avar.data.y), .id = 'ID')
ggplot(combine_df)+
geom_line(aes(x = time, y = sqrt(av), color = ID))+
scale_color_manual(values = c("red", "blue"),
labels = c(expression("Delta 18"^"O"), expression("Delta 13"^"C")))
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2019-11-11 创建
| 归档时间: |
|
| 查看次数: |
4640 次 |
| 最近记录: |