R 让数据在ggplot中达到极限,而不是去NA

R 让数据在ggplot中达到极限,而不是去NA,r,ggplot2,range,limit,R,Ggplot2,Range,Limit,我正在尝试使用ggplot2绘制一些标准错误(SE)条。在这个设置中,我有显示典型SE条的粗条,但在这些条的顶部,我覆盖了显示“可选”SE的细条(在数据的标题“se2”下)。这些可选SE条始终大于数据 我遇到的问题是,大型替代SEs被删除,警告消息告诉我有两行被删除,因为它们包含缺少的值。我只想让这些值无论如何都显示出来,如果可选SE条达到我设置的限制,那么它就会停在那里,仍然显示出来(这对读者意味着它会继续过去) 我已经发布了我正在使用的简化版本: # Load packages librar

我正在尝试使用
ggplot2
绘制一些标准错误(SE)条。在这个设置中,我有显示典型SE条的粗条,但在这些条的顶部,我覆盖了显示“可选”SE的细条(在数据的标题“se2”下)。这些可选SE条始终大于数据

我遇到的问题是,大型替代SEs被删除,警告消息告诉我有两行被删除,因为它们包含缺少的值。我只想让这些值无论如何都显示出来,如果可选SE条达到我设置的限制,那么它就会停在那里,仍然显示出来(这对读者意味着它会继续过去)

我已经发布了我正在使用的简化版本:

# Load packages
library(dplyr)
library(ggplot2)
library(ggpubr)

# Make dataframe for group 1

df_values1 <- data.frame(
  beta = c(0.07,0.04,0.3),
  se = c(.01,0.01,0.008),
  se2 = c(0.1,0.05,0.2),
  outcome = c("Name 1",
          "Name 2",
          "Name 3"),
  sample = c(rep("Group1",3))
)

# Make dataframe for group 2

df_values2 <- data.frame(
  beta = c(0.15,-0.04,0.03),
  se = c(.01,0.01,0.008),
  se2 = c(0.1,.2,0.05),
  outcome = c("Name 1",
          "Name 2",
          "Name 3"),
  sample = c(rep("Group2",3))
)

# Make dataframe for group 3

df_values3 <- data.frame(
  beta = c(0.22,0.18,-0.03),
  se = c(.01,0.01,0.008),
  se2 = c(1,0.05,0.01),
  outcome = c("Name 1",
          "Name 2",
          "Name 3"),
  sample = c(rep("Group3",3))
)

# Position dodge
pd <- position_dodge(0.7)

# Merge datasets
df_all <- rbind(df_values1, df_values2, df_values3)

# NOTE: use the levels of outcome from one of the non-merged datasets
df_all$outcome <- factor(df_all$outcome, levels = df_values1$outcome)

# Because the coordinates will be flipped, the order of the levels is 'reversed' here
df_all$sample <- factor(df_all$sample, levels = c('Group3', 'Group2', 'Group1'))


# Plot
picture <- ggplot(df_all, aes(x = outcome, y = beta, group = sample, colour = sample)) + 
  geom_hline(yintercept = c(-0.375, -0.125, 0.125, 0.375), size = 0.25, colour = 'grey95') +
  geom_errorbar(aes(ymin = beta-1.96*se, ymax = beta+1.96*se), width = 0, alpha = 1, size = 2, position = pd) +
  geom_errorbar(aes(ymin = beta-1.96*se2, ymax = beta+1.96*se2), width = 0, alpha = 1, size = 0.5, position = pd) +
  geom_hline(yintercept = 0, size = 0.25) + 
  guides(colour = guide_legend(reverse = TRUE), shape = guide_legend(reverse = TRUE)) + 
  ylim(-0.5,0.5) + 
  coord_flip() + 
  scale_x_discrete(limits = rev(levels(df_all$outcome)))

picture
#加载包
图书馆(dplyr)
图书馆(GG2)
图书馆(ggpubr)
#为组1生成数据帧
df_值1请参见此处的两个答案:通常使用
coord_cartesian
来防止数据被剪裁,但如果使用
coord_flip
则可以在此范围内设置限制:

picture <- ggplot(df_all, aes(x = outcome, y = beta, group = sample, colour = sample)) + 
     geom_hline(yintercept = c(-0.375, -0.125, 0.125, 0.375), size = 0.25, colour = 'grey95') +
     geom_errorbar(aes(ymin = beta-1.96*se, ymax = beta+1.96*se), width = 0, alpha = 1, size = 2, position = pd) +
     geom_errorbar(aes(ymin = beta-1.96*se2, ymax = beta+1.96*se2), width = 0, alpha = 1, size = 0.5, position = pd) +
     geom_hline(yintercept = 0, size = 0.25) + 
     guides(colour = guide_legend(reverse = TRUE), shape = guide_legend(reverse = TRUE)) + 
     coord_flip(ylim = c(-0.5,0.5)) + 
     scale_x_discrete(limits = rev(levels(df_all$outcome)))

画面完美!非常感谢。