6

次のような単純な棒グラフがあります

a<-data.frame(x=c("total","male","female","low education",
            "mid education","high education","working","not working"),
        y=c(80,30,50,20,40,20,65,35))
a$x<-as.character(a$x)
a$x<-factor(a$x,levels=unique(a$x))


ggplot(a,aes(x,y)) + 
geom_bar(stat="identity",fill="orange",width=0.4) +
coord_flip() +
theme_bw()

ここに画像の説明を入力 ここで、x 軸のレベル (ひっくり返されて y のように見える) は互いに関係があるため、たとえば、男性と女性は性別の内訳を表し、働いているか働いていないかは別の内訳を表します。これらの内訳を指摘するために、各内訳。

とそのパラメーター breakでいくつか試してみscale_x_discreteましたが、これはうまくいかないようです。何か案は ?

4

3 に答える 3

8

バープロットのバー間に異なる距離を設定する方法がわかりません。ただし、次のように、グループ間に高さ 0 でラベルのないバーを追加できます。

a<-data.frame(x=c("total","a","male","female","b","low education",
                  "mid education","high education","c","working","not working"),
              y=c(80,0,30,50,0,20,40,20,0,65,35))
a$x<-factor(a$x,levels=unique(a$x))


ggplot(a,aes(x,y)) + 
   geom_bar(stat="identity",fill="orange",width=0.4) +
   coord_flip() +
   theme_bw() +
   scale_x_discrete(breaks=a$x[nchar(as.character(a$x))!=1])

いくつかのコメント:

  • a$xは最初からキャラなので呼び出す必要はありませんas.character
  • 各「空の」バーに異なるラベルが付いている場合にのみ機能します。そのため、3 つの異なる文字を選択しました。
  • scale_x_discreteラベルと目盛りを非表示にするために使用されます。

結果は次のようになります。 ここに画像の説明を入力

于 2015-05-07T12:41:21.287 に答える
2
a<-data.frame(x=c("total","male","female","low education","mid education","high education","working","not working"),y=c(80,30,50,20,40,20,65,35))
a$x<-as.character(a$x)
a$x<-factor(a$x,levels=unique(a$x))

a$rel = c("a", "a", "a", "b", "b", "b", "c", "c") # set groups
ggplot(a, aes(rel, y, fill = factor(x))) + 
  geom_bar(stat = "identity", width = 0.5, position = position_dodge(0.7))
于 2015-05-07T12:30:06.837 に答える
0

scale_x_discrete (または y) を指定している場合は、limits ステートメントと labels ステートメントでスペースを入れたい場所に "" を追加するだけです。これは最初の回答と似ていますが、データセットにゼロ値を追加する必要はありません。

例: このデータセットには 8 本のバーしかありませんが、4 本ずつ 2 つのグループにグループ化されています。

scale_x_discrete( limits=c("BMayC","UMayC","BMayN","UMayN","","BJuneC","UJuneC","BJuneN","UJuneN"), labels=c("BMayC", "UMayC", "BMayN","UMayN","","BJuneC","UJuneC","BJuneN","UJuneN"))

于 2016-05-04T14:14:00.623 に答える