【发布时间】:2017-04-11 14:38:27
【问题描述】:
最近我在R中使用ggparcoord()时遇到了一个问题。我想为平行坐标图中的线条添加一些标签,但我似乎无法做到。
这是一个 MWE:
A <- rnorm(200, 60, 200)
B <- rnorm(200, 40, 126)
C <- rnorm(200, 200, 800)
D <- c( rep("C1", 50), rep("C2", 50), rep("C3", 50), rep("C4", 50) )
df <- data.frame(A, B, C, D)
ggparcoord(df, columns = c(1, 2, 3), groupColumn = 4) +
geom_line(size = 0.25) + geom_text(label = "x", hjust = -0.5) +
ggtitle("Var relationships across clusters") +
xlab("My dimensions") + ylab("Scaled values") +
scale_colour_manual(values = c("C1" = "#2166ac",
"C2" = "#67a9cf",
"C3" = "#ef8a62",
"C4" = "#b2182b"))
所以这种方法有效,并在 3 个轴上添加了一个“x”。当我想提供适当长度的字符向量而不是“x”时,就会出现问题。所以,例如:
my_labs <- sample(LETTERS, nrow(df), replace = T)
ggparcoord(df, columns = c(1, 2, 3), groupColumn = 4) +
geom_line(size = 0.25) + geom_text(label = rep(my_labs, 3), hjust = -0.5 ) +
ggtitle("Var relationships across clusters") +
xlab("My dimensions") + ylab("Scaled values") +
scale_colour_manual(values = c("C1" = "#2166ac",
"C2" = "#67a9cf",
"C3" = "#ef8a62",
"C4" = "#b2182b"))
在这里,我将 my_labs 向量乘以 3,以匹配 ggparcoord() 对 3 个轴所需的长度(理论上)。但令人惊讶的是,这仍然失败:Error: Aesthetics must be either length 1 or the same as the data (4): label, hjust。我真的不明白这甚至意味着什么,data (4) 在那里。感谢您的帮助!
附言。在我的真实数据中,我计划实际上只标记相关的行子集;其他人将在字符向量中使用""。所以我不太担心情节过于拥挤。谢谢!
【问题讨论】:
-
我在运行您的代码时收到的错误消息是标签变量应该是 600 长,这是有道理的,因为您需要 600 个标签(数据集中的 200 行乘以 3 列)。将标签添加到数据集应该会有所帮助:
df$my_labs <- sample(LETTERS, nrow(df), replace = TRUE)。然后将label = my_labs放入aes放入geom_text。