分类变量的三角图
Triangular plot for categorical variable
这里有一个问题:为分类变量的三重组合绘制值的最佳方法是什么?
这是我在 R 中得到的:
library(tidyverse)
library(ggtern)
df_person <- tibble( name = c( 'Alice', 'Bob', 'Carla', 'Dave', 'Eve' ) ) %>%
rowid_to_column( 'id_person' )
# generate all trios of persons (5 choose 3)
df <- df_person %>% select( name ) %>%
map_df( function(x) { combn(x, 3, paste, collapse = '_') } ) %>%
separate( name, c('person1', 'person2', 'person3') ) %>%
mutate_all(~ as.factor(.) )
# assign a value to each trio
df$val <- runif( nrow(df) )
# generate ticks and labels for axes
axis <- df_person %>% mutate( fct = as.factor(name) ) %>%
mutate( tick = as.numeric(fct) / 5 )
ggtern( df, aes(x = as.numeric(person1),
y = as.numeric(person2),
z = as.numeric(person3),
color = val) ) +
geom_point() +
scale_T_continuous( breaks = axis$tick, labels = axis$name ) +
scale_L_continuous( breaks = axis$tick, labels = axis$name ) +
scale_R_continuous( breaks = axis$tick, labels = axis$name ) +
labs( x = 'person1', y = 'person2', z = 'person3' )
这给出了一个相当奇怪的结果:
我希望有十个点位于网格线相交处(因为这些是分类变量)。
理想情况下,我想生成类似热图的图,即三角形图块而不是点。
非常感谢任何帮助!
好的,经过一些研究 ternary plots 我现在明白它们不是这样使用的。
在考虑总和为相同值的三个变量的不同贡献的情况下,这种图是有意义的。
对于我的特定用例,我最好使用多面条形图:
这仍然不完美,因为图中有一些组合从未出现在数据中(例如(爱丽丝、卡拉、卡拉)),但它完成了工作。
如果有人知道这个用例的更好可视化,我会非常感兴趣。
这里有一个问题:为分类变量的三重组合绘制值的最佳方法是什么?
这是我在 R 中得到的:
library(tidyverse)
library(ggtern)
df_person <- tibble( name = c( 'Alice', 'Bob', 'Carla', 'Dave', 'Eve' ) ) %>%
rowid_to_column( 'id_person' )
# generate all trios of persons (5 choose 3)
df <- df_person %>% select( name ) %>%
map_df( function(x) { combn(x, 3, paste, collapse = '_') } ) %>%
separate( name, c('person1', 'person2', 'person3') ) %>%
mutate_all(~ as.factor(.) )
# assign a value to each trio
df$val <- runif( nrow(df) )
# generate ticks and labels for axes
axis <- df_person %>% mutate( fct = as.factor(name) ) %>%
mutate( tick = as.numeric(fct) / 5 )
ggtern( df, aes(x = as.numeric(person1),
y = as.numeric(person2),
z = as.numeric(person3),
color = val) ) +
geom_point() +
scale_T_continuous( breaks = axis$tick, labels = axis$name ) +
scale_L_continuous( breaks = axis$tick, labels = axis$name ) +
scale_R_continuous( breaks = axis$tick, labels = axis$name ) +
labs( x = 'person1', y = 'person2', z = 'person3' )
这给出了一个相当奇怪的结果:
我希望有十个点位于网格线相交处(因为这些是分类变量)。
理想情况下,我想生成类似热图的图,即三角形图块而不是点。
非常感谢任何帮助!
好的,经过一些研究 ternary plots 我现在明白它们不是这样使用的。
在考虑总和为相同值的三个变量的不同贡献的情况下,这种图是有意义的。
对于我的特定用例,我最好使用多面条形图:
这仍然不完美,因为图中有一些组合从未出现在数据中(例如(爱丽丝、卡拉、卡拉)),但它完成了工作。
如果有人知道这个用例的更好可视化,我会非常感兴趣。