Можно ли повернуть график в R (базовая графика)?
Я искал это и обнаружил, что с помощью {grid} есть способы повернуть изображение, а для некоторых графиков вы можете играть со своим вращением (например, график (x, y) вместо графика (y, x)).
Однако, я хочу знать, существует ли общий метод для поворота графика в R (тот, который будет работать для ЛЮБОГО графика, созданного в базовой графике)?
Ответы
Ответ 1
Я уверен, что в базовой графике не существует способа сделать это в целом. Однако есть пакет gridBase
, который позволяет смешивать базовую графику и графику сетки в "сюжете". Виньетка для пакета имеет раздел по встраиванию базовой графики в сетку viewports
, поэтому вы можете посмотреть там, чтобы посмотреть, можно ли вы нарисовать сетку-обертку вокруг ваших участков и использовать сетку для вращения. Не уверен, что это жизнеспособный маршрут, но, насколько мне известно, является единственным потенциальным путем для ответа на ваш вопрос.
gridBase
находится на CRAN, а автор - Пол Меррелл, автор пакета сетки.
После просмотра виньетки я отмечаю одну из пуль в разделе "Проблемы и ограничения" на странице, в которой говорится, что не можно встроить базовую графику во вращающееся окно просмотра grid
. Поэтому я думаю, вам не повезло.
Ответ 2
вы можете экспортировать графику, прочитать ее обратно и отобразить ее как rasterGrob
, скажем, (или a 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
Спиннинг 3D Scatterplots
Вы также можете создать интерактивную трехмерную диаграмму рассеяния, используя функцию plot3D (x, y, z) в пакете rgl. Он создает вращающуюся трехмерную диаграмму рассеяния, которую можно вращать с помощью мыши. Первые три аргумента представляют собой числовые векторы x, y и z, представляющие точки. col = и size = управляют цветом и размером точек соответственно.
# Spinning 3d Scatterplot
library(rgl)
plot3d(wt, disp, mpg, col="red", size=3)
Ответ 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)
![введите описание изображения здесь]()
Ответ 5
Учитывая, что возможно написать собственные функции графика, используя базовую графику, я не вижу, как может существовать одно решение. Это то, что вы хотите, действительно, просто способ отразить данные x с данными y? Что именно вы подразумеваете под "поворот"?
Ответ 6
Функция rotate_plot
, которая будет использоваться как
rotate_plot(some_base_plot(x, y, ...))
невозможен, потому что большая часть базового графика не возвращает значение.
Некоторые из графиков содержат аргумент horiz
, позволяющий вам выбрать, в какой форме вы хотите рисовать график. Взгляните на barplot.default
, чтобы узнать, как это реализовать. (Предупреждение: оно беспорядочно.)
Предложение @ucfagls использовать gridBase
- ваш лучший выбор. Есть несколько примеров его использования в Приложение B графики Murrell R.