熔化数据集上的散点图

时间:2014-07-24 09:20:02

标签: r ggplot2

假设我有以下数据

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])

我很好奇有没有办法避免它?

2 个答案:

答案 0 :(得分:1)

如果你可以使用基础plot功能,那么这种方法非常简单,因为标签是自动生成的:

plot(do.call(cbind, split(dt$value, dt$id1)))

enter image description here

使用qplot的另一种方法:

dat <- split(dt$value, dt$id1)
qplot(dat[[1]], dat[[2]], xlab = names(dat)[1], ylab = names(dat)[2])

enter image description here

答案 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])

enter image description here