2011-08-01 278 views
11

雖然標繪了R軸中標有對數刻度的軸,散點圖和其他繪圖,但如何使用標記(如10^-1 10^0 10^1 10^2 10^3等,而不是僅顯示-1,0,1,2,3等的座標軸。應該向hist(),plot()等命令添加哪些參數?R中的標記對數刻度顯示

+1

GGPLOT2自動執行此操作ggplot2中的轉換。看到這個頁面底部的例子:http://had.co.nz/ggplot2/geom_boxplot.html –

+0

謝謝,這幫了我。此外,我還發現了一些非常有用的內容http://r.789695.n4.nabble.com/log-y-axis-of-histogram-td2399498.html – user744121

回答

13

除了GGPLOT2(見GSK3的評論)的解決方案,我想補充一點,在情節自動發生的()以及使用正確的參數時,如:

x <- 1:10 
y <- exp(1:10) 
plot(x,y,log="y") 

可以使用X軸的參數log="x"或兩者的log="xy"

如果要格式化數字,或者以日誌格式存儲數據,則可以使用axis()來執行解決方法。一些有趣的功能:

  • axTicks(x)給出關於X軸的刻度線的位置(x = 1)或Y軸(x = 2)
  • bquote()轉換表達式語言,但可以替代隨其價值變化。有關bquote()的更多信息,請參閱Latex and variables in plot label in R?的問題。
  • as.expression()使語言對象來自bquote()表達式。這允許axis()按照?plotmath中所述進行格式化。它不能用語言對象來實現。

的漂亮格式的一個例子:

x <- y <- 1:10 
plot(x,y,yaxt="n") 
aty <- axTicks(2) 
labels <- sapply(aty,function(i) 
      as.expression(bquote(10^ .(i))) 
     ) 
axis(2,at=aty,labels=labels) 

其中給出

enter image description here

+0

謝謝,這是非常有用的,我認爲它是一個普通的解。爲我工作就好了 – user744121

+0

這個例子介紹了我'bquote()' - 謝謝! – nullglob

+3

別忘了'par(las = 1)'爲了更好的格式化... –

1

在GGPLOT2你只可以添加一個

... + 
scale_x_log10() + 
scale_y_log10(limits = c(1e-4,1), breaks=c(1e-4,1e-3,1e-2,0.1,1)) + ... 

規模的軸,標籤他們並添加自定義休息。

9

這是一種不同的方式來繪製這種類型的軸:

plot(NA, xlim=c(0,10), ylim=c(1, 10^4), xlab="x", ylab="y", log="y", yaxt="n") 
at.y <- outer(1:9, 10^(0:4)) 
lab.y <- ifelse(log10(at.y) %% 1 == 0, at.y, NA) 
axis(2, at=at.y, labels=lab.y, las=1) 

enter image description here

編輯:如果你做日誌這也解決了latticeExtrascale.components