2010-09-25 133 views
12

我搜索了这个,发现{grid}有旋转图像的方法,对于一些情节,你可以使用它们的旋转(例如plot(x,y)而不是plot(y,x)) 。是否可以在R(基本图形)中旋转绘图?

但是,我想知道是否有旋转R中的一个绘图的一般方法(其中一个适用于在基本图形中生成的任何绘图)?

+2

您是在谈论“旋转数据”(如您的示例所暗示的)或关于“旋转图形”(即将图形向右旋转35度) – nico 2010-09-25 10:08:57

+0

nico - B.感谢:) – 2010-09-26 12:38:57

+0

所以我这里有用的信息https://stat.ethz.ch/pipermail/r-help/2003-May/033157.html – 2013-11-18 12:34:52

回答

5

我有理由相信,基本图形本身没有一种方法可以做到这一点。然而有gridBase包,它允许在“图”中混合基础图形和网格图形。该包的小插曲有一个关于将网格图形嵌入网格viewports的部分,因此您可以在那里查看是否可以在绘图周围制作网格包装并使用网格进行旋转。不知道这是否是一条可行的路线,但据我所知,这是唯一可能的途径来回答您的问题。

gridBase在CRAN上,作者是网格包的作者Paul Murrell 。

浏览的小插曲之后,我注意到在问题子弹的一个页面上限制部分,其中指出,这是不可能嵌入底座图形为旋转grid视。所以我猜你不走运。

+0

好的答案! (虽然不是我喜欢阅读的那个)谢谢! – 2010-09-26 12:59:02

2

鉴于可能使用基本图形编写自己的绘图函数,我看不到单个解决方案可能如何存在。您想要的只是一种用y数据回报x数据的方法吗? “旋转”是什么意思?

+0

rotate =使输出图(例如)旋转90度。 – 2010-09-26 12:59:59

+0

你的意思是*整个情节?轴,文本,标记等等?这在屏幕图形设备上或在postscript设备上似乎毫无意义,您可以使用horizo​​ntal = TRUE/FALSE来生成相对于纸张的旋转图。或者使用svg()图形设备,然后将svg文件加载到inkscape中,选择全部并旋转90度。这些都是使输出绘图旋转90度的所有有效方法。 – Spacedman 2010-09-26 21:01:50

+0

这是真的 - 但我想知道是否有一种方法在R :) – 2010-09-30 14:53:23

2

函数rotate_plot

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

使用,因为大多数垒积的不返回值是不可能的。

某些图中包含horiz参数,允许您选择想要绘图的方式。看看barplot.default看看如何实现这一点。 (警告:它很混乱。)

@ ucfagls建议使用gridBase是你最好的选择。在Murrell's R Graphics的Appendix B中有一些使用它的例子。

+0

谢谢里奇 - 我很难过的答案,但它是一个答案不少。我将标记为“回答”ucfagls回答时间的目的。最好,Tal – 2010-09-26 12:57:55

4

纺纱三维散点图

还可以创建使用PLOT3D格式(X,Y,Z)在RGL封装功能的交互式3D散点图。它创建一个旋转的3D散点图,可以用鼠标旋转。前三个参数是代表点的x,y和z数字向量。 col =和size =分别控制点的颜色和大小。

# Spinning 3d Scatterplot 
library(rgl) 

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

你可以导出图形,早在读它,并显示旋转为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

enter image description here

+3

你的代码不起作用! 'UseMethod中的错误(“as.raster”): 没有适用于'as.raster'的方法应用于类“NULL”的对象 – 2014-08-01 22:43:12

+1

我得到一个类似的错误:( – user2543622 2015-06-17 21:45:03

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) 

enter image description here