我有一个数据框(可以转换为数组,反之亦然,以方便完成任务)看起来像
ID FACTOR VAL1 VAL2 VAL3 VAL4
Apple Fruits 0.0056 -0.0025 0.0039 -0.0037
Orange Fruits 0.0067 -0.0039 0.0023 -0.0021
Carrot Veggies 0.008 -0.0037 0.0095 -0.007
Spinach Veggies 0.0067 -0.0086 0.0024 -0.0042
Cucumber Veggies 0.0056 -0.0049 -0.0202 -0.0099
Grapes Fruits 0.0055 -0.0044 0.0028 -0.0049
我希望能够在列VAL1
列的所有组合中VAL4
到FACTOR
进行投标,例如VAL1~VAL2
,VAL1~VAL3
, VAL~VAL4
,VAL2~VAL3
,VAL2~VAL4
,VAL3~VAL4
,ggplot
中的水果或蔬菜都将其考虑在内。
此数据位于文件data.txt。
中我的代码:
val = read.table("data.txt",sep="\t",header=TRUE)
df_val<-as.data.frame(val)
headers<-vector()
for (name in names(df_val)) {
headers<-union(headers,c(name))
}
plots<- vector()
for (i in 3:5) {
plots=union(plots,c(ggplot(df_val, aes(headers[i], headers[i+1])) + geom_point(aes(colour = factor(FACTOR)))))
}
multiplot(plots,cols=3)
当我执行此操作时,除了
之类的错误之外,我没有得到任何结果mapping: colour = factor(FACTOR)
geom_point: na.rm = FALSE
stat_identity:
position_identity: (width = NULL, height = NULL)
有一个简单的方法吗?
答案 0 :(得分:0)
对于此解决方案,我使用dplyr
和tidyr
对数据进行整形,然后使用ggplot2
中的构面绘制组合。这并不需要在结尾处将多个图组合成一个。
library(dplyr)
library(tidyr)
library(ggplot2)
# Index of VALi
val_i <- 1:4
# Shape the data as y ~ x
combos <- lapply(val_i[-max(val_i)], function(i) {
df_val %>%
gather_("x_key", "x", paste0("VAL", (i + 1):max(val_i))) %>%
mutate(y_key = paste0("VAL", i),
x_key = as.character(x_key)) %>%
unite(combo, y_key, x_key, sep = " ~ ") %>%
select_("ID", "FACTOR", "combo", y = paste0("VAL", i), "x")
})
combos <- bind_rows(combos)
# Plot using facets
ggplot(combos, aes(x = x, y = y, color = FACTOR)) +
facet_wrap(~combo, ncol = 3, scales = "free") +
geom_point()
注意我的观点位于不同的地方,因为我生成了假数据。