我有一个带X列的表,还有几列Y1,Y2,Y3 ...... Y50 我正在努力使用R语法来执行Y1与X,Y2与X等的多个散点图,使用类似于对(table)工作方式的单个命令;除了我不希望每列都反对其他所有列 - 它是每个Y与X的散点图
答案 0 :(得分:2)
我认为最好使用stack
或melt
这样的长格式数据:
X <- 1:10
dat <- cbind(matrix(rnorm(10*50),ncol=50,
dimnames=list(NULL,paste0('Y',1:50))))
dat <- cbind(X,stack(as.data.frame(dat)))
在您的情况下,您可以使用以下内容获取Y的矩阵:
do.call(cbind,mget(ls(pattern='Y[0-9]+')))
然后使用ggplot2
library(ggplot2)
ggplot(dat) +
geom_line(aes(x=X,y=values,color=ind)) +
facet_wrap(~ind)+theme(legend.position='none')
或lattice
:
xyplot(X~values|ind,data=dat,type='l',groups=ind)
答案 1 :(得分:2)
也许看一下googleVis包和gvisScatterChart函数。该函数的输入完全采用您所描述的格式。
https://developers.google.com/chart/interactive/docs/gallery/scatterchart
编辑一个例子。
library('googleVis')
data(iris)
plot(gvisScatterChart(iris[,1:4]))
请注意,您提供的输入数据中不能包含字符,因此我只选择了数字列。
答案 2 :(得分:1)
你的意思是pairs
?我发现最容易找到的约定是指定要相互绘制的列范围。例如:
dim(iris)
## five columns across
pairs(iris)
## If I only want the second, third and fourth columns.
pairs(iris[,2:4])
答案 3 :(得分:1)
如果您只想绘制一个表格或数据框的第一行,而第二,第三和第四行可以使用
par(mfrow=c(1,3))
apply(iris[,2:4], 2, plot, x=iris[,1], xlab="x", ylab="y")
或者,如果你想控制轴标签等,或者for循环可能是好的:
par(mfrow=c(1,3))
for (i in 2:4){plot(iris[,1], iris[,i], xlab="iris data column #1", ylab=paste("iris data column #", i), main=paste("iris col 1 vs col ", i))}
也许来自packae scatterplotMatrix
的函数car
对您来说也很有趣。