2010-09-25 110 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

相關問題