2017-10-28 48 views
1

我想繪製兩個細胞羣體之間的平均差異,這是非常有意義的(P < 0.001)。然而,使用的規模不適合看到這種差異。這裏是我的代碼:如何使用R改變y尺度,以大步驟開始,然後以短步驟完成,以突出處理之間的差異?

ggplot(sh2_sum, aes(treatment,diameter,fill=treatment)) + 
    geom_bar(colour='black', width=.7, position=position_dodge(), 
      stat='identity',size=.2) + 
    coord_cartesian(ylim=c(0, .4)) + 
    xlab("") + ylab("Diámetro de la cabeza de la espina (µm)") + 
    scale_fill_manual(values=c("#009900", "#990000"),name='') + 
    geom_errorbar(aes(ymin=diameter, ymax=diameter+se),width=.3, 
        size=.2,position=position_dodge(.7)) + 
    theme(legend.direction='horizontal',legend.position=c(.5325,-.085), 
      plot.margin=unit(c(0,1,1,1),'cm'), axis.text.x = element_blank()) + 
    annotate("text", x=2, y=.355, label="* * *") 

這是圖我得到:

original graph

我曾嘗試使用scale_y_log10()但我得到以下錯誤:

Error in seq.default(min, max, by = by) : 'from' must be a finite number In addition: Warning message: Transformation introduced infinite values in continuous y-axis

我會喜歡使用scale_y_sqrt這種類型的值,從0到3的值很短,然後從3到4的值很大,所以差值是可見的ible 任何想法?

+0

我想你應該考慮放大一下你對'coord_cartesian'感興趣的領域,或者把'geom_bar'完全放在'geom_pointrange'的位置,而不是引入任意的尺度轉換 –

+0

平方根和日誌會放大'y'較小時的差異,'y'較大時的壓縮值。翹曲你的數據,使其看起來相對差異比實際大,你會想要某種指數變換,也許'exp(y)'或'y^2'。或者,不那麼具有欺騙性,按照Mikko的建議 - 線圖或散點圖預計不會從0開始,因此您可以更多地關注差異而不是絕對量級。 – Gregor

回答

3

對數轉換後的y軸從不對於條形圖是有意義的,因爲bars always start at 0和log(0)不是有用的值(因此是錯誤消息)。

您可以使用其他,零微轉換(例如asinh),但容易很多,也更有意義的,解決辦法是拋棄條形圖和使用的箱線圖(geom_boxplot)來代替。

實際上,你所擁有的稱爲「dynamite plot」,它是一個經典的可視化anti-pattern

相關問題