2017-10-28 90 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

相关问题