Как построить все столбцы кадра данных в 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] ), эта функция печатает гистограмму для числовых переменных и гистограмму для переменных факторов. Хорошее начало изучения кадра данных:

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

    С наилучшими пожеланиями, Матем.

    Вы можете указать заголовок (а также заголовок осей через xlab и ylab ) с main параметром. Например:

     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 графиков в одно и то же «изображение».

    У меня нет R на этом компьютере, но здесь есть трещина. Вы можете использовать par для отображения нескольких графиков в окне или как это, чтобы вызвать клик, прежде чем отображать следующую страницу.

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

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

    Если имена столбцов в файле .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") 
    Давайте будем гением компьютера.