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
모든 옵션을 볼 수 있습니다.
범례를 추가하려면 색상 팔레트를 설정한 다음 추가할 수 있습니다.
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)
위의 몇 가지 팁을 사용하여 (특히 @daroczig에 감사드립니다.names(df)[i]
form) 이 함수는 숫자 변수의 히스토그램과 요인 변수의 막대 차트를 인쇄합니다.데이터 프레임 탐색을 위한 좋은 시작:
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])}
}
}
행운을 빌어요, 매트.
안타깝게도 ggplot2는 데이터를 긴 형식으로 변환하지 않고 이를 쉽게 수행할 수 있는 방법을 제공하지 않습니다.이 문제를 해결하기 위해 노력할 수도 있지만 데이터 변환 작업이 더 쉬워질 것입니다.여기에 다음을 포함한 모든 방법이 있습니다.melt
형상 변경 2부터,gather
일년부터 그리고pivot_longer
일년부터:data.frame을 넓은 형식에서 긴 형식으로 재구성
다음은 다음을 사용한 간단한 예입니다.
> df <- data.frame(time = 1:5, a = 1:5, b = 3:7)
> df
time a b
1 1 1 3
2 2 2 4
3 3 3 5
4 4 4 6
5 5 5 7
> df_wide <- df %>% pivot_longer(c(a, b), names_to = "colname", values_to = "val")
> df_wide
# A tibble: 10 x 3
time colname val
<int> <chr> <int>
1 1 a 1
2 1 b 3
3 2 a 2
4 2 b 4
5 3 a 3
6 3 b 5
7 4 a 4
8 4 b 6
9 5 a 5
10 5 b 7
당신이 볼 수 있듯이.pivot_longer
열.names_to
긴을 값 "name")으로 된 값에 합니다.다.values_to
("value"를 기본값합니다).다를 할 수 .df %>% pivot_longer(c("a", "b"))
.
이제 정상적으로 플롯을 할 수 있어, 전.
ggplot(df_wide, aes(x = time, y = val, color = colname)) + geom_line()
와 함께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)
과 를 xlab
그리고.ylab
와 함께main
선택.예:
plot(data[,i], main=names(data)[i])
그리고 각으로 표시() 를 .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개의 그림을 포함합니다.
이 컴퓨터에는 R이 없지만, 여기에 금이 가 있습니다.합니다.par
창에 여러 개의 그림을 표시하거나, 다음 페이지를 표시하기 전에 클릭하라는 메시지를 표시합니다.
plotfun <- function(col)
plot(data[ , col], ylab = names(data[col]), type = "l")
par(ask = TRUE)
sapply(seq(1, length(data), 1), plotfun)
의 열 ..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")
이 링크를 통해 같은 문제에 많은 도움이 되었습니다.
p = ggplot() +
geom_line(data = df_plot, aes(x = idx, y = col1), color = "blue") +
geom_line(data = df_plot, aes(x = idx, y = col2), color = "red")
print(p)
https://rpubs.com/euclid/343644
언급URL : https://stackoverflow.com/questions/4877357/how-to-plot-all-the-columns-of-a-data-frame-in-r
'programing' 카테고리의 다른 글
기존 MariaDB 타임스탬프 열을 로컬 표준시에서 UTC로 마이그레이션하는 방법 (0) | 2023.09.26 |
---|---|
WordPress의 기본 입력 검사를 방지합니다. (0) | 2023.09.26 |
데이터 프레임에서 그룹별로 고유/고유의 값 계산 (0) | 2023.09.26 |
mysqdump: 오류가 발생했습니다: 1449: (0) | 2023.09.26 |
jquery.animate()가 있는 CSS 회전 교차 브라우저 (0) | 2023.09.26 |