R:可视化 "Linked" 数据

R: Visualizing "Linked" Data

我正在使用 R 并正在尝试重新创建类似这张图片的内容:

我做了一些研究,发现 R 中的“ggforce”库 (https://ggforce.data-imaginist.com/reference/geom_parallel_sets.html) 允许用户制作类似样式的图(使用“名字”、“中间名”和“的图” last name”——这些图表明“first name”确实很常见,“first name and the middle name”不太常见,“first name, middle name and last name”不太常见):

library(ggforce)
library(reshape2)

 name_data <- data.frame(
    
    "First_Name" = c("John", "John", "John", "John", "John", "John", "James", "James", "Adam", "Adam", "Henry"),
    "Middle_Name" = c("Claude", "Claude", "Claude", "Smith", "Smith", "Peters", "Stevens", "Stevens", "Ford", "Tom", "Frank"),
    "Last Name " = c("Tony", "Tony", "Frank", "Carson", "Phil", "Lewis", "Eric", "David", "Roberts", "Scott", "Xavier")
)

name_data$ID <- seq.int(nrow(name_data))
 
data <- reshape2::melt(name_data)
data <- gather_set_data(name_data)

ggplot(name_data, aes( id = value, split = First_Name, value = value)) +
  geom_parallel_sets(aes( alpha = 0.3, axis.width = 0.1) +
  geom_parallel_sets_axes(axis.width = 0.1) +
  geom_parallel_sets_labels(colour = 'white'))

但是这个returns出现如下错误:

Error in FUN(X[[i]], ...) : object 'x' not found

有人可以告诉我我做错了什么吗?

谢谢

ggplot aes函数的第一个参数是x轴变量。在您提供的示例中,那是 x=survived (可能在示例的前面设置)。您需要指定一个 x 轴变量,在本例中可能是 x=City?即尝试:

ggplot(name_data, aes(x=City, id=ID, ...

编辑: 好的,看起来您首先需要计算不同的名称组合(这已经作为值列存在于泰坦尼克号数据示例中)。您可以使用 aggregate 函数执行此操作:

name_counts=aggregate(name_data$ID,
                      by=list(First_Name=name_data$First_Name,
                              Middle_Name=name_data$Middle_Name,
                              Last_Name=name_data$Last.Name.),
                      FUN=length)
names(name_counts)[4] = 'value'

这给出了每个名字、中间名和姓氏组合的计数。此时,运行gather_set_data函数:

name_counts_gathered = gather_set_data(name_counts, 1:3)

现在,您可以使用 ggplotgeom_parallel_sets 绘图:

ggplot(name_counts_gathered) +
    geom_parallel_sets(aes(x=x,id=id,split=y,value=value))

gather_set_data 函数根据绘图函数的要求添加了 id、x 和 y 列。

我不完全确定您希望绘图看起来如何,但希望您现在可以尝试使用绘图标签和选项。