GGallyパッケージのggparcoord
を使用して平行座標プロットをプロットするときに、問題が発生します。 2つのカテゴリ変数があるため、視覚化で表示したいのは下の画像のようです。 ggparcoord
では、groupColumn
は単一の変数にのみ許可されていることがわかりました。 =でグループ化(色)し、確かにshowPointsを使用して軸の値をマークできますが、カテゴリ変数に従ってこれらのマーカーの形状を変更する必要もあります。私のアイデアを実現するのに役立つ他のパッケージはありますか?
どんな回答でも大歓迎です!ありがとう!
Ggplot2で独自の平行座標プロットをロールすることはそれほど難しくありません。これにより、美学をカスタマイズする柔軟性が得られます。以下は、組み込みのdiamonds
データフレームを使用した図です。
平行座標を取得するには、ID
列を追加して、データフレームの各行を識別できるようにする必要があります。これは、ggplotでgroup
美学として使用されます。また、数値をscale
して、プロットするときにすべて同じ垂直スケールになるようにする必要があります。次に、x軸に必要なすべての列を取得し、それらを「長い」形式に再形成する必要があります。以下のすべてをtidyverse/dplyr
パイプ演算子を使用してオンザフライで実行します。
カテゴリの組み合わせの数を制限した後でも、線が絡みすぎてこのプロットを簡単に解釈できない可能性があるため、これは単なる「概念実証」と見なしてください。うまくいけば、データを使ってもっと便利なものを作成できます。以下のcolour
(線の場合)とfill
(点の場合)の美学を使用しました。必要に応じて、代わりにshape
またはlinetype
を使用できます。
library(tidyverse)
theme_set(theme_classic())
# Get 20 random rows from the diamonds data frame after limiting
# to two levels each of cut and color
set.seed(2)
ds = diamonds %>%
filter(color %in% c("D","J"), cut %in% c("Good", "Premium")) %>%
sample_n(20)
ggplot(ds %>%
mutate(ID = 1:n()) %>% # Add ID for each row
mutate_if(is.numeric, scale) %>% # Scale numeric columns
gather(key, value, c(1,5:10)), # Reshape to "long" format
aes(key, value, group=ID, colour=color, fill=cut)) +
geom_line() +
geom_point(size=2, shape=21, colour="grey50") +
scale_fill_manual(values=c("black","white"))
以前はggparcoords
を使用したことがありませんが、(少なくともこの関数を最初に試したときは)簡単に思えた唯一のオプションは、2列のデータを貼り付けることでした。以下に例を示します。カテゴリの組み合わせが4つしかない場合でも、プロットはわかりにくいですが、データに強いパターンがある場合は解釈できる可能性があります。
library(GGally)
ds$group = with(ds, paste(cut, color, sep="-"))
ggparcoord(ds, columns=c(1, 5:10), groupColumn=11) +
theme(panel.grid.major.x=element_line(colour="grey70"))