2012-07-25 87 views
0

我试图将条形图的y轴转换为对数刻度(即每个刻度之间的对数距离)。ggplot2 0.9.1:对数y轴刻度条形图

一些假数据:

DF <- data.frame(num=c(1,2,3),label=c("a","b","c")) 

我试过下面的例子:

p <- ggplot(data=DF,aes(x=label,y=num)) + geom_bar() + 
    scale_y_continuous(trans = 'log10', 
        breaks=trans_breaks("log10",function(x) 10^x), 
        labels=trans_format("log10",math_format(10^.x))) 

这只日志转换的标签,而不是蜱:

p <- ggplot(data=DF,aes(x=label,y=num)) + geom_bar() + coord_trans(y="log10") 

这没有按” t绘制任何东西:

p <- ggplot(data=DF,aes(x=label,y=num),y="log") 

没有运气或者

我也看过the 0.9 transition guide,但似乎没有任何工作。

编辑:

忘了包括一个例子我尝试:

p < - ggplot(数据= DF,AES(X =标签,Y = NUM​​))+ geom_bar()+ scale_y_log10( )

其产生以下警告:

警告消息: 在相当(反式(X)中,n,...):NaN的产生

+4

对条形图使用日志规模是一个坏主意,因为酒吧测量从零的距离。改为使用点图。 http://www.perceptualedge.com/articles/b-eye/dot_plots.pdf – 2012-07-25 09:45:49

+0

我尝试使用点图,它与伪数据一起工作。但是当我切换到20865到127135230的实际数据时,y轴标签只显示10^5 – demodw 2012-07-25 11:19:30

+0

您是否尝试使用对数y刻度的点图?它应该给你更多的轴标签与这​​种数据范围。如果没有,您可以在'scale_y_log10'中手动指定'labels'参数。 – 2012-07-25 12:43:53

回答

7

如果你想做一个日志10规模使用

p + scale_y_log10() 
+2

不幸的是,这对geom_bar不起作用。 – demodw 2012-07-25 11:13:12

+0

适用于我......实际上,我只是复制了您在编辑中放置的代码......也许您正在使用的数据有问题......也就是说,如果尝试使用对数刻度,则不能有负值? – 2012-07-25 11:19:04

+0

我不明白。我试图用虚拟数据复制我自己的例子,但仍然无法正常工作。你使用的是什么版本的ggplot2?实际数据也很好,根据我的'sessionInfo()',它的范围从20865到127135230 – demodw 2012-07-25 11:22:10