Подтвердить что ты не робот

Можно ли повернуть график в R (базовая графика)?

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

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

4b9b3361

Ответ 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.