在R中一次性绘制不同图中的一个特定列的所有数据帧列

时间:2015-11-30 07:57:26

标签: r plot dataframe

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

不返回散点图,而是返回:

http://imgur.com/B5R3jyY

2 个答案:

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

enter image description here

答案 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调整):

enter image description here

编辑:

为您的数据试用此代码:

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