簡體   English   中英

用來自不同數據框ggplot R的誤差線繪制點

[英]Plotting points with error bars from different dataframes ggplot R

我有 3 個數據框,一個包含實際數據,另一個分別包含上限和下限數據。 如何組合這些數據框並在 ggplot 上創建帶有誤差線的散點圖(上限和下限數據用作條形)?

這是數據和繪圖代碼的示例

library(tidyverse)
library(dplyr)
library(ggplot2)

DT <- data.frame(Samples=c("D1", "D2", "D3", "D4"),
             ACE=c(0.184, -0.169, 0.054, 0.087),
             FLN=c(-0.257, -0.239, -0.009, 0.038),
             ANT=c(-0.166, -0.304, 0.238, "" ),
             stringsAsFactors=FALSE)



 LowerLim <- data.frame(Samples=c("D1", "D2", "D3", "D4"),
              ACE=c(-1.514, "", -1.644, -1.611),
              FLN=c("", "", "", -1.660),
              ANT=c(-1.865, -2.003, 1.937, ""),
              stringsAsFactors=FALSE)

 UpperLim <- data.frame(Samples=c("D1", "D2", "D3", "D4"),
                   ACE=c(-0.560, "", -0.689,-0.657),
                   FLN=c("", "", "", -0.706),
                   ANT=c(-0.911,-1.049,0.983, "" ),
                   stringsAsFactors=FALSE)

 DTlong <- gather(DT, Cds, Values, "ACE":"ANT", factor_key=TRUE)

DTlong$Samples <- as.character(DTlong$Samples)

DTlong$Samples <- factor(DTlong$Samples, levels=unique(DTlong$Samples))

ggplot(DTlong)+geom_point(aes(color=Samples, y=Values, x=Cds))+
     theme(axis.title.x = element_blank())+ 
     theme(axis.text.x=element_text(size=7, angle=90,hjust=0.95,vjust=0.2))+
    ggtitle("Points")

這里有幾個問題。 首先,您的某些列是字符格式而不是數字格式,因為您將缺失值設置為""而不是NA 我很欣賞在將數據框打印到屏幕時這可能看起來更自然,但這意味着任何包含""的列都不再是數字,並且不能用於計算或繪制該列似乎包含的值。

這意味着第一步應該將每個數據框中的三個值列轉換為數值:

DT[-1] <- lapply(DT[-1], as.numeric)
LowerLim[-1] <- lapply(LowerLim[-1], as.numeric)
UpperLim[-1] <- lapply(UpperLim[-1], as.numeric)

第二個問題是您的DT數據框和UpperLit數據框似乎是錯誤的,因為 DT 中的所有值都高於UpperLimit中的值。 出於此答案的目的,我不得不假設這是一個錯誤。 如果你的真實數據沒有這個問題,可以省略這一步:

tmp <- DT
DT <- UpperLim
UpperLim <- tmp
rm(tmp)

第三個問題是要繪制的數據形狀錯誤。 由於行和列的順序都是相同的,我們可以通過將每個數據幀轉換為長格式來實現這一點,並且只保留上下 lim 數據幀的值列。

df <- cbind(pivot_longer(DT, -1, names_to = "Cds", values_to = "Values"),
            lower = pivot_longer(LowerLim, -1)$value,
            upper = pivot_longer(UpperLim, -1)$value)

現在我們准備好繪圖了。 我們需要在點和誤差條上使用position_dodge來將它們展開:

ggplot(df, aes(Cds, Values, color = Samples)) +
  geom_point(position = position_dodge(width = 0.5), size = 3) +
  geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.25, size = 1,
                position = position_dodge(width = 0.5)) +
  scale_color_brewer(palette = "Set1") +
  theme_minimal(base_size = 16) +
  theme(axis.title.x = element_blank()) +
  ggtitle("Points")

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM