我有两个连续的变量,我试图在ggplot2中相互映射,但我想使用geom_crossbar()显示数据均值和标准错误。为了做到这一点,我需要将x轴绘制为一个因子,这很好,除了我不能得到我想要的x轴间距类型。有没有人知道将x变量强制为空间作为连续变量的方法,即使它是离散的?
一些代码......
# assemble data, calculate means and standard errors
x <- c(rep(15, 10), rep(30, 10), rep(41, 10), rep(42, 10), rep(45, 10))
y <- c(rnorm(10, 47, 15), rnorm(10, 35, 11), rnorm(10, 31, 12), rnorm(10, 37, 13), rnorm(10, 30, 10))
dat <- data.frame(x,y)
y.mean <- aggregate(dat$y, by=list(x=dat$x), mean)
names(y.mean) <- c('x', 'mean')
dat <- merge(dat, y.mean, by=c('x'))
se <- function(x) sqrt(var(x) / length(x))
y.se <- aggregate(dat$y, by=list(x=dat$x), se)
names(y.se) <- c('x','se')
dat <- merge(dat, y.se, by=c('x'))
g <- ggplot(dat, aes(x=factor(x), y=mean, ymin= mean - se, ymax= mean + se))
g + geom_crossbar(width=0.5) + geom_jitter(mapping=aes(x=factor(x), y=y), position=position_jitter(width=0.2))
正如您所看到的,x变量被放置为离散变量,就像它应该的那样。我真的不想要那个;相反,我希望看到它间隔为连续变量。但是,我必须将x作为保持横杆的一个因素,否则横杆开始对我不利。我只想使用geom_boxplot(),但我想要标准错误而不是四分位数范围。
感谢您的帮助, 保罗
答案 0 :(得分:1)
在不知道你的数据的情况下很难知道,但听起来这里存在一些不稳定的可视化问题......无论如何,如果你有不同的数据源,我认为这会更直接 - 一个用于你的点数,一个为盒子。如果不解决任何其他问题,我将如何修改您的方法:
dat <- data.frame(x,y)
y.mean <- aggregate(dat$y, by=list(x=dat$x), mean)
names(y.mean) <- c('x', 'mean')
se <- function(x) sqrt(var(x) / length(x))
y.se <- aggregate(dat$y, by=list(x=dat$x), se)
names(y.se) <- c('x','se')
dat.mean <- merge(y.mean, y.se, by=c('x'))
library(ggplot2)
g <- ggplot(dat, aes(x, y)) + geom_point()
g + geom_crossbar(data = dat.mean, aes(y = mean,
ymin = mean - se, ymax = mean + se, group = x))
如果你想让x轴标签反映你的'等级'(x是一个因素?我认为这是一个很重要的问题),你可以添加:
scale_x_continuous(breaks = dat.mean$x)