1

ggplot を使用して棒グラフをプロットしたい。私は scale_y_log10 を使用して y 軸を再スケーリングしました。以下のスクリプトを使用すると、両方向 (上向きと下向き) のバーが表示され、バーは 1 から始まります。

ggplot (data=dat, aes(x=Col2,y=Col4,fill=Col3,group=Col1))+
geom_bar(stat="identity")+ facet_grid(.~Col1,scales="free_x",space="fixed")+
ylab("")+xlab("")+scale_fill_discrete("")+
scale_y_log10("#Counts",breaks=c(.1,1,10,100,1000),expand=c(0,0))+
theme_bw()+
theme(axis.text.x=element_text(angle=45,hjust=1,vjust=1))

ここで、バーを強制的に低い値 (0.1 または 0.01 など) から開始し、すべてのバーを上向きにしたいと考えています。どうやってやるの?関連する投稿や情報を見つけようとしましたが、うまくいきませんでした。そのような情報がすでにある場合、誰かが私に指示できますか?

編集:ほとんどのバーが低く、一部が非常に高いため、scale_y_log10 を使用したいと思います。scale_y_continuous を使用すると、短いバーが正しく表示されません。

4

1 に答える 1

5

を使用する代わりに、独自のスケールを定義できますscale_y_continuous(trans="log10"))。以下の例では、引数from=-2を特定の例に変更する必要があります。

# defining example data (since I don't have your data)
data(mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars <- rbind(mtcars, mtcars)
mtcars[1, "cyl"] <- 2
# sample plot
c <- ggplot(mtcars, aes(factor(cyl))) + geom_bar()
c + scale_y_log10() # this starts from 1
# defining the scale change
require(scales)
mylog_trans <- function(base=exp(1), from=0) 
{
  trans <- function(x) log(x, base)-from
  inv <- function(x) base^(x+from)
  trans_new("mylog", trans, inv, log_breaks(base=base), 
            domain = c(base^from, Inf))
}
# 
c + scale_y_continuous(trans = mylog_trans(base=10, from=-2)) # starts from 1e-2 
c + scale_y_continuous(trans = mylog_trans(base=10, from=-5)) # starts from 1e-5

上記の例でわかるように、このプロットは非常に誤解を招く可能性があります。2 つのプロットは同じデータを表示しますが、見た目が大きく異なるため、このスケール変更を使用するときは注意してください。

于 2014-03-10T11:00:08.320 に答える