Program Tip

R에서 데이터 프레임의 모든 열을 플로팅하는 방법

programtip 2020. 11. 7. 10:27
반응형

R에서 데이터 프레임의 모든 열을 플로팅하는 방법


데이터 프레임에는 n 개의 열이 있으며 각 열에 대해 하나씩 n 개의 플롯을 얻고 싶습니다.

나는 초보자이고 R에 능통하지 않지만 어쨌든 두 가지 해결책을 찾았습니다.

첫 번째는 작동하지만 열 이름을 인쇄하지 않습니다 (필요합니다!).

data <- read.csv("sample.csv",header=T,sep=",")
for ( c in data ) plot( c, type="l" )

두 번째는 열 이름을 인쇄하기 때문에 더 잘 작동합니다.

data <- read.csv("sample.csv",header=T,sep=",")
for ( i in seq(1,length( data ),1) ) plot(data[,i],ylab=names(data[i]),type="l")

(R 언어 관점에서 볼 때) 더 나은 솔루션이 있습니까?


ggplot2패키지는 약간의 학습이 필요하지만 결과는 정말 멋져 보입니다. 많은 코드를 작성하지 않고도 멋진 전설과 다른 많은 멋진 기능을 얻을 수 있습니다.

require(ggplot2)
require(reshape2)
df <- data.frame(time = 1:10,
                 a = cumsum(rnorm(10)),
                 b = cumsum(rnorm(10)),
                 c = cumsum(rnorm(10)))
df <- melt(df ,  id.vars = 'time', variable.name = 'series')

# plot on same grid, each series colored differently -- 
# good if the series have same scale
ggplot(df, aes(time,value)) + geom_line(aes(colour = series))

# or plot on different plots
ggplot(df, aes(time,value)) + geom_line() + facet_grid(series ~ .)

여기에 이미지 설명 입력 여기에 이미지 설명 입력


별도의 패널 또는 동일한 패널을 사용하여 데이터 프레임의 모든 열을 플로팅하는 매우 간단한 방법이 있습니다.

plot.ts(data)

결과 (X1-X4는 열 이름) :

여기에 이미지 설명 입력

모든 옵션에 대해서는? plot.ts를 살펴보십시오.

플로팅 기능을 더 많이 제어하지 않고 루프를 사용하지 않으려면 다음과 같이 할 수도 있습니다.

par(mfcol = c(ncol(data), 1))
Map(function(x,y) plot(x, main =y), data, names(data))

농구를 건너 뛰고 솔루션을 lapply, sapply또는 apply전화 로 변환 할 수 있습니다 . (@jonw가이 작업을 수행하는 한 가지 방법을 보여줍니다.) 이미 가지고있는 것 외에는 완벽하게 허용되는 코드입니다.

이들이 모두 시계열이거나 유사한 경우 다음이 적합한 대안이 될 수 있으며, 단일 플로팅 영역에있는 자체 패널의 각 시리즈를 플로팅합니다. 우리는 zoo실제로 이와 같이 주문 된 데이터를 매우 잘 처리 하므로 패키지를 사용합니다 .

require(zoo)
set.seed(1)
## example data
dat <- data.frame(X = cumsum(rnorm(100)), Y = cumsum(rnorm(100)),
                  Z = cumsum(rnorm(100)))
## convert to multivariate zoo object
datz <- zoo(dat)
## plot it
plot(datz)

다음을 제공합니다. 동물원 플로팅 기능의 예


아무도 언급하지 않은 것에 놀랐습니다 matplot. 별도의 축에 각 선을 그릴 필요가없는 경우 매우 편리합니다. 단 하나의 명령 :

matplot(y = data, type = 'l', lty = 1)

?matplot모든 옵션을 보려면 사용 하십시오.

To add the legend, you can set color palette and then add it:

mypalette = rainbow(ncol(data))
matplot(y = data, type = 'l', lty = 1, col = mypalette)
legend(legend = colnames(data), x = "topright", y = "topright", lty = 1, lwd = 2, col = mypalette)

Using some of the tips above (especially thanks @daroczig for the names(df)[i] form) this function prints a histogram for numeric variables and a bar chart for factor variables. A good start to exploring a data frame:

par(mfrow=c(3,3),mar=c(2,1,1,1)) #my example has 9 columns

dfplot <- function(data.frame)
{
  df <- data.frame
  ln <- length(names(data.frame))
  for(i in 1:ln){
    mname <- substitute(df[,i])
      if(is.factor(df[,i])){
        plot(df[,i],main=names(df)[i])}
        else{hist(df[,i],main=names(df)[i])}
  }
}

Best wishes, Mat.


I don't have R on this computer, but here is a crack at it. You can use par to display multiple plots in a window, or like this to prompt for a click before displaying the next page.

plotfun <- function(col) 
  plot(data[ , col], ylab = names(data[col]), type = "l")
par(ask = TRUE)
sapply(seq(1, length(data), 1), plotfun)

With lattice:

library(lattice)

df <- data.frame(time = 1:10,
                 a = cumsum(rnorm(10)),
                 b = cumsum(rnorm(10)),
                 c = cumsum(rnorm(10)))

form <- as.formula(paste(paste(names(df)[- 1],  collapse = ' + '),  
                         'time',  sep = '~'))

xyplot(form,  data = df,  type = 'b',  outer = TRUE)

You could specify the title (and also the title of the axes via xlab and ylab) with the main option. E.g.:

plot(data[,i], main=names(data)[i])

당신이 dataframe의 각 변수를 플롯 (저장)하려는 경우, 당신은 사용한다 png, pdf또는 다른 그래픽 드라이버 당신이 필요하고, 그 실행 한 후 dev.off()명령을. 예 :

data <- read.csv("sample.csv",header=T,sep=",")
for (i in 1:length(data)) {
    pdf(paste('fileprefix_', names(data)[i], '.pdf', sep='')
    plot(data[,i], ylab=names(data[i]), type="l")
    dev.off()
}

또는 mfrow매개 변수 를 사용하여 동일한 이미지에 모든 플롯을 그립니다 par(). 예 : par(mfrow=c(2,2)동일한 "이미지"에 다음 4 개의 플롯을 포함하는 데 사용 합니다.


.csv파일 파일 의 열 이름 이 유효한 R 이름이 아닌 경우 :

data <- read.csv("sample.csv",sep=";",head=TRUE)
data2 <- read.csv("sample.csv",sep=";",head=FALSE,nrows=1)

for ( i in seq(1,length( data ),1) ) plot(data[,i],ylab=data2[1,i],type="l")

참고 URL : https://stackoverflow.com/questions/4877357/how-to-plot-all-the-columns-of-a-data-frame-in-r

반응형