我正在嘗試生成一個平行坐標圖,其中每個變數都有自己的軸。例如:

到目前為止,我已經使用ggparcoord()了包中的函式GGally。但是,據我所知,它不允許每個變數都有自己的軸,如上所述。
有誰知道如何使用R,最好使用ggplot2?提前致謝。
uj5u.com熱心網友回復:
我不知道有任何包可以做到這一點,但是在 ggplot 中自己繪制軸并不太難。
假設我們有一個與示例圖中顯示的資料集相似的資料集:
library(ggplot2)
library(dplyr)
cars <- mtcars %>%
select(c(2:4, 6:7, 1)) %>%
tibble::rownames_to_column("model") %>%
as_tibble()
cars
#> # A tibble: 32 x 7
#> model cyl disp hp wt qsec mpg
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Mazda RX4 6 160 110 2.62 16.5 21
#> 2 Mazda RX4 Wag 6 160 110 2.88 17.0 21
#> 3 Datsun 710 4 108 93 2.32 18.6 22.8
#> 4 Hornet 4 Drive 6 258 110 3.22 19.4 21.4
#> 5 Hornet Sportabout 8 360 175 3.44 17.0 18.7
#> 6 Valiant 6 225 105 3.46 20.2 18.1
#> 7 Duster 360 8 360 245 3.57 15.8 14.3
#> 8 Merc 240D 4 147. 62 3.19 20 24.4
#> 9 Merc 230 4 141. 95 3.15 22.9 22.8
#> 10 Merc 280 6 168. 123 3.44 18.3 19.2
#> # ... with 22 more rows
我們可以使用一些簡單的演算法來計算軸中斷(并設定刻度線的坐標):
axis_df <- stack(cars[-1]) %>%
group_by(ind) %>%
summarize(breaks = pretty(values, n = 10),
yval = (breaks - min(breaks))/(max(values) - min(values))) %>%
mutate(xmin = as.numeric(ind) - 0.05,
xmax = as.numeric(ind),
x_text = as.numeric(ind) - 0.2)
以及我們實際軸線的坐標,如下所示:
axis_line_df <- axis_df %>%
group_by(ind) %>%
summarize(min = min(yval), max = max(yval))
現在我們需要對原始資料進行整形和歸一化:
lines_df <- cars[-1] %>%
mutate(across(everything(), function(x) (x - min(x))/(max(x) - min(x)))) %>%
stack() %>%
mutate(row = rep(cars$model, ncol(cars) - 1))
最后,繪圖代碼將類似于:
ggplot(lines_df, aes(ind, values, group = row))
geom_line(color = "orange", alpha = 0.5)
geom_segment(data = axis_line_df, aes(x = ind, xend = ind, y = min, yend = max),
inherit.aes = FALSE)
geom_segment(data = axis_df, aes(x = xmin, xend = xmax, y = yval, yend = yval),
inherit.aes = FALSE)
geom_text(data = axis_df, aes(x = x_text, y = yval, label = breaks),
inherit.aes = FALSE)
geom_text(data = axis_line_df, aes(x = ind, y = 1.2, label = ind),
size = 6, inherit.aes = FALSE, check_overlap = TRUE, hjust = 1)
theme_void()
theme(plot.margin = margin(50, 20, 50, 20))

由reprex 包( v2.0.0 )于 2021 年 10 月 24 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335783.html
