Можно ли повернуть сюжет в R (базовая графика)? - PullRequest
14 голосов
/ 25 сентября 2010

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

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

Ответы [ 6 ]

8 голосов
/ 11 апреля 2012

вы можете экспортировать графику, прочитать ее обратно и отобразить ее повернутой, скажем, как 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

6 голосов
/ 25 августа 2015

Это возможно через пакет 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

6 голосов
/ 25 сентября 2010

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

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

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

4 голосов
/ 11 апреля 2012

Вращающиеся 3D-диаграммы рассеяния

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

# Spinning 3d Scatterplot
library(rgl)

plot3d(wt, disp, mpg, col="red", size=3)
2 голосов
/ 25 сентября 2010

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

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

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

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

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

2 голосов
/ 25 сентября 2010

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

...