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

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

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

6 ответов


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

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

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


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


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


спиннинг 3D Scatterplots

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

# Spinning 3d Scatterplot
library(rgl)

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

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


функция rotate_plot для использования как

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

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

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

предложение@ucfagls использовать gridBase это ваш лучший ставку. Есть несколько примеров его использования в Приложение B of Мюррела Р графики.