R 使用雷达/极坐标图描绘单个数据点

R 使用雷达/极坐标图描绘单个数据点,r,plot,ggplot2,visualization,radar-chart,R,Plot,Ggplot2,Visualization,Radar Chart,以下是我以前的帖子: 我现在想做的是,在一个完全独立的散点图中使用生成的雷达图作为数据点,或者保存对象,然后在图形上使用它来描述实际数据的形状 我有很多文件,它们通常是这样的。它们的列数范围从1到多,分数总是以降序格式。ie#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 0

以下是我以前的帖子:

我现在想做的是,在一个完全独立的散点图中使用生成的雷达图作为数据点,或者保存对象,然后在图形上使用它来描述实际数据的形状

我有很多文件,它们通常是这样的。它们的列数范围从1到多,分数总是以降序格式。ie#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) 

现在,当我想使用这些形状作为数据点时,问题就开始了

@布赖恩善意地评论并暗示了如何处理这一问题

受这些评论的启发,我现在可以将绘图与文件名一起保存为一列,并使用相同的管道不断添加新文件

  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)
  }
} }
for(文件列表中的文件){
#消除空文件(它们只包含标题)
if(file.size(file)>420){
#如果合并的数据集确实存在,请附加到该数据集
如果(存在(“DFR”)){

radarfile我想到了以下想法。我使用ggradar包创建了一个图形。然后,我使用
ggplot_build()查看了图形后面的数据帧
。图形后面似乎有13个列表。我需要调查哪个列表是包含多边形数据的正确列表。我发现第6个列表是您要提取并保存以供将来使用的列表。让我向您展示我所做的工作

library(dplyr)
library(ggradar)
library(scales)

# I modified the code from https://github.com/ricardo-bion/ggradar to get a graphic.

mtcars %>%
mutate_all(rescale) %>%
mutate(group = rownames(mtcars)) %>%
slice(5:9) %>%
select(1:4) -> mtcars_radar

g <- ggradar(mtcars_radar)
让我们确认这些数据是否再现了GGR雷达图中的五个三角形

gg <- ggplot(data = mydf, aes(x = x, y = y, group = group, color = factor(group))) +
      geom_path(show.legend = FALSE) +
      theme_bw()
gg
foo <- ggplot_build(g)$data

# This is the 6th list in foo.

 $ :'data.frame':   20 obs. of  8 variables:
  ..$ colour  : chr [1:20] "#FF5A5F" "#FF5A5F" "#FF5A5F" "#FF5A5F" ...
  ..$ x       : num [1:20] 0 0.72 -0.687 0 0 ...
  ..$ y       : num [1:20] 1.111 -0.416 -0.397 1.111 0.611 ...
  ..$ group   : atomic [1:20] 1 1 1 1 2 2 2 2 3 3 ...
  .. ..- attr(*, "n")= int 5
  ..$ PANEL   : Factor w/ 1 level "1": 1 1 1 1 1 1 1 1 1 1 ...
  ..$ size    : num [1:20] 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 ...
  ..$ linetype: num [1:20] 1 1 1 1 1 1 1 1 1 1 ...
  ..$ alpha   : logi [1:20] NA NA NA NA NA NA ...
mydf <- foo[[6]]

    colour          x          y group PANEL size linetype alpha
1  #FF5A5F  0.0000000  1.1111111     1     1  1.5        1    NA
2  #FF5A5F  0.7203077 -0.4158698     1     1  1.5        1    NA
3  #FF5A5F -0.6868360 -0.3965450     1     1  1.5        1    NA
4  #FF5A5F  0.0000000  1.1111111     1     1  1.5        1    NA
5  #FFB400  0.0000000  0.6111111     2     1  1.5        1    NA
6  #FFB400  0.4286803 -0.2474987     2     1  1.5        1    NA
7  #FFB400 -0.2584135 -0.1491951     2     1  1.5        1    NA
8  #FFB400  0.0000000  0.6111111     2     1  1.5        1    NA
9  #007A87  0.0000000  1.1111111     3     1  1.5        1    NA
10 #007A87  0.7203077 -0.4158698     3     1  1.5        1    NA
11 #007A87 -0.4726248 -0.2728700     3     1  1.5        1    NA
12 #007A87  0.0000000  1.1111111     3     1  1.5        1    NA
13 #8CE071  0.0000000  0.1111111     4     1  1.5        1    NA
14 #8CE071  0.2467912 -0.1424850     4     1  1.5        1    NA
15 #8CE071 -0.2278119 -0.1315273     4     1  1.5        1    NA
16 #8CE071  0.0000000  0.1111111     4     1  1.5        1    NA
17 #7B0051  0.0000000  0.1111111     5     1  1.5        1    NA
18 #7B0051  0.2595364 -0.1498434     5     1  1.5        1    NA
19 #7B0051 -0.1268266 -0.0732234     5     1  1.5        1    NA
20 #7B0051  0.0000000  0.1111111     5     1  1.5        1    NA
gg <- ggplot(data = mydf, aes(x = x, y = y, group = group, color = factor(group))) +
      geom_path(show.legend = FALSE) +
      theme_bw()