こんにちは私は通常、次のようなコードを使用して、ggplotまたは他のタイプのプロットのバーを並べ替えます。
通常のプロット(順不同)
_library(tidyverse)
iris.tr <-iris %>% group_by(Species) %>% mutate(mSW = mean(Sepal.Width)) %>%
select(mSW,Species) %>%
distinct()
ggplot(iris.tr,aes(x = Species,y = mSW, color = Species)) +
geom_point(stat = "identity")
_
因子の順序+順序付きプロット
_iris.tr$Species <- factor(iris.tr$Species,
levels = iris.tr[order(iris.tr$mSW),]$Species,
ordered = TRUE)
ggplot(iris.tr,aes(x = Species,y = mSW, color = Species)) +
geom_point(stat = "identity")
_
因子の行は私にとって非常に不快です。なぜarrange()
または他の関数がこれを単純化できないのでしょうか。何か不足していますか?
注:
これは機能しませんが、tidyverseにこのようなものが存在するかどうかを知りたいです。
_iris.tr <-iris %>% group_by(Species) %>% mutate(mSW = mean(Sepal.Width)) %>%
select(mSW,Species) %>%
distinct() %>%
arrange(mSW)
ggplot(iris.tr,aes(x = Species,y = mSW, color = Species)) +
geom_point(stat = "identity")
_
Using forcats ›の使用:
iris.tr %>%
mutate(Species = fct_reorder(Species, mSW)) %>%
ggplot() +
aes(Species, mSW, color = Species) +
geom_point()
Baseを使用して係数を並べ替えます:
iris.ba = iris
iris.ba$Species = with(iris.ba, reorder(Species, Sepal.Width, mean))
dplyr
への翻訳:
iris.tr = iris %>% mutate(Species = reorder(Species, Sepal.Width, mean))
その後、引き続き質問のように要約してプロットできます。
いくつかのコメント:因子の並べ替えはデータ列の変更です。データ列を変更するdplyr
コマンドはmutate
です。 arrange
が行うのは行の並べ替えだけです。これは因子のレベルに影響を与えないため、ggplotの凡例または軸の順序には影響を与えません。
すべての要因には、レベルの順序があります。 ordered = TRUE
係数と通常の係数の違いは、モデルでのコントラストの設定方法です。 ordered = TRUE
は、因子レベルに「低」、「中」、「高」などの意味のあるランク順序がある場合にのみ使用する必要があります。さらに、モデルを構築していて、デフォルトでは、すべてを参照レベルと比較します。
たとえば、注文する文字ベクトルがあるとします。
iris2 <- iris %>%
mutate(Species = as.character(Species)) %>%
group_by(Species) %>%
mutate(mSW = mean(Sepal.Width)) %>%
ungroup()
Forcats :: as_factor 関数の動作を使用して、因子レベルを順序付けることもできます。
「ベースRと比較して、この関数は出現順にレベルを作成します」
library(forcats)
iris2 %>%
arrange(mSW) %>%
mutate(Species = as_factor(Species)) %>%
ggplot() +
aes(Species, mSW, color = Species) +
geom_point()