2011-08-06 90 views
-3

我在R中創建了一個帶有ggplot2的直方圖,並且需要一個對數間隔的x軸,但想保留我的線性值。GGplot2:繪製直方圖與對數比例但線性值?

這可能嗎?

我的公式到目前爲止是:

ggplot(f0peruttnq, aes(f0)) + 
    geom_histogram(alpha=0.3, fill='white', colour='black') 

稍微題外話:我也試圖塞給我的直方圖頂部的正態曲線,但geom_density()似乎不工作,如果我想保持我的計數,而不是在X軸上的密度值。正如我試過+ stat_function(fun = dnorm)一點都沒有改變!

在此先感謝您的任何有用的提示!

它現在工作!

公式我用:

ggplot(data, aes(V2)) + geom_histogram(alpha=0.3, fill='white', colour='black')+scale_x_log10(breaks=c(50,100,150,200,250),labels=c(50,100,150,200,250)) 

感謝您的耐心:-)

+2

請發佈一個可重現的例子:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example你會得到更好的幫助,我們會更少脾氣暴躁: - ) –

+0

嗯......基本上我想要一個看起來像是從日誌值創建的圖,只是在x軸上有線性值!這是我的直方圖:http://www7.pic-upload.de/06.08.11/rzr5ftih1a.jpg。它是從日誌值創建的,這些值位於x軸上。我想要相同的直方圖,但是從線性值創建!直方圖的形狀應該類似於圖片,但x軸的標籤應該以線性值給出!我的公式到目前爲止是:ggplot(f0peruttnq,aes(f0))+ geom_histogram(alpha = 0.3,fill ='white',color ='black') – Bloomy

+0

請編輯您的問題以添加到目前爲止的公式按代碼按鈕,突出顯示代碼以將代碼標記爲代碼)以及'dput(f0peruttnq)'和'dput(f0)'的輸出。 –

回答

4

你的意思是不是改變你的數據,但只有情節?如果是的話,很容易:

library(ggplot2) 
dat <- subset(movies, votes > 1000) 
m <- qplot(rating, votes, data=dat, na.rm = T) 
bks <- seq(min(dat$rating),max(dat$rating)) 
m + scale_x_log10(breaks=bks,labels=bks) 

plot

+0

Mh ...這樣的事情,但沒有在Y軸上的日誌值... – Bloomy

+0

我不明白你在問什麼。您是否希望比例尺錯誤,因爲它會具有線性標籤和記錄值?或者你想讓X軸進行對數轉換? –

+0

我想用線性標籤對x軸進行日誌轉換。如果這不起作用,那麼我希望規模是錯的。 – Bloomy

0

我不知道這是可能的,但GGPLOT2如果你不完全依賴於認爲:

從GGPLOT2 help pages修改例圖書館,我99%肯定你可以用axis()函數庫的標準graphics來做到這一點。

盡我們最大的尊重,並無意在此創建討論(如果您願意,我們可以將其視爲聊天內容),但是不會造成這種誤導? x軸上的標籤應反映其實際值。由於您正在對數據進行日誌轉換,因此軸標籤應反映該轉換。否則就會在科學上不誠實。


編輯使用graphics庫...的例子不一樣漂亮GGPLOT2但你想要做什麼(注:我錯不必編輯直方圖的休息時間):

> data <- log(rnorm(10000, 100, 10)) #simulate some data that looks like yours 
> hist(data) # view a normal histogram of the data with log values on the x-axis 
> tick_locations = c(4.2, 4.4, 4.6, 4.8, 5.0) # copy the tick locations from the normal plot 
> tick_labels = exp(tick_locations) # reverse the log transformation; you can also create this manually 
> hist(data, xaxt = "n") # plot without the x-axis 
> axis(1, at = tick_locations, labels = tick_labels) # add the x-axis with the de-transformed values 
+0

爲了說明如何使用'graphics'包: 在您最初調用plot時,使用參數xaxt =「n」來抑制繪圖x軸。然後調用'axis(side = 1,at = vector_of_tick_positions,labels = vector_of_tick_labels)'以及任何你需要的其他參數。 – 2011-08-06 11:09:27

+0

啊,對不起,我提到'plot()',但它也應該與'hist()'一起使用。你還必須通過'hist()'函數的參數'breaks'來指定bin的位置。 – 2011-08-06 11:12:46

+0

Doinng'tick_labels = exp(tick_locations)'產生長浮點值。可能更好的做手動像'tick_labels = c(66.7,81.5,99.5,121.5,148.4)' – 2011-08-06 11:41:03