2010-08-10 23 views
1

我在過去的幾個星期裏一直在學習ggplot。一般來說,我正在完成任務(儘管緩慢),但現在我卡住了。我創建了下面的小面劇情:http://dl.dropbox.com/u/7752237/example_bad_y_scales.pdf在facet中重疊y尺度(scale =「free」)

車花是由

pl <- pl + facet_wrap(~sci_name,ncol=1,scale="free") 

完成的問題:數字上y標尺不看,從0-70去(數字重疊的不錯,尤其是秤)。 我想以某種方式改變y尺度上的休息次數(假設只有1或2次休息)。有人可能有一個想法如何做到這一點?任何幫助將非常感激。 :)

PS:我沒有包括一個最小的例子,因爲我認爲這對解決那個特定的問題沒有多大幫助。 Kohskes答案後

編輯:

Kohske嗨, 哇,這是一個非常快的回答,謝謝!但是,我認爲它不適用於多面的情節。看看

p <- ggplot(mtcars, aes(wt, mpg)) 
p <- p + geom_point() 
p <- p + facet_wrap(~gear,ncol=1,scale="free") 

在y標尺,它給中間積3週休息,並在下面的圖8個休息...不是非常一致(但至少不重疊在我的例子)。

p2 <- p + scale_y_continuous(breaks=c(15,30),minor_breaks=c(10,20,25)) 

既不是很好:兩個主要蜱在較低的情節,只有一個在中上部情節。 當比例差異大於mtcars時,結果會更不令人滿意。任何其他想法? ;)Kohskes編輯後

編輯:

嗨,我不能看到如何實現這一點。在google上搜索ggplot和input_break只產生了10個結果,他們都沒有幫助。 我試圖

p <- ggplot(mtcars, aes(wt, mpg)) 
p <- p + geom_point() 
p <- p + facet_wrap(~gear,ncol=1,scale="free") 
p$input_breaks<-function(., range) { 
    pretty(range, n=3) 
} 
print(p) 

然而,我無法看到圖中的任何效果(試圖對於n = 1,3,15)。你能描述一下如何在mtcars例子中實現這個嗎?謝謝!

+0

您好我編輯我的答案。 – kohske 2010-08-10 08:15:15

+0

嗨我再次編輯我的答案。 – kohske 2010-08-10 17:24:36

回答

3

p < - ggplot(mtcars,AES(重量,MPG)) p < - P + geom_point()

dev.new(height=1) 
print(p) 
dev.new(height=1) 
p <- p + scale_y_continuous(breaks=c(15,30),minor_breaks=c(10,20,25)) 
print(p) 

訣竅是scale_y_continuous,你可以在它指定的休息和輕微破裂。

編輯:

可能是你不能單獨指定符每個面。 一個解決方法是通過控制中斷的可愛:

Trans$input_breaks<-function(., range) { 
    pretty(range, n=3) 
} 
print(p) 

改變的「n = 3」的產率不同可愛。

再次編輯:

這裏是完整的例子:

library(ggplot2) 
p <- ggplot(mtcars, aes(wt, mpg))+geom_point() 
Trans$input_breaks<-function(., range) { 
    pretty(range, n=100) 
} 
print(p) 
在這種情況下

,也許你可以看到蜱百。 通過改變n = 100,你可以自定義它。

請注意,這有副作用。在此之後的所有圖表具有相同數量的刻度,並且x和y軸具有相同數量的刻度。

+0

嗨,我編輯了我的問題 – donodarazao 2010-08-10 13:29:11

+0

非常好!現在它工作得很好,間距在面積小的情節中要少得多。而X軸上的時間根本不受影響。 非常感謝! – donodarazao 2010-08-10 18:37:25

+0

不錯。並且x軸上的時間不受影響的原因是日期,時間等的尺度對於中斷有不同的計算。可能只有連續的規模會受到影響。 – kohske 2010-08-11 00:39:12