2010-09-25 3 views
12

Я искал это и обнаружил, что с помощью {grid} есть способы повернуть изображение, а для некоторых графиков вы можете играть со своим вращением (например, график (x, y) вместо графика (y, x)) ,Можно ли повернуть график в R (базовая графика)?

Однако, я хочу знать, есть ли общий метод для поворота графика в R (тот, который будет работать для ЛЮБОГО сюжета, созданного в базовой графике)?

+2

Вы говорите о «вращении данных» (как может показаться в вашем примере) или о «вращении графика» (т.е. графически поворачивая его на 35 градусов вправо) – nico

+0

nico - B. Спасибо :) –

+0

So Мне полезная информация здесь https://stat.ethz.ch/pipermail/r-help/2003-May/033157.html –

ответ

5

Я вполне уверен, что в базовой графике нет способа сделать это в целом. Однако есть пакет gridBase, который позволяет смешивать базовую графику и сетчатую графику в «сюжете». Виньетка для пакета имеет раздел о встраивании базовой графики в сетку viewports, так что вы можете посмотреть там, чтобы увидеть, можно ли приготовить сетчатую оболочку вокруг ваших участков и использовать сетку для вращения. Не уверен, что это жизнеспособный маршрут, но, насколько мне известно, является только потенциальным маршрутом для ответа на ваш вопрос.

gridBase находится на CRAN, а автор - Пол Меррелл, автор пакета сетки ,

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

+0

Хороший ответ! (хотя и не тот, который я любил читать) Спасибо! –

2

Учитывая, что его можно написать собственные функции графика, используя базовую графику, я не вижу, как может существовать одно решение. Это то, что вы хотите, действительно, просто способ отразить данные x с данными y? Что именно вы подразумеваете под «поворот»?

+0

rotate = чтобы сделать выходной график (например) поворот на 90 градусов. –

+0

Вы имеете в виду * whole * plot? Оси, текст, отметки и т. Д. И т. Д.? Это кажется бессмысленным на экране графического устройства, или на устройстве постскриптума вы, вероятно, можете использовать horizontal = TRUE/FALSE для создания поворотного графика относительно бумаги. Или используйте графическое устройство svg(), а затем загрузите файл svg в inkscape, выберите все и поверните на 90 градусов. Это все допустимые способы заставить график вывода поворачиваться на 90 градусов. – Spacedman

+0

Это правда - но мне было интересно, есть ли способ сделать это в R :) –

2

Функция rotate_plot будет использоваться как

rotate_plot(some_base_plot(x, y, ...)) 

не представляется возможным, так как большая часть основного сюжета не возвращают значение.

Некоторые из участков содержат аргумент horiz, чтобы вы могли выбрать, в какой форме вы хотите рисовать рисунок. Взгляните на barplot.default, чтобы узнать, как это реализовать. (Предупреждение: это грязно.)

@ Рекомендация ucfagls по использованию gridBase - ваш лучший выбор. Есть несколько примеров его использования в Appendix B графики Murrell's R.

+0

Спасибо Ричи - Мне грустно от ответа, но это ответ, тем не менее. Я буду отмечать как ответ «ucfagls» для целей синхронизации. Best, Tal –

4

Spinning 3D диаграммы рассеяния

Вы также можете создать интерактивную 3D диаграмму рассеяния с использованием Plot3D (у, х, г) функции в пакете RGL. Он создает вращающуюся трехмерную диаграмму рассеяния, которую можно вращать с помощью мыши. Первые три аргумента представляют собой числовые векторы x, y и z, представляющие точки. col = и size = управляют цветом и размером точек соответственно.

# Spinning 3d Scatterplot 
library(rgl) 

plot3d(wt, disp, mpg, col="red", size=3) 
7

можно экспортировать графику, читать его обратно, и отображать его вращалась как rasterGrob, скажем, (или rasterImage после поворота матрицы или grImport Grob, если вы хотите векторные пути)

plot(1:10, rnorm(10)) 
library(grid) 
cap <- grid.cap() 
grid.newpage() 
grid.raster(cap, vp=viewport(angle=30)) 

Новый пакет gridGraphics может стать лучшей альтернативой.

Примечание: это, похоже, не работает с графическим устройством Rstudio, предположительно, они не реализованы grid.cap.

enter image description here

+3

Ваш код не работает! 'Ошибка в UseMethod (" as.raster "): нет применимого метода для 'as.raster', примененного к объекту класса" NULL "' –

+1

. Я получаю аналогичную ошибку :( – user2543622

4

Это вид можно с помощью пакета gridGraphics, хотя он чувствует себя немного грубо по краям (примеры в ?grid.echo делать не всю работу для меня),

plot(1:10, rnorm(10)) 

library(gridGraphics) 

grab_grob <- function(){ 
    grid.echo() 
    grid.grab() 
} 

g <- grab_grob() 
grid.newpage() 
pushViewport(viewport(width=0.7,angle=30)) 
grid.draw(g) 

enter image description here

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