ggplot2で要約されたデータフレームのスケーリングされファセット化されたクラスター化されたバーグラフを作成するにはどうすればよいですか?

マックスフェルオート

さまざまな種の平均を示す棒グラフのグリッドを作成しようとしています。irisこの質問にデータセットを使用しています。

データをまとめて、長い形に溶かして、使ってみましたfacet_wrap

iris %>%
  group_by(Species) %>%
  summarise(M.Sepal.Length=mean(Sepal.Length),
            M.Sepal.Width=mean(Sepal.Width),
            M.Petal.Length= mean(Petal.Length),
            M.Petal.Width=mean(Petal.Width)) %>%
  gather(key = Part, value = Value,  M.Sepal.Length:M.Petal.Width) %>%
ggplot(., aes(Part, Value, group = Species, fill=Species)) +
  geom_col(position = "dodge") + 
  facet_grid(cols=vars(Part)) + 
  facet_grid(cols = vars(Part))

ただし、取得しているグラフには、各ファセットグリッドにまたがるx.axisラベルがあります。さらに、クラスター化されたグラフは、各ファセットボックス内の中央に配置されません。代わりに、それぞれのx軸ラベルの場所に表示されます。x軸のラベルを削除し、グラフを中央に配置し、各ファセット内でグラフをスケーリングしたいと思います。

これは、期待される出力でマークアップされた結果のグラフの画像です。 私の試み

イアン・キャンベル

おそらくこれはあなたが探しているものですか?

主な変更点は次のとおりです。

  1. Partマップされた変数として削除しますx。これにより、データはすべてのファセットの同じ場所にプロットされます。
  2. に切り替えてfacet_wrap使用できるようにするscales = "free_y"
  3. labsxタイトルを手動で追加するために使用します
  4. 追加themeして、x軸の目盛りと目盛りラベルを削除します。
library(ggplot2)
library(dplyr) # Version >= 1.0.0
iris %>%
    group_by(Species) %>%
    summarise(across(1:4, mean, .names = "M.{col}")) %>%
    gather(key = Part, value = Value,  M.Sepal.Length:M.Petal.Width) %>%
ggplot(., aes(x = 1, y = Value, group = Species, fill=Species)) +
  geom_col(position = "dodge") + 
  facet_wrap(.~Part, nrow = 1, scales = "free_y") +
  labs(x = "Part") + 
  theme(axis.ticks.x = element_blank(),
        axis.text.x = element_blank()) 

ここに画像の説明を入力してください

また、手動呼び出しをsummarise新しいacross機能に切り替える自由もありました

エラーバーを計算する方法は次のとおりです。

library(tidyr)
iris %>%
    group_by(Species) %>%
    summarise(across(1:4, list(M = mean, SE = ~ sd(.)/sqrt(length(.))),
                     .names = "{fn}_{col}")) %>%
    pivot_longer(-Species, names_to = c(".value","Part"),
                 names_pattern = "([SEM]+)_(.+)") %>% 
ggplot(., aes(x = 1, y = M, group = Species, fill=Species)) +
  geom_col(position = "dodge") + 
  geom_errorbar(aes(ymin = M - SE, ymax = M + SE), width = 0.5,
                position = position_dodge(0.9)) +
  facet_wrap(.~Part, nrow = 1, scales = "free_y") +
  labs(x = "Part", y = "Value") + 
  theme(axis.ticks.x = element_blank(),
        axis.text.x = element_blank()) 

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ