Несколько столбцов в одном сюжете [дубликат]

Попробуйте это, но я не думаю, что это сработает, потому что вы не должны изменять это

Поместите эту строку в файл htaccess в каталоге, в котором вы хотите, чтобы этот параметр enabled:

php_value allow_url_fopen On

Обратите внимание, что этот параметр применим только к файлам PHP в том же каталоге, что и файл htaccess.

В качестве альтернативы использованию url_fopen попробуйте использовать curl.

56
задан zx8754 18 April 2018 в 12:26
поделиться

9 ответов

Пакет 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 ~ .)

enter image description here [/g0] enter image description here [/g1]

60
ответ дан rjzii 16 August 2018 в 03:34
поделиться
  • 1
    Хороший ответ, но почему вы действительно нуждаетесь в изменении? – eliasah 20 July 2016 в 10:02
  • 2
    @eliasah для команды таяния – Verena Haunschmid 15 January 2017 в 17:12
  • 3
    Спасибо @VerenaHaunschmid Я понял это потом :-) – eliasah 15 January 2017 в 17:44

Если имена столбцов в файле файла .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")
1
ответ дан Alessandro Jacopson 16 August 2018 в 03:34
поделиться
  • 1
    Поскольку вы используете только первую строку из data2, было бы более эффективно установить nrows = 1 в read.csv. – Rustam Guliev 5 December 2016 в 20:25

Вы можете указать заголовок (а также заголовок осей через 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 графиков в одно и то же «изображение».

2
ответ дан daroczig 16 August 2018 в 03:34
поделиться

Вы можете перепрыгнуть через обручи и преобразовать свое решение в вызов 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)

Что дает: Example of zoo plotting capabilities [/g0]

12
ответ дан Gavin Simpson 16 August 2018 в 03:34
поделиться

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

plotfun <- function(col) 
  plot(data[ , col], ylab = names(data[col]), type = "l")
par(ask = TRUE)
sapply(seq(1, length(data), 1), plotfun)
2
ответ дан J. Win. 16 August 2018 в 03:34
поделиться

Существует очень простой способ построения всех столбцов из фрейма данных с помощью отдельных панелей или той же панели:

plot.ts(data)

Что дает (где X1 - X4 - имена столбцов):

enter image description here [/g0]

Посмотрите «plot.ts» для всех параметров.

Если вы больше не контролируете функцию построения графика, а не используете цикл, вы также можете сделать что-то вроде:

par(mfcol = c(ncol(data), 1))
Map(function(x,y) plot(x, main =y), data, names(data))
29
ответ дан Matti Pastell 16 August 2018 в 03:34
поделиться
  • 1
    Спасибо, даже если это связано с временными рядами, я думаю, что это поможет мне понять мои данные. Мне нравится один лайнер! – Alessandro Jacopson 19 February 2011 в 16:59
  • 2
    Небольшая заметка: при добавлении «plot.type = c (« single ») ваша серия отображается на одном графике вместо отдельных блоков: data <- data.frame(x=c(rnorm(10)),y=c(rnorm(10)),z=c(rnorm(10))) plot.ts(data,plot.type=c("single"),lty=1:3) – Geek On Acid 20 November 2011 в 02:53
  • 3
    @GeekOnAcid +1, Большое спасибо за подсказку «single». – Alessandro Jacopson 29 January 2012 в 14:19
  • 4
    Если вы собираетесь использовать single, вы также должны добавить: col=rainbow(ncol(my.data)) или что-то подобное, чтобы строки выглядели удобочитаемыми. – bright-star 6 January 2014 в 08:21

Используя некоторые из приведенных выше советов (особенно спасибо @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])}
  }
}

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

5
ответ дан MatW 16 August 2018 в 03:34
поделиться

С 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)
1
ответ дан Oscar Perpiñán 16 August 2018 в 03:34
поделиться

Я удивлен, что никто не упомянул 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)
6
ответ дан Rustam Guliev 16 August 2018 в 03:34
поделиться
  • 1
    Что такое matlab.dark.palette, откуда он? – Alessandro Jacopson 6 December 2016 в 08:47
  • 2
    @AlessandroJacopson - это функция цветовой палитры, которую я обычно использую. Это из пакета hyperSpec. Но здесь было бы лучше использовать более известную функцию, поэтому я изменил ее на rainbow. Если вы не знаете о функциях палитры, посмотрите ?rainbow. Извините за смущение. – Rustam Guliev 6 December 2016 в 09:03
Другие вопросы по тегам:

Похожие вопросы: