R 在x轴上使用多个变量(包括误差条)制作深度剖面

R 在x轴上使用多个变量(包括误差条)制作深度剖面,r,ggplot2,errorbar,R,Ggplot2,Errorbar,我有一个数字的副本,需要添加错误条。我的数据来自一个CSV文件,我尝试将其分为4个不同的、可行的部分,分别用于4个深度剖面和logK;5号站和9号站。下面的代码是针对其中一个概要文件的,希望我能够再次创建此解决方案3次。现在,我的代码是这样的,我在一个CSV文件中读取,将其从宽转换为长,并使用ggplot函数进行打印。然而,我在可视化如何添加水平错误条时遇到了困难,因为我不认为错误条的列是我想要在图形上绘制的实际点。我有一种感觉,这与一开始我的数据争论有关,但我不确定是什么。注意:这是我在这里的

我有一个数字的副本,需要添加错误条。我的数据来自一个CSV文件,我尝试将其分为4个不同的、可行的部分,分别用于4个深度剖面和logK;5号站和9号站。下面的代码是针对其中一个概要文件的,希望我能够再次创建此解决方案3次。现在,我的代码是这样的,我在一个CSV文件中读取,将其从宽转换为长,并使用ggplot函数进行打印。然而,我在可视化如何添加水平错误条时遇到了困难,因为我不认为错误条的列是我想要在图形上绘制的实际点。我有一种感觉,这与一开始我的数据争论有关,但我不确定是什么。注意:这是我在这里的第一篇文章,所以如果它不是真正的reprex,请让我知道!!我尽了最大努力澄清,但如果不清楚,我会尝试修正

注意:我的实际情节也调整了许多美学,但为了尽量减少代码,我省略了这些行

该图有一个用于聚集功能的调整行,其中错误列作为长数据的测量列的一部分包括在内;以下列出以供参考


希望我能正确理解你的问题。以下是我的解决方案。首先,我将数据再次拆分为两个数据帧,因为这样更容易处理数据透视。接下来,我将它们转换为长格式,并为加入做准备

加入后,我可以绘制它并计算线范围

下次请尝试解释您的数据集,因为没有任何进一步的信息,它很难理解

library(tidyverse)

# make everything numeric
# as far as I can see this makes sense
df <- df %>%
  mutate(
    across(everything(), as.numeric)
  )
# For easier manipulating we split the df
main_df <- df %>% select(Station:L1_ALL_nM)
sd_df   <- df %>% select(Station:Depth, L1shipSD_nM:L1_ALL_SD_nM)
# now we pivot longer
main_df <- main_df %>% 
  pivot_longer(cols = dFe:L1_ALL_nM, names_to = "col_names", values_to = "val")
sd_df <- sd_df %>%
  pivot_longer(cols = L1shipSD_nM:L1_ALL_SD_nM, names_to = "col_names", values_to = "sd") %>% 
  mutate(
    # remove SD from string, we dont need it
    col_names = str_replace_all(col_names, "SD", "")
  )
# join the tables
plot_df <- main_df %>% full_join(sd_df)

# Plot our result
plot_df %>% 
  ggplot(
    aes(y = Depth, x = val, color = col_names, shape = col_names, fill = col_names)
  ) +
  geom_pointrange(
    aes(xmin = val - sd, xmax = val + sd)
    )


与其共享head的输出,不如使用dput之类的东西,跳过我们无法运行的read.csv部分,因为我们没有该文件。有关更多信息,请参阅。您希望如何准确计算误差条距离?您好@MrFlick!谢谢你的回复。我已经更新了帖子,加入了你提到的调整。希望这能让您在计算机上运行代码。我希望错误条来自预先计算的列,包括列名中的diff_from_mean。这是我遇到的问题的一部分,因为错误条来自df中已经存在的数据,如果以长格式使用,ggplot试图将这些数据绘制为实际点。
library(tidyverse)

# make everything numeric
# as far as I can see this makes sense
df <- df %>%
  mutate(
    across(everything(), as.numeric)
  )
# For easier manipulating we split the df
main_df <- df %>% select(Station:L1_ALL_nM)
sd_df   <- df %>% select(Station:Depth, L1shipSD_nM:L1_ALL_SD_nM)
# now we pivot longer
main_df <- main_df %>% 
  pivot_longer(cols = dFe:L1_ALL_nM, names_to = "col_names", values_to = "val")
sd_df <- sd_df %>%
  pivot_longer(cols = L1shipSD_nM:L1_ALL_SD_nM, names_to = "col_names", values_to = "sd") %>% 
  mutate(
    # remove SD from string, we dont need it
    col_names = str_replace_all(col_names, "SD", "")
  )
# join the tables
plot_df <- main_df %>% full_join(sd_df)

# Plot our result
plot_df %>% 
  ggplot(
    aes(y = Depth, x = val, color = col_names, shape = col_names, fill = col_names)
  ) +
  geom_pointrange(
    aes(xmin = val - sd, xmax = val + sd)
    )