2013-10-03 8 views
8

У меня есть длинная серия из 10000 наблюдений, которые я хочу визуализировать. Проблема в том, что если я просто рисую ее, то размер времени будет сжиматься, и ни одна из тонких деталей временного ряда, которую я хочу визуализировать, будет очевидна. Например:Как сделать смехотворно широкий сюжет

plot((sin(1:10000/100)+rnorm(10000)/5),type='l') 

То, что я хотел бы, чтобы какой-то образом построить следующий вместе бок о боке в одном гигантски длительном участке без использования пара (mfrow = с (1100)). Затем я хочу экспортировать этот очень широкий сюжет и просто прокрутить, чтобы визуализировать всю серию.

plot((sin(1:10000/100)+rnorm(10000)/5)[1:100],type='l') 
plot((sin(1:10000/100)+rnorm(10000)/5)[101:200],type='l') 
plot((sin(1:10000/100)+rnorm(10000)/5)[201:300],type='l') 
..... 

В конце концов, я хотел бы иметь 3 или 4 из этих гигантски широких участков друг на друга с par(mfrow=c(4,1)).

Я знаю, что ответ как-то связан с настройкой pin в par, но я продолжаю получать Error in plot.new() : plot region too large. Я предполагаю, что это что-то делать с взаимодействием pin с другими параметрами par

Бонусные баллы начисляются, если мы можем получить высоту пиксела и ширину точно. Предпочтительно, чтобы график не пропускал случайные пиксели из-за несовершенства экспорта.

Дальнейшие бонусные баллы, если изображение может быть закодирован в .html. и рассматривается таким образом

+0

Это зависит от того, как вы это пишете. Это в формате PDF? –

+0

@DavidRobinson Любой файл изображения. png, eps, ..., с сильным предпочтением небольшого размера на диске. png было бы неплохо. Что-то, что может кодировать в html, также было бы неплохо (например, png can). – user2763361

+1

Делает ли только 'png (width = 10000, height = 10000); пар (mfrow = ....); сюжет(...); dev.off(); 'или что-то подобное не дает вам достаточно места, чтобы соответствовать действительно широким сюжетам? – thelatemail

ответ

8

Альтернатива, которую вы можете рассмотреть, это svg, которая в любом случае будет производить что-то более качественное, чем png/jpeg.

Что-то вроде

svg(width = 2000, height = 7) 
par(mfrow=c(4,1), mar = c(4, 4, 0, 2)) 
for (i in 1:4){ 
    plot((sin(1:10000/100)+rnorm(10000)/5),type='l', 
     bty = "l", xaxs = "i") 
} 
dev.off() 

будет производить очень широкий участок, чуть более 1 МБ, что делает довольно хорошо в Chrome.

Обратите внимание, что ширина и высота указаны в дюймах.

P.S. svg также предлагает потенциал для интерактивной графики. Просто увиден хороший пример, позволяющий пользователю выбрать область длинного ряда, чтобы увеличить масштаб, см. Рисунок 22 в Dynamic and Interactive R Graphics for the Web: The gridSVG Package, черновик документа Пола Меррелла и Саймона Поттера.

+0

Знаете ли вы, как измерить, сколько пикселей в ширину это – user2763361

+1

svg - это векторный формат, поэтому я думаю, что ответ на ваш вопрос произволен. –

+0

Если вы откроете сгенерированный файл svg в текстовом редакторе, вы увидите размеры, указанные как 'width =" 144000pt "height =" 504pt "', поэтому 72 точки на дюйм. Я попытался изменить это на 'width =" 144000px "height =" 504px ", который, казалось, работал нормально, но я не знаю, хорошая ли это! –

4

Это может быть проблема, связанная с Каиром, или это может быть нехватка оперативной памяти на вашем компьютере. Следующий код отлично работает для меня на компьютере с Windows 7 с 8 ГБ оперативной памяти.

png("wide.png", width = 1e5, height = 500) 
plot((sin(1:10000/100)+rnorm(10000)/5),type='l') 
dev.off() 

Если изменить ширину на 1e6 пикселей, то R успешно создает файл (он занимает около одной минуты), но не просмотр изображений программное обеспечение, которое я есть в наличии не может отобразить изображение, что большой.

+1

Каир ограничивает ширину/высоту 32767 пикселей. Ширина 1e4 должна быть хорошей для построения 1e4 точек данных, хотя это поможет сохранить размер файла. –

+1

Я, вероятно, искал около 150 000 пикселей, но получаю эту ошибку: '> dev.off() Максимальное поддерживаемое измерение изображения 65500 пикселей *** обнаружено glibc ***/usr/lib64/R/bin/exec/R: двойной свободный или коррупционный (! Prev): 0x000000000278f950 *** 'Тогда он сбрасывает все это« backtrace ». – user2763361

+0

. Можете ли вы добавить точный код, который вы используете, чтобы создать файл сюжета на ваш вопрос вместе с ОС и версией R, в которой вы работаете. –

1

Я бы выбрал альтернативный маршрут. Прежде всего, какова точка зрения всего сюжета на привет-Res? Если вы ищете какие-то аномалии или нарушения, хорошо, вот что такое обработка данных :-). Подумайте о том, как найти все x > 3sigma, или сделать БПФ и т. Д.

Далее, если вы действительно хотите, чтобы изучить все это на глаз, как насчет написание некоторых R-TclTK код или с помощью dynamicGraph или iplots или zoom производить интерактивный график, который вы можете прокручивать через «живой».

ETA: IIRC RStudio имеет инструменты для интерактивной прокрутки и масштабирования графика.

+0

@ user2763361 Пакет 'zoom' отлично работает с основными графиками' plot'. Он позволяет в интерактивном режиме изменять масштаб X и Y (как диапазон, так и разрешение). Я считаю, что «iplots» делает тоже. –

+0

Просмотр всего, что важно для меня. Мне нужно увидеть точную эволюцию временных рядов для каждой отдельной точки данных. Не могли бы вы привести несколько примеров того, что вы рекомендовали? Также я хочу поместить его в отчет «html» или что-то, что не является условием наличия R в то время. – user2763361

Смежные вопросы