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