2017-05-09 2 views
1

plotrix 패키지의 radial.plot 기능을 사용하여 샘플이 다양한 카테고리에 얼마나 잘 들어 맞는지 그래프를 작성했습니다. 아래의 예를 들면 결과는 다음과 같습니다방사형 플롯에서 선을 옵셋하는 방법은 무엇입니까?

enter image description here

으로는 이미 난 아직이 약간의 생각 가시 같은 샘플 1과 2에 대한 같은 겹치는 선을 만들기 위해 투명성을 사용하고 볼 수 있습니다

못생긴 해결 방법. 지금까지 답을 찾지 못했습니다

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

정말 감사합니다, 이것은 나를 위해 속임수를 썼는지! –

관련 문제