2016-06-20 6 views
1

ggplot2, plotlyggthemes을 사용하여 데이터 요약 막대 그림을 만듭니다.plotly_build를 사용하여 geom_text 레이블 조정

# data 
dput(dat) 

structure(list(Source = structure(1:11, .Label = c("GTEx", "Target", 
"RNASeq", "Microarray", "CNA", "Mutation", "HI51", "IH250", "IH251", 
"NB88", "OBER649"), class = "factor"), Type = c("External", "External", 
"Cell Line", "Cell Line", "Cell Line", "Cell Line", "Patient Sample", 
"Patient Sample", "Patient Sample", "Patient Sample", "Patient Sample" 
), Samples = c(1641, 162, 41, 29, 34, 29, 51, 250, 251, 88, 649 
), Genes = c(52576, 25818, 26770, 19822, 21376, 12716, 21118, 
17768, 17768, 21118, 19858)), .Names = c("Source", "Type", "Samples", 
"Genes"), class = "data.frame", row.names = c(NA, -11L)) 

library(ggplot2) 
library(ggthemes) 
library(plotly) 
p <- ggplot(data = dat, aes(x = Source, y = Genes)) + 
         geom_bar(stat="identity",aes(color = Type)) + 
         theme_bw() + 
         geom_text(aes(label = Samples, color = Type), position=position_dodge(width=0.9), vjust=-0.25, size=5) + 
         theme_hc(bgcolor = "darkunica") + 
         scale_colour_hc("darkunica") + 
         theme(axis.title = element_blank(), 
          axis.text.y = element_blank(), 
          axis.ticks = element_blank(), 
          panel.grid = element_blank()) 
p <- plotly_build(p) 
p$layout$plot_bgcolor <- p$layout$paper_bgcolor 
p$layout$annotations[[1]]$text <- "" 

이 만들어 줄거리는 다음과 같습니다 : 바 이상

enter image description here

레이블 샘플의 수를 표시 여기 내 코드입니다. 내가 마우스를 올리면 Source, GenesType이 표시됩니다. positionvjust 인수를 geom_text에 사용하고 있어도 작동하지 않습니다. 막대 위에 라벨이 표시되도록 막대 또는 막대 아래에 완전히 표시되도록하려면 어떻게해야합니까? . 데이터 및 레이아웃 :

+0

당신은 [여기]를 볼 수 있었다 (http://stackoverflow.com/questions/29068867/plotly-not-getting-geom-text- : 여기 줄거리 하나의 방법 여기

for(i in seq(p$data)){ if(!is.null(p$data[[i]]$mode)){ ## if mode is not NULL if(p$data[[i]]$mode =="text"){ ## above TRUE and if mode is "text" p$data[[i]]$y = p$data[[i]]$y + max(dat$Genes)/50 ## add max(dat$Genes)/50 or any addend you wish } } } 

입니다 in-r-ggplot) – Miha

+1

'오류 : 미학은 길이가 1이거나 데이터 (11)와 동일해야합니다 : label, color, position, vjust, x, y' – dww

+0

@dww'geom_text 'geom_text (aes (label = Samples, color = Type), position = position_dodge (width = 0.9), vjust = -0.25, size = 5) '를 사용하십시오. – Miha

답변

1

내가 plotly_build의 단계까지 완료 데이터를 사용하여 (어둠의 테마없이)

당신이 당신의 plotly 개체를 검사 할 경우에는 2 종류가 있습니다. 플롯의 텍스트 요소는 막대와 동일한 x, y 속성을 갖는 "scatter"유형입니다. 그러므로, 그들은 당신의 막대와 겹치고 있습니다.

p$data[[1]]$type ## Prints result as "bar" type for dat$Type "Cell Line" 
p$data[[4]]$type ## Prints result as "scatter" for dat$Type "Cell Line" 
p$data[[4]]$mode ## Prints text's mode as "text" 
P$data[[1]]$mode ## Prints bar's mode as NULL 

음모에서 geom_text는 플롯 차트로 잘 변환되지 않습니다. 분산 유형의 $ y (y 축 좌표)를 변경해야합니다 (여기서는 텍스트가 분산 유형으로 매핑 됨). 하여 Y 축들이 눈에 띄는 차이를 1 개 또는 10 못해 결과적으로 좌표를 증가/감소 (0 내지 52,576의 범위) DAT $ 유전자 확장되므로

p$data[[4]]$y 
[1] 26770 19822 21376 12716 

. 따라서 범위가 1000, 2000보다 큰 값을 시도하는 것이 좋습니다.
또는 모드 유형 "텍스트"의 모든 y 좌표에 균일 한 양을 추가하는 코드를 작성할 수 있습니다. 이 Plot from above