在R中,如果数据框df
的列名为y,x1,x2,...,xn
,那么如何为数据框中的所有xi
绘制y
vs xi
无需手动输入
plot(df$y,df$xi,...)
对于所有$ i $,以便我获得n
个不同的图,一次性使用适当的轴名称(列名)?
编辑:我的数据框看起来像这样
Price SqFt Rooms Something Age
1 53.5 1008 5 2 35
2 49 1290 6 3 36
3 50.5 860 8 2 36
4 49.9 912 5 3 41
5 52 1204 6 3 40
6 55 1024 5 3 10
7 80.5 1764 8 4 64
8 86 1600 7 3 19
我想在y轴上使用Price
获得几个单独的图形,每个图形在x值上具有不同的列。对于4-5列,可以手动完成,但我已经拥有200多列的数据帧,因此我希望自动化该过程。
我一直在网站上阅读几个类似的问题,但我没有多少运气能够找到适合我特定情况的答案。我不习惯处理数据框。
提前谢谢。
编辑:显然我甚至无法针对SqFt
Price
绘制命令
plot(df$SqFt,df$Price)
不返回散点图,而是返回:
答案 0 :(得分:6)
以下是使用您的数据和关联问题的示例:
df <- structure(list(Price = c(53.5, 49, 50.5, 49.9, 52, 55, 80.5,
86), SqFt = c(1008L, 1290L, 860L, 912L, 1204L, 1024L, 1764L,
1600L), Rooms = c(5L, 6L, 8L, 5L, 6L, 5L, 8L, 7L), Something = c(2L,
3L, 2L, 3L, 3L, 3L, 4L, 3L), Age = c(35L, 36L, 36L, 41L, 40L,
10L, 64L, 19L)), .Names = c("Price", "SqFt", "Rooms", "Something",
"Age"), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6", "7", "8"))
library(ggplot2)
library(reshape2)
df.m <- melt(df, "Price")
ggplot(df.m, aes(value, Price)) +
geom_line() +
facet_wrap(~variable, scales = "free")
答案 1 :(得分:3)
您可以尝试:
for(i in 1:(ncol(df)-1)) {plot(df$y,df[[paste0('x',i)]],ylab=paste0('x',i),xlab='y')}
您可以添加其他选项,例如颜色,......代码将创建n-1个图,其中n为列数(因为y也是列)。
您可以尝试使用:
x1<-rnorm(50)
x2<-rnorm(50)
x3<-rnorm(50)
y<-rnorm(50)
df<-data.frame(y,x1,x2,x3)
用
for(i in 1:(ncol(df)-1)) {plot(df$y,df[[paste0('x',i)]],ylab=paste0('x',i),xlab='y',pch=20,col='blue',main=paste('Plot number',i))}
它将返回3个这样的图(轴标题和图表标题将根据索引i调整):
编辑:
为您的数据试用此代码:
for(i in 1:(ncol(df)-1)) {plot(df$Price,df[,i+1],ylab=colnames(df)[i+1],xlab=colnames(df)[1],pch=20,col='blue',main=paste('Plot number',i))}