2017-05-08 34 views
1

私は5つのレーダーチャートを作成しようとしています。各チャートには2つのプロットがあります。 したがって、私のデータフレームの2つの行が1つのレーダーチャートを構成します。R - 2つのプロットを持つ各グラフでレーダーチャートの行列を作る方法。

例示的なデータフレーム:

DF 

name  A B C D E 

name1 1 2 3 4 5 
name1 3 2 3 5 4 
name2 3 5 4 5 5 
name2 2 1 5 1 5 
name3 1 3 2 4 1 
name3 5 4 1 2 2 
name4 1 2 3 4 5 
name4 5 4 3 2 1 
name5 1 2 3 4 5 
name5 5 4 3 2 1 
df

データフレームは、2つの異なるデータフレームで構成されています。行c(1,3,5,7,9)は1データフレームであり、行c(2,4,6,8,10)は別のデータフレームです。 1つのレーダーチャートに2つのプロットの最終目標を達成する方が簡単だと思ったので、私はそれらを1つのデータフレームに入れました。しかし、より簡単で効率的な方法があれば教えてください。

私は行1と2を1つのチャートに、行3と4を1つのチャートに、行5と6を1つのチャートに、行7と8を1つのチャートに、行9と10を1つのチャート。私は現在やっている何を

library(fsmb) 
library(plyr) 
library(dplyr) 

colors_border <- c(rgb(0.2,0.5,0.5,0.9), rgb(0.8,0.2,0.5,0.9)) 
colors_in <- c(rgb(0.2,0.5,0.5,0.4), rgb(0.8,0.2,0.5,0.4)) 

par(mar=c(1,1,1,1)) 
layout(matrix(1:5, ncol = 5, nrow = 1, byrow = T)) 

laply(c(1,3,5,7,9), function(x){ 
    radarchart(rbind(rep(5,5), rep(1,5), df[c(1,2,3,4,5,6,7,8,9,10),-1]), 
     axistype=1 , 
     pcol=colors_border, 
     pfcol=colors_in, 
     title = df$name[x], 
     plwd=3, 
     plty=1, 
     cglcol="grey", 
     cglty=1, 
     axislabcol="grey", 
     caxislabels=seq(1,5,1), 
     cglwd=0.8, 
     vlcex=0.8) 
}) 

あなたはすべての行が各レーダーチャートにプロットされて見ることができるように

enter image description here

私の実際のデータフレームは20行7つの変数を持っています。

さらに詳しい情報が必要な場合はお知らせください。どんな助けもありがとうございます。

+0

このプレゼンテーションでは、データには1つの列が欠落しているように見えます。これは、特定のレーダーチャートの最初または2番目のデータセットであるかどうかを定義するものです。たとえば、 'DF $ type = rep(1:2、times = 5)'(実際のデータに必要に応じて調整します)。こうすることで、 'name'を最初にグループ化/反復し、次に' type'を簡単に繰り返すことができます。 – r2evans

+0

ご意見ありがとうございます。私が使用している 'laply'関数で' name'と 'type'を反復する方法として答えを提供できますか? – Dre

答えて

0

lapplyを使用する必要はありません。

txt <- "name  A B C D E 
name1 1 2 3 4 5 
name1 3 2 3 5 4 
name2 3 5 4 5 5 
name2 2 1 5 1 5 
name3 1 3 2 4 1 
name3 5 4 1 2 2 
name4 1 2 3 4 5 
name4 5 4 3 2 1 
name5 1 2 3 4 5 
name5 5 4 3 2 1" 
df <- read.table(text = txt, header = TRUE) 
df$type <- rep(1:2, times = 5) 

試してみてください。

by(df, df$name, function(x) { 
    barplot(as.matrix(x[1,2:6,drop = FALSE]), col = x$type[1]) 
    barplot(as.matrix(x[2,2:6,drop = FALSE]), col = x$type[2], add=TRUE) 
}) 

(。。barplotsは、特にあなたの例では、あなたはおそらくbypar(mfrow=c(1,5))を置くところ、ここで役に立たないされていますが、デモンストレーション)

をこれが取得します途中で。これはnameでグループ化されますが、次に別の番号typeが2としてハードコードされています。これが保証されていれば問題ありませんが、typeの変数番号を持つ場合は、さらに深いレベルに進むことができます:

by(df, df$name, function(x) { 
    by(x, x$type, function(y) { 
    barplot(as.matrix(y[,2:6,drop = FALSE]), col = y$type[1], add = y$type[1] != 1) 
    }) 
}) 

あなたがしたい場合は、同じ結果(ただし少しより冗長、私は思う)で、lapplyと、このようにそれを行うことができます。

lapply(unique(df$name), function(nm) { 
    x <- subset(df, name == nm) 
    barplot(as.matrix(x[1,2:6,drop = FALSE]), col = x$type[1]) 
    barplot(as.matrix(x[2,2:6,drop = FALSE]), col = x$type[2], add=TRUE) 
}) 

(同様に、あなたが巣のためにlapply通話をすることができますtype。)