2017-05-09 7 views
1

plotrixパッケージのradial.plot機能を使用して、サンプルがいくつかの異なるカテゴリにどれくらい適しているかを示すグラフを作成しました。私はすでに、私はまだ、これは少しだと思うようなサンプル1及び2のように、重複行が見えるように透明性を使用しています見ることができるようにラジアルプロットのラインをオフセットする方法は?

enter image description here

:下記の例の結果は次のようになります醜い回避策。私がしたいことは、このモックアップのように、線を少しずつオフセットすることです:

enter image description here これまでのところ、答えは見つかりませんでした。どんな助け?

library(RColorBrewer) 
library(plotrix) 
library(scales) 

m <- matrix(0, 5, 5) 
m[1,1] <- 10 
m[2,1] <- 12 
m[5,2] <- 15 
m[2,3] <- 20 
m[4,4] <- 12 
m[3,5] <- 17 

colors <- brewer.pal(nrow(m), "Dark2") 
pdf(file = "overview-plot.pdf", width = 14, height = 10) 
par(cex.axis=2) 
radial.plot(m, 
      labels=c("A", "B", "C", "D", "E"), 
      radlab = FALSE, 
      mar = c(11,8,11,8), 
      cex = 2, 
      label.prop = 1.3, 
      rp.type="rs", 
      lty = 1, 
      lwd = 5, 
      start = 0.65, 
      show.grid.labels=0, 
      point.symbols=19, 
      point.col=alpha(colors, 0.8), 
      line.col=alpha(colors, 0.5), 
      boxed.radial = FALSE, 
      show.radial.grid = FALSE, 
      radial.lim=c(0,max(m)), 
      grid.bg = "#f0f0f0") 
legend(
    24,8, 
    c(1:5), 
    col=colors, 
    lty=1, 
    lwd=5, 
    bty = "n", 
    title = "Samples", 
    cex = 2) 
dev.off() 

答えて

0

次のコードでは、似たプロットが生成されるはずです。行列を長さのベクトルに変換し、プロットされた各長さの角度を指定します。角度は、グループ( "A"、 "B"、...)にプロットされた長さの数に基づいて調整されます。ゼロの長さはプロットされません。追加または変更されたコードのセクションがマークされます。

enter image description here ライブラリ(RColorBrewer) ライブラリ(plotrix) ライブラリー(スケール)

m <- matrix(0, 5, 5) 
m[1,1] <- 10 
m[2,1] <- 12 
m[5,2] <- 15 
m[2,3] <- 20 
m[4,4] <- 12 
m[3,5] <- 17 

#### added code #### 
# vector of number of non-zero (plotted) lines for each group (label) 
num_non_zero <- colSums(m > 0) 

# angles of groups (in radians) 
ang_gp <- 2*pi*seq(0,length(num_non_zero)-1,1)/length(num_non_zero) 

# adjustment to angles for multiple entries in groups (in radians) 
# increasing values will give more space 
# no check for angle being too large and being plotted in another group 
ang_adj <- 2*pi/50 

# plotting angles used with one entry per line plotted (in radians) 
ang_plot <- rep(0,sum(num_non_zero)) 

# values of lengths to plot 
# which() returns values with numbering starting 
# going down column 1 
lens_plot <- m[which(m > 0)] 

# counter used in loop 
counter <- 1 

# colors used in plotting as index of vectors 
# modulo operator returns 0 when divisible by number of groups 
# so assign this to the number of groups in this case 
col_plot_inds <- which(m>0)%%nrow(m) 
col_plot_inds[col_plot_inds == 0] <- nrow(m) 

# calcuations of adjustment to angles for each line 
# based on the number of groups 
# loop over the number of groups 
for(i in 1:length(num_non_zero)){ 

    # set of angle shifts, but not demeaned 
    shifts_unscaled <- ang_adj*seq(0,num_non_zero[i]-1,1) 

    # shifts demeaned 
    shifts_scaled <- shifts_unscaled - mean(shifts_unscaled) 

    # loop over the number if elements in each group 
    for(j in 1:num_non_zero[i]){ 

    # assigning angle as group angle plus shift 
    ang_plot[counter] <-ang_plot[counter]+ ang_gp[i] + shifts_scaled[j] 

    # incrementing counter 
    counter <- counter + 1 
    } 
} 


colors <- brewer.pal(nrow(m), "Dark2") 
pdf(file = "overview-plot.pdf", width = 14, height = 10) 
par(cex.axis=2) 
radial.plot(lens_plot, # using vector not matrix of value 
      radial.pos=ang_plot, # calcuated in loop 
      labels=c("A", "B", "C", "D", "E"), 
      radlab = FALSE, 
      mar = c(11,8,11,8), 
      cex = 2, 
      label.prop = 1.3, 
      rp.type="rs", 
      lty = 1, 
      lwd = 5, 
      start = 0.65, 
      show.grid.labels=0, 
      point.symbols=19, 
      point.col=alpha(colors[col_plot_inds], 0.8), # calling group index for colors 
      line.col=alpha(colors[col_plot_inds], 0.5), # calling group index for colors 
      boxed.radial = FALSE, 
      show.radial.grid = FALSE, 
      radial.lim=c(0,max(m)), 
      grid.bg = "#f0f0f0", 
      ) 

#### end of added code #### 
legend(
    24,8, 
    c(1:5), 
    col=colors, 
    lty=1, 
    lwd=5, 
    bty = "n", 
    title = "Samples", 
    cex = 2) 
dev.off() 
+0

どうもありがとうございました、これは私のためのトリックをやりました! –

関連する問題