Можно ли повернуть сюжет в 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
.
это возможно через пакет 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)
спиннинг 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 Мюррела Р графики.