如何使用误差线将两个 ggplot 点堆叠在一起
How to stack two ggplot points on top of each other with error bars
我试图在 ggplot 中绘制两个相互重叠的点,这两个点上有误差线。但是,误差线与点不同步。这是我正在使用的代码,我附上了随后的图表:
df = data.frame(rtix = mean(DandI_Variance$`1RTI`[1:11]),
rtiy = 50,
rtixmin = DandI_Variance$`1RTI`[11],
rtixmax = DandI_Variance$`1RTI`[1],
rtiymin = 52,
rtiymax = 42,
rtcx = mean(DandI_Variance$`1RTC`[1:11]),
rtcy = 75,
rtcxmin = DandI_Variance$`1RTC`[11],
rtcxmax = DandI_Variance$`1RTC`[1],
rtcymin = 69,
rtcymax = 79)
ggplot(data = df, aes(x = rtix, y = rtiy)) +
geom_point() +
geom_errorbar(aes(ymin = rtiymin, ymax = rtiymax, width = .07, color = "blue")) +
geom_errorbarh(aes(xmin = rtixmin, xmax = rtixmax, height = 10, color = "blue")) +
geom_point(aes(x = rtcx, y = rtcy)) +
geom_errorbar(aes(ymin = rtcymin, ymax = rtcymax, width = .07, color = "red")) +
geom_errorbarh(aes(xmin = rtcxmin, xmax = rtcxmax, height = 10, color = "red")) +
xlab("S Equalibrium") +
ylab("Time to Equalibrium") +
ylim(0, 100) +
xlim(0, 1) +
ggtitle("Performance of Models")
我认为 ggplot 中可能会造成一些混淆,因为您在同一个调用中有两次 geom_errorbar() 和 geom_errorbarh() 函数。看起来您正在以一种奇怪的方式构建数据框。为什么不给你的数据框 2 行,每行都有标识列,而不是只有一行?
我会尝试像这样构建代码作为第一步(希望这能解决问题)。
我刚刚将数据帧压缩为 2 行和 7 列(添加了一个新的用于颜色的类型),然后我只调用了一次 ggplot2 函数而不是两次,并将宽度移到外面aes 调用的(因为 aes 调用将输入作为名称而不是值,这意味着 0.7 的宽度实际上是一个称为“0.7”的因子,而不是您想要的,这是 0.7 的数字宽度)并保持color in (只是因为颜色现在使用的是列而不是名称,请注意您的绘图 "blue" 实际上是红色,反之亦然,这是因为与我上面描述的宽度问题相同的问题)。最后我添加了手动色标,这样我们就可以选择哪个有哪个颜色。如果您想要以其他顺序排列,您可以将蓝色和红色调换。
df = data.frame(rtx = c(mean(DandI_Variance$`1RTI`[1:11]),
mean(DandI_Variance$`1RTC`[1:11])),
rty = c(50,75),
rtxmin = c(DandI_Variance$`1RTI`[11],
DandI_Variance$`1RTC`[11]),
rtxmax = c(DandI_Variance$`1RTI`[1],
DandI_Variance$`1RTC`[1]),
rtymin = c(52,69),
rtymax = c(42,79),
rttype = c('I', 'C')
)
ggplot(data = df, aes(x = rtx, y = rty)) +
geom_point() +
geom_errorbar(aes(ymin = rtymin, ymax = rtymax, color = rttype), width = .07) +
geom_errorbarh(aes(xmin = rtxmin, xmax = rtxmax, color = rttype), height = 10) +
scale_color_manual(values = c("blue", "red")) +
xlab("S Equalibrium") +
ylab("Time to Equalibrium") +
ylim(0, 100) +
xlim(0, 1) +
ggtitle("Performance of Models")
我试图在 ggplot 中绘制两个相互重叠的点,这两个点上有误差线。但是,误差线与点不同步。这是我正在使用的代码,我附上了随后的图表:
df = data.frame(rtix = mean(DandI_Variance$`1RTI`[1:11]),
rtiy = 50,
rtixmin = DandI_Variance$`1RTI`[11],
rtixmax = DandI_Variance$`1RTI`[1],
rtiymin = 52,
rtiymax = 42,
rtcx = mean(DandI_Variance$`1RTC`[1:11]),
rtcy = 75,
rtcxmin = DandI_Variance$`1RTC`[11],
rtcxmax = DandI_Variance$`1RTC`[1],
rtcymin = 69,
rtcymax = 79)
ggplot(data = df, aes(x = rtix, y = rtiy)) +
geom_point() +
geom_errorbar(aes(ymin = rtiymin, ymax = rtiymax, width = .07, color = "blue")) +
geom_errorbarh(aes(xmin = rtixmin, xmax = rtixmax, height = 10, color = "blue")) +
geom_point(aes(x = rtcx, y = rtcy)) +
geom_errorbar(aes(ymin = rtcymin, ymax = rtcymax, width = .07, color = "red")) +
geom_errorbarh(aes(xmin = rtcxmin, xmax = rtcxmax, height = 10, color = "red")) +
xlab("S Equalibrium") +
ylab("Time to Equalibrium") +
ylim(0, 100) +
xlim(0, 1) +
ggtitle("Performance of Models")
我认为 ggplot 中可能会造成一些混淆,因为您在同一个调用中有两次 geom_errorbar() 和 geom_errorbarh() 函数。看起来您正在以一种奇怪的方式构建数据框。为什么不给你的数据框 2 行,每行都有标识列,而不是只有一行?
我会尝试像这样构建代码作为第一步(希望这能解决问题)。
我刚刚将数据帧压缩为 2 行和 7 列(添加了一个新的用于颜色的类型),然后我只调用了一次 ggplot2 函数而不是两次,并将宽度移到外面aes 调用的(因为 aes 调用将输入作为名称而不是值,这意味着 0.7 的宽度实际上是一个称为“0.7”的因子,而不是您想要的,这是 0.7 的数字宽度)并保持color in (只是因为颜色现在使用的是列而不是名称,请注意您的绘图 "blue" 实际上是红色,反之亦然,这是因为与我上面描述的宽度问题相同的问题)。最后我添加了手动色标,这样我们就可以选择哪个有哪个颜色。如果您想要以其他顺序排列,您可以将蓝色和红色调换。
df = data.frame(rtx = c(mean(DandI_Variance$`1RTI`[1:11]),
mean(DandI_Variance$`1RTC`[1:11])),
rty = c(50,75),
rtxmin = c(DandI_Variance$`1RTI`[11],
DandI_Variance$`1RTC`[11]),
rtxmax = c(DandI_Variance$`1RTI`[1],
DandI_Variance$`1RTC`[1]),
rtymin = c(52,69),
rtymax = c(42,79),
rttype = c('I', 'C')
)
ggplot(data = df, aes(x = rtx, y = rty)) +
geom_point() +
geom_errorbar(aes(ymin = rtymin, ymax = rtymax, color = rttype), width = .07) +
geom_errorbarh(aes(xmin = rtxmin, xmax = rtxmax, color = rttype), height = 10) +
scale_color_manual(values = c("blue", "red")) +
xlab("S Equalibrium") +
ylab("Time to Equalibrium") +
ylim(0, 100) +
xlim(0, 1) +
ggtitle("Performance of Models")