[英]How to plot parallel coordinates with multiple categorical variables in R
使用GGally軟件包中的ggparcoord
繪制平行坐標圖時,我遇到了困難。 由於有兩個類別變量,因此我想在可視化中顯示的內容類似於下圖。 我發現在ggparcoord
, groupColumn
只允許單個變量進行分組(顏色),並且可以確定地使用showPoints標記軸上的值,但是我還需要根據這些標記來改變形狀分類變量。 還有其他軟件包可以幫助我實現我的想法嗎?
任何回應將不勝感激! 謝謝!
在ggplot2中滾動自己的平行坐標圖並不難,這將使您可以靈活地自定義外觀。 下面是使用內置diamonds
數據框的示意圖。
要獲取平行坐標,您需要添加一個ID
列,以便標識數據框的每一行,我們將其用作ggplot中的group
外觀。 您還需要scale
數字值,以便在繪制它們時它們都在相同的垂直比例上。 然后,您需要在x軸上獲取所有想要的列,並將它們整形為“長”格式。 我們可以使用tidyverse/dplyr
管道運算符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
,但是似乎很簡單的唯一選項(至少在我第一次嘗試使用該函數時)是將兩列數據粘貼在一起。 下面是一個例子。 即使只有四個類別組合,該圖也會造成混淆,但是如果您的數據中有很強的模式,它也許可以解釋:
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"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.