8

ggplot2棒グラフの棒を最大から最小の順に並べたい場合は、通常、棒カテゴリの因子レベルを次のように更新します。

one_group <- data.frame(
  height   = runif(5),
  category = gl(5, 1)
)

o <- order(one_group$height, decreasing = TRUE)
one_group$category <- factor(one_group$category, levels = one_group$category[o])

p_one_group <- ggplot(one_group, aes(category, height)) +
  geom_bar(stat = "identity")
p_one_group

さまざまなファセットに必要な棒グラフのグループがいくつかあり、各ファセットに最大から最小(および異なるx軸)の順に棒が並べられている場合、この手法は機能しなくなります。

いくつかのサンプルデータが与えられた

two_groups <- data.frame(
  height   = runif(10),
  category = gl(5, 2),
  group    = gl(2, 1, 10, labels = letters[1:2])
)

とプロットコード

p_two_groups <- ggplot(two_groups, aes(category, height)) +
  geom_bar(stat = "identity") +
  facet_grid(. ~ group, scales = "free_x")
p_two_groups

バーの注文を正しくするために何をする必要がありますか?

それが役立つ場合、解決すべき同等の問題は次のとおりです。ファセットを実行した後、ファクターレベルを更新するにはどうすればよいですか?

4

2 に答える 2

15

ここにハックがあります:

two_groups <- transform(two_groups, category2 = factor(paste(group, category)))
two_groups <- transform(two_groups, category2 = reorder(category2, rank(height)))

ggplot(two_groups, aes(category2, height)) +
  geom_bar(stat = "identity") +
  facet_grid(. ~ group, scales = "free_x") +
  scale_x_discrete(labels=two_groups$category, breaks=two_groups$category2)
  1. すべてのエントリに対してUNIQUE因子を変数にする(category2 )
  2. 高さに基づいて変数を並べ替えます
  3. 変数にプロットします:aes(x = category2)
  4. scale_x_discreteの変数(category2)の元の値(category)を使用して、軸にラベルを付け直します。
于 2011-03-24T03:31:39.280 に答える
3

これがあなたが望むものを達成するためのハックです。目盛りの下のカテゴリ値を取得する方法を理解できませんでした。ですから、誰かがそれを修正するのを手伝ってくれるなら、それは素晴らしいことです。これが機能するかどうか教えてください

# add a height rank variable to the data frame
two_groups = ddply(two_groups, .(group), transform, hrank = rank(height));

# plot the graph

p_two_groups <- ggplot(two_groups, aes(-hrank, height)) +
  geom_bar(stat = "identity") +
  facet_grid(. ~ group, scales = "free_x") +
  opts(axis.text.x = theme_blank()) +
  geom_text(aes(y = 0, label = category, vjust = 1.5))
于 2011-03-23T20:32:04.247 に答える