假设我有以下数据
dt <- data.frame(id1 = rep(c("A", "B"), each = 10), id2=rep(1:10, 2), value = rnorm(20))
我想要的是制作A
vs B
的散点图。重新排列数据后可以这样做:
library(ggplot2)
library(tidyr)
qplot(A, B, data=dt %>% spread(id1,value))
是否可以不进行数据重新排列?问题在于,在我的情况下,id1
列中的值可以是任意的,因此我必须做一些额外的内务处理才能获得相同的结果,例如:
cd <- dt %>% spread(id1, value)
nm_cd <- colnames(cd)[-1]
colnames(cd)[-1] <- c("x", "y")
qplot(x, y, data=cd) + labs(x = nm_cd[1], y = nm_cd[2])
我很好奇有没有办法避免它?
答案 0 :(得分:1)
如果你可以使用基础plot
功能,那么这种方法非常简单,因为标签是自动生成的:
plot(do.call(cbind, split(dt$value, dt$id1)))
使用qplot
的另一种方法:
dat <- split(dt$value, dt$id1)
qplot(dat[[1]], dat[[2]], xlab = names(dat)[1], ylab = names(dat)[2])
答案 1 :(得分:1)
不确定,但是这样的事情对你有用吗?
ggplot(dt, aes(value[id1 == levels(id1)[1]], value[id1 == levels(id1)[2]])) +
geom_point() +
labs(x = levels(dt$id1)[1], y = levels(dt$id1)[2])