r 散点图,两个方向都有误差线
r scatter plot with error bars in both directions
如何在两个方向上创建带有误差线的散点图?通常误差线在垂直方向(即 y 值的不确定性)。但是我的数据在 x 值上也有不确定性
X ErrX Y ErrY
1.0 0.1 3.0 0.2
1.5 0.3 4.2 0.1
etc
使用ggplot2
,这很容易。您可以完全控制所有四个 "sides" 误差线的长度。使用 geom_errorbar()
设置 y 误差,使用 geom_errobarh()
(h 表示水平)设置 x 误差。
#toy data
df <- data.frame(X = rnorm(4), errX = rnorm(4)*0.1, Y = rnorm(4), errY = rnorm(4)*0.2)
#load ggplot2
require(ggplot2)
#make graph
ggplot(data = df, aes(x = X, y = Y)) + geom_point() + #main graph
geom_errorbar(aes(ymin = Y-errY, ymax = Y+errY)) +
geom_errorbarh(aes(xmin = X-errX, xmax = X+errX))
通过在 geom_errorbar()
中设置参数,您可以单独控制每个条形的颜色、线宽等。有关详细信息,请参阅帮助和 Google。例如,您可以控制 "caps" 的宽度或使用 width
参数完全消除它们。将上图与本图进行比较,以获取删除它们的示例:
ggplot(data = df, aes(x = X, y = Y)) + geom_point() +
geom_errorbar(aes(ymin = Y-errY, ymax = Y+errY), width = 0) +
geom_errorbarh(aes(xmin = X-errX, xmax = X+errX), height = 0)
作为替代方案(使用 Curt F. 的 "df"):
rangeX = range(c(df$X + df$errX, df$X - df$errX))
rangeY = range(c(df$Y + df$errY, df$Y - df$errY))
plot(df$X, df$Y, xlim = rangeX, ylim = rangeY)
segments(df$X, df$Y - df$errY, df$X, df$Y + df$errY)
segments(df$X - df$errX, df$Y, df$X + df$errX, df$Y)
使用我的 psych 包中的 error.crosses + 来自 Curt 的玩具数据:
df1 <- data.frame(mean=df$X,sd=df$errX)
df2 <- data.frame(mean=df$Y,sd=df$errY)
error.crosses(df1,df2,sd=TRUE)
有关更复杂的示例,请参阅 error.crosses 的帮助页面。
如何在两个方向上创建带有误差线的散点图?通常误差线在垂直方向(即 y 值的不确定性)。但是我的数据在 x 值上也有不确定性
X ErrX Y ErrY
1.0 0.1 3.0 0.2
1.5 0.3 4.2 0.1
etc
使用ggplot2
,这很容易。您可以完全控制所有四个 "sides" 误差线的长度。使用 geom_errorbar()
设置 y 误差,使用 geom_errobarh()
(h 表示水平)设置 x 误差。
#toy data
df <- data.frame(X = rnorm(4), errX = rnorm(4)*0.1, Y = rnorm(4), errY = rnorm(4)*0.2)
#load ggplot2
require(ggplot2)
#make graph
ggplot(data = df, aes(x = X, y = Y)) + geom_point() + #main graph
geom_errorbar(aes(ymin = Y-errY, ymax = Y+errY)) +
geom_errorbarh(aes(xmin = X-errX, xmax = X+errX))
通过在 geom_errorbar()
中设置参数,您可以单独控制每个条形的颜色、线宽等。有关详细信息,请参阅帮助和 Google。例如,您可以控制 "caps" 的宽度或使用 width
参数完全消除它们。将上图与本图进行比较,以获取删除它们的示例:
ggplot(data = df, aes(x = X, y = Y)) + geom_point() +
geom_errorbar(aes(ymin = Y-errY, ymax = Y+errY), width = 0) +
geom_errorbarh(aes(xmin = X-errX, xmax = X+errX), height = 0)
作为替代方案(使用 Curt F. 的 "df"):
rangeX = range(c(df$X + df$errX, df$X - df$errX))
rangeY = range(c(df$Y + df$errY, df$Y - df$errY))
plot(df$X, df$Y, xlim = rangeX, ylim = rangeY)
segments(df$X, df$Y - df$errY, df$X, df$Y + df$errY)
segments(df$X - df$errX, df$Y, df$X + df$errX, df$Y)
使用我的 psych 包中的 error.crosses + 来自 Curt 的玩具数据:
df1 <- data.frame(mean=df$X,sd=df$errX)
df2 <- data.frame(mean=df$Y,sd=df$errY)
error.crosses(df1,df2,sd=TRUE)
有关更复杂的示例,请参阅 error.crosses 的帮助页面。