【发布时间】:2010-09-25 06:43:10
【问题描述】:
我对此进行了搜索,发现使用 {grid} 可以旋转图像,并且对于某些绘图,您可以使用它们的旋转(例如 plot(x,y) 而不是 plot(y,x) )。
但是,我想知道是否有在 R 中旋转绘图的通用方法(适用于基础图形中生成的任何绘图)?
【问题讨论】:
-
您是在谈论“旋转数据”(正如您的示例所暗示的那样)还是“旋转图形”(即以图形方式将其向右旋转 35 度)
我对此进行了搜索,发现使用 {grid} 可以旋转图像,并且对于某些绘图,您可以使用它们的旋转(例如 plot(x,y) 而不是 plot(y,x) )。
但是,我想知道是否有在 R 中旋转绘图的通用方法(适用于基础图形中生成的任何绘图)?
【问题讨论】:
您可以导出图形,将其读回,然后将其旋转显示为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。
【讨论】:
Error in UseMethod("as.raster") : no applicable method for 'as.raster' applied to an object of class "NULL"
我有理由确定,基本图形本身无法通用地执行此操作。然而,gridBase 包允许在“绘图”中混合基本图形和网格图形。包的小插图有一个关于在网格viewports 中嵌入基本图形的部分,因此您可能会在那里查看是否可以在您的地块周围制作一个网格包装器并使用网格进行旋转。不确定这是否是一条可行的途径,但据我所知,这是回答您的问题的唯一潜在途径。
gridBase 在 CRAN 上,作者是网格包的作者 Paul Murrell。
浏览小插图后,我注意到页面上的问题和限制部分中的一个项目符号,其中指出不可能将基本图形嵌入到 旋转 grid 视口。所以我猜你运气不好。
【讨论】:
旋转 3D 散点图
您还可以使用 rgl 包中的 plot3D(x, y, z) 函数创建交互式 3D 散点图。它创建了一个可以用鼠标旋转的旋转 3D 散点图。前三个参数是表示点的 x、y 和 z 数值向量。 col= 和 size= 分别控制点的颜色和大小。
# Spinning 3d Scatterplot
library(rgl)
plot3d(wt, disp, mpg, col="red", size=3)
【讨论】:
鉴于可以使用基本图形编写自己的绘图函数,我看不出如何存在单一解决方案。你想要的真的只是一种用 y 数据替换 x 数据的方法吗? “旋转”到底是什么意思?
【讨论】:
一个函数rotate_plot 可以像这样使用
rotate_plot(some_base_plot(x, y, ...))
这是不可能的,因为大多数基本图都不返回值。
某些绘图包含horiz 参数,允许您选择要绘制绘图的方式。看看barplot.default 看看如何实现它。 (警告:这很混乱。)
@ucfagls 建议使用gridBase 是您最好的选择。 Murrell's R Graphics 的Appendix B 中有一些使用它的例子。
【讨论】: