2017-07-02 69 views
0

我有一個長尾巴的頻率分佈,爲了更好地利用繪圖的真實狀態,我繪製了一個對數圖。 (下面的數據是用於呈現起見)如何在數字小於1時用ggplot2繪製對數圖?

freqs=c(0.7, 0.2, 0.05, 0.01, 0.001) 
x=0:(length(freqs)-1) 

df=data.frame(x=x, y=freqs) 

library("ggplot2") 

ggplot(df) + 
geom_bar(mapping = aes(x = x, y = y),stat = "identity")+ scale_y_log10() 

但隨後由於數字是小於一,對數將是負的,因此所述條是上下顛倒。任何方式來解決這個問題?

+0

只是轉移一切大於1? – Nate

+1

保持原樣,因爲它是準確的?使用'scales :: log1p_trans'?使用不同的變換(平方根?)?你想看到什麼結果?你如何期望情節看起來? – Gregor

+3

我的建議是* not *在這裏使用條形圖,只需使用'geom_point()';可以說,你遇到麻煩的原因是你違反了一個隱含的barplot前提之一,那就是基準線爲零。 –

回答

1

一個有趣的解決方案是基於使用geom_segment建議here

freqs <- c(0.7, 0.2, 0.05, 0.01, 0.001) 
x <- 0:(length(freqs)-1) 
df <- data.frame(x=x, y=freqs) 

library(ggplot2) 
ggplot(df) + 
geom_segment(aes(x=x, xend=x, y=1e-4, yend=y), size=35, col="gray30") + 
scale_y_log10(breaks=c(0.001,0.01,0.1,1))+ ylab("")+ xlab("") + 
scale_x_discrete(limits=c(-.5,4.5)) 

enter image description here