2017-01-31 10 views
4

私は、バープロットのバーを一緒に "かわす"ことを考えています。次のRコードは、バーの間に空白を残します。他の回答like this oneは、グループのバーの部分についてこれを達成する方法を示していますが、x軸のファクターごとに異なるバーには適用されないようです。幅変数と遊ぶggplot2のバー間のスペースを削除するgeom_bar

require(ggplot2) 
dat <- data.frame(a=c("A", "B", "C"), b=c(0.71, 0.94, 0.85), d=c(32, 99, 18)) 

ggplot(dat, aes(x= a, y = b, fill=d, width = d/sum(d))) + 
    geom_bar(position=position_dodge(width = 0.1), stat="identity") 

外観を変更しますが、それはまだ幅が彼らの意味の違いを保持したまま並んで座ってバーを取得することができていないようだ(このグラフでは重複しすぎて塗りつぶしの色で表現)。

+1

この問題は、x軸のブレークの間隔が不均一になることがあります。 – beetroot

+0

私はさらに遠くに行くと不均一な距離のためにそれは不可能だと言う。この場合、私は 'barplot()'を試してみます。 – ottlngr

+0

全体的な考えであるような@beetroot - あなたはX軸上の美学的な要素の位置を制御できますか? – Spacedman

答えて

5

私が最初に私のx位置と幅を生成するために見ていないです:

まず、あなたのdata.frameは、あなたがそれはあなたは、幅の累積合計としての位置を設定することができ、プロットしたいためであると仮定すると、幅

dat$width <- 
    dat$d/sum(dat$d) 

を格納します。 、そして、

dat$loc <- 
    cumsum(dat$width) - dat$width/2 

でそれをすべて渡しますので、あなたが幅の半分を減算する必要がセンターを取得するには、あなたがバーの右端になりたい場所をその累積値であること、しかし、注意してください

ggplot(dat, aes(x= loc, y = b, fill=d, width = width)) + 
    geom_bar(stat="identity") + 
    scale_x_continuous(breaks = dat$loc 
        , labels = dat$a) 

enter image description here

を与える:ggplot呼び出し、明示的にラベルを設定します私はこのappproachの忠告については確信していませんが、これは仕事を完了する必要があります。

+0

そして、画像を追加して以来、あなたの結果はもっと良く見えます.-(気が... ...--) – drmariod

+0

画像を追加するべきかもしれません:-) – drmariod

+1

「高速」vs「長時間"質問が発生しました([Meta Discussion](http://meta.stackexchange。com/questions/9731/fastest-gun-in-the-west-problem))。両方とも非常に便利ですが、私は個人的には、今後の訪問者を助けるために追加された物語と詳細をコードの中に持つのが好きです。 –

4

連続するx軸を使用してラベルを付けることができます。

ggplot(dat, aes(x=cumsum(d/sum(d))) - d/sum(d)/2, y = b, fill=d, width=d/sum(d))) + 
    geom_bar(stat="identity", position=position_dodge()) + 
    scale_x_continuous(breaks=cumsum(dat$d/sum(dat$d)) - dat$d/sum(dat$d)/2, labels=dat$a) 

それともこれは、その後、あなたの因子ラベル作るために美学にそれらを渡し、上書き何を

+0

私が入力している間、それに私を打つ。 –

関連する問題