2017-12-07 14 views
4

個々のデータポイントを描写するためにレーダー/極性グラフを使用して:私はやって今たい何How to measure the area of a polygon in ggplot2?これは私の前のポストに従っている

はまったく別の散布図のデータポイントとして結果のレーダーチャートを使用することであるまたは多分セーブ後でグラフ上で使用して実際のデータの形を描きます。

私は多くのファイルを持っており、通常は次のようになります。それらは1から多くのcol番号の範囲であり、分数は常に降順形式です。すなわち、#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) 

radargraph

私はデータポイントとしてこれらの図形を使用する場合今、問題が開始されます。

@brianは親切にコメントし、これにアプローチする方法を示唆しました。これらのコメントに触発さ

R::ggplot2::geom_points: how to swap points with pie charts?

Small ggplot2 plots placed on coordinates on a ggmap

、私は今、ファイル名と一緒に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) 
    } 
} } 

今、私が芝生を保存したいとき、私はできません。私が取得:

"Error in mutate_impl(.data, dots) : Evaluation error: attempt to apply non-function."

か:

"Error in plot_clone(plot) : attempt to apply non-function"

# 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として変数を渡すことができれば、私は私が必要なものを行うことができるはずだと思います。 ..

すべてのアイデアは本当に感謝しています。それは私の頭痛です。

答えて

0

私は次の考えを思いつきました。私は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) 

上記のコードは次の図を生成します。私のコンピュータなどに何か問題があり、完全なグラフィックは表示されません。しかし、これはこの問題のための問題ではない。

enter image description here

は今、私たちは、グラフィックの後ろに滞在してデータを取得し、右のデータを見てみたいです。

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 ... 

このリストをデータフレームとして抽出します。このリストに目を通す理由は、色情報(例:FF5A5F)に注意を払っていたためです。

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 

このデータがggradarグラフィックの5つの三角形を再現するかどうかを確認しましょう。

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

enter image description here

は要約すると、あなたが望むデータを抽出するためにggplotデータをハックしたいです。この方法では、必要な「シェイプ」のデータを保存することができます。私はこれがあなたの後であることを願っています。

関連する問題