这是继我之前的帖子之后:如何在ggplot2中测量多边形的面积? https://stackoverflow.com/questions/47644156/how-to-measure-the-area-of-a-polygon-in-ggplot2
我现在想做的是将生成的雷达图用作完全独立的散点图中的数据点,或者保存对象并稍后在图表上使用它来描述实际数据的形状。
我有很多文件,它们通常看起来像这样。它们的列数范围从 1 到多,并且分数始终采用降序格式。即#1 在任何给定文件中总是贡献最大。
myfile
01 0.31707317
02 0.12195122
03 0.09756098
04 0.07317073
05 0.07317073
06 0.07317073
07 0.07317073
08 0.07317073
09 0.04878049
10 0.04878049
在这里,我想分别为每个文件绘制一个雷达图,并获得周围没有网格的形状。 ggradar 是我发现的最接近、最好的。
ggradar(as.matrix(t(radar)), group.point.size = 2, grid.line.width = 0, grid.max = 1.0, grid.mid = 0,
grid.min = 0, axis.line.colour = "white", axis.label.size = 0, grid.label.size = 0,
centre.y = 0, background.circle.colour = "white", group.colours = "black", group.line.width = 1)
现在,当我想使用这些形状作为数据点时,问题就开始了。
@brian 善意地评论并暗示了如何解决这个问题。
R::ggplot2::geom_points:如何用饼图交换点? https://stackoverflow.com/questions/43984614/rggplot2geom-points-how-to-swap-points-with-pie-charts/44125392#44125392
放置在 ggmap 坐标上的小 ggplot2 图 https://stackoverflow.com/questions/45411140/small-ggplot2-plots-placed-on-coordinates-on-a-ggmap/45417727#45417727
受到这些评论的启发,我现在可以将绘图与文件名一起保存为一列,并使用相同的管道继续添加新文件。
for (file in file_list){
#eliminate the empty files (they contain only the header)
if (file.size(file) > 420){
# if the merged dataset does exist, append to it
if (exists("dfradar")){
radarfile <-read.table(file, header=TRUE, sep="\t")
radarfile1 <- as.data.frame(as.numeric(radarfile[,3]))
rownames(radarfile1) <- c(1:nrow(radarfile))
dfradar1 <- ggradar(t(radarfile1), group.point.size = 1, grid.line.width = 0, grid.max = 1, grid.mid = 0,
grid.min = 0, axis.line.colour = "white", axis.label.size = 0, grid.label.size = 0,
centre.y = 0, background.circle.colour = "white", group.colours = "black", group.line.width = 0.5) +
theme(legend.position = "none")
dfradar1 <- cbind(substring(file,11), dfradar1)
dfradar <- rbind(dfradar, dfradar1)
}
# if the merged dataset doesn't exist, create it
if (!exists("dfradar")){
radarfile <- read.table(file, header=TRUE, sep="\t")
radarfile1 <- as.data.frame(as.numeric(radarfile[,3]))
rownames(radarfile1) <- c(1:nrow(radarfile))
dfradar <- ggradar(t(radarfile1), group.point.size = 1, grid.line.width = 0, grid.max = 1, grid.mid = 0,
grid.min = 0, axis.line.colour = "white", axis.label.size = 0, grid.label.size = 0,
centre.y = 0, background.circle.colour = "white", group.colours = "black", group.line.width = 0.5) +
theme(legend.position = "none")
dfradar <- cbind(substring(file,11), dfradar)
rm(radarfile)
rm(radarfile1)
}
} }
现在,当我想拯救这些家伙时,我却无能为力;我得到:
“mutate_impl(.data,dots) 中的错误:评估错误:尝试
应用非功能。”
or:
“plot_clone(plot) 中的错误:尝试应用非功能”
# merge the df with another df containing all other
# variables that I wanna use in my scatterplot
dfradar_merge <- merge(dfradar, Cases, all=FALSE)
dfradar_merge <- dfradar_merge %>% mutate(radargrobs = list(annotation_custom(ggplotGrob(radarplots)),
xmin = as.numeric(Gender), xmax = as.numeric(Gender)*1.2,
ymin = as.numeric(Age) , ymax = as.numeric(Age)*1.2)))
我想如果我能直接理解这部分并将变量作为 xmin 和 ymin 传递,我应该能够做我需要的事情......
任何想法都非常感激。这一直令我头疼。