“如何修复”;错误:美学长度必须为1或与数据(28)相同:yintercept;?

“如何修复”;错误:美学长度必须为1或与数据(28)相同:yintercept;?,r,R,我想为我的项目做一块林地。由于它不是任何R软件包中内置的典型森林图,我发现本页的第一个图有助于实现我的目标,一个附带森林图的边表: 生成特定图形的代码粘贴在下面(原始链接:) 我遇到的问题是在“数据表”步骤中。在R中键入以下内容时,会弹出一个错误: data_table 错误:长度必须为1或与数据(28)相同:yintercept 我猜问题来自data\u table中的geom\u hline。 经过一些在线搜索和一些尝试和错误,我仍然无法摆脱错误消息,不知道我是否可以在这里得到一些帮助。

我想为我的项目做一块林地。由于它不是任何R软件包中内置的典型森林图,我发现本页的第一个图有助于实现我的目标,一个附带森林图的边表:
生成特定图形的代码粘贴在下面(原始链接:)

我遇到的问题是在“数据表”步骤中。在R中键入以下内容时,会弹出一个错误:

data_table
错误:长度必须为1或与数据(28)相同:yintercept

我猜问题来自
data\u table
中的
geom\u hline
。 经过一些在线搜索和一些尝试和错误,我仍然无法摆脱错误消息,不知道我是否可以在这里得到一些帮助。提前感谢你的帮助

--生成第一个图形的特定代码:

library(ggplot2)
library(gridExtra)
dat <- data.frame(group = factor(c("A","B","C","D","E","F","G"), levels=c("F","E","D","C","B","A","G")),
              cen = c(3.1,2.0,1.6,3.2,3.6,7.6,NA),
              low = c(2,0.9,0.8,1.5,2,4.2,NA),
              high = c(6,4,2,6,5,14.5,NA))
theme_set(theme_bw())
theme_update(
axis.line = element_line(colour = "black"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
plot.margin = unit(c(0,0,0,0), "lines"))

p <- ggplot(dat,aes(cen,group)) + 
geom_point(size=5, shape=18) +
geom_errorbarh(aes(xmax = high, xmin = low), height = 0.15) +
geom_vline(xintercept = 1, linetype = "longdash") +
scale_x_continuous(breaks = seq(0,14,1), labels = seq(0,14,1)) +
labs(x="Adjusted Odds Ratio", y="")
data_table <- ggplot(lab, aes(x = V05, y = V0, label = format(V1, nsmall = 1))) +
geom_text(size = 4, hjust=0, vjust=0.5) + theme_bw() +
geom_hline(aes(yintercept=c(6.5,7.5))) + 
theme(panel.grid.major = element_blank(), 
      legend.position = "none",
      panel.border = element_blank(), 
      axis.text.x = element_text(colour="white"),#element_blank(),
      axis.text.y = element_blank(), 
      axis.ticks = element_line(colour="white"),#element_blank(),
      plot.margin = unit(c(0,0,0,0), "lines")) +
          labs(x="",y="") +
          coord_cartesian(xlim=c(1,4.5))

lab <- data.frame(V0 = factor(c("A","B","C","D","E","F","G","A","B","C","D","E","F","G","A","B","C","D","E","F","G","A","B","C","D","E","F","G"),, levels=c("G","F","E","D","C","B","A")),
              V05 = rep(c(1,2,3,4),each=7),
              V1 = c("Occuption","Active","","Inactive","","Inactive","","Recreation","Inactive","","Active","","Inactive","","Gender","Men","Women","Men","Women","Men","Women","OR",3.1,2.0,1.6,3.2,3.6,7.6))

data_table <- ggplot(lab, aes(x = V05, y = V0, label = format(V1, nsmall = 1))) +
geom_text(size = 4, hjust=0, vjust=0.5) + theme_bw() +
geom_hline(aes(yintercept=c(6.5,7.5))) + 
theme(panel.grid.major = element_blank(), 
      legend.position = "none",
      panel.border = element_blank(), 
      axis.text.x = element_text(colour="white"),#element_blank(),
      axis.text.y = element_blank(), 
      axis.ticks = element_line(colour="white"),#element_blank(),
      plot.margin = unit(c(0,0,0,0), "lines")) +
          labs(x="",y="") +
          coord_cartesian(xlim=c(1,4.5))
库(ggplot2)
图书馆(gridExtra)

dat最简单的修复方法是将
geom_hline
分成两个不同的调用

data_table <- ggplot(lab, aes(x = V05, y = V0, label = format(V1, nsmall = 1))) +
  geom_text(size = 4, hjust=0, vjust=0.5) + theme_bw() +
  geom_hline(aes(yintercept=c(6.5))) +
  geom_hline(aes(yintercept=c(7.5))) +
  theme(panel.grid.major = element_blank(), 
        legend.position = "none",
        panel.border = element_blank(), 
        axis.text.x = element_text(colour="white"),#element_blank(),
        axis.text.y = element_blank(), 
        axis.ticks = element_line(colour="white"),#element_blank(),
        plot.margin = unit(c(0,0,0,0), "lines")) +
  labs(x="",y="") +
  coord_cartesian(xlim=c(1,4.5))  
data_table  

data\u table您不需要将
aes()
geom\u hline
一起使用(如果您希望数据的每一行都有一条水平线,请仅使用
aes()
),您可以执行以下操作:

geom_hline(yintercept = c(6.5, 7.5))

帮助中对此进行了解释,有关详细信息,请参见
?geom_hline

耶!它也有用!!谢谢!!我试图删除整个geom_hline,但它不起作用。现在我知道我必须保持在那里。似乎aes()是ggplot中的一个必需元素?哇!离开geom_hline就像一个魔术!!非常感谢你!!为什么在这种情况下分离几何图形很重要?当您使用
aes
时,您可以基于数据框中的变量映射
颜色
填充
形状
大小
等,并为它们创建图例。如果您不想要这些,请使用@Gregor建议的方法。在您的案例中,当您将
yintercept
放入
aes
中时,ggplot希望提供的向量与数据帧具有相同的长度(行)。您可以尝试
lab$line1奖励:要在R中对齐多个绘图,可以从
grid中选择其他选项。排列
Bonus 2:使用
ase
&
geom\u hline的示例